ca5efc44a9
- aggiornamento prototipi.
78 lines
3.5 KiB
C++
78 lines
3.5 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2015-2018
|
|
//----------------------------------------------------------------------------
|
|
// File : EGkCAvSimpleSurfFrMove.h Data : 27.04.18 Versione : 1.9e1
|
|
// Contenuto : Dichiarazione classe per movimento di superfici flat region
|
|
// nel loro piano evitando collisioni semplici
|
|
// (ovvero controllando solo i loop esterni).
|
|
//
|
|
// Modifiche : 23.09.15 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
|
|
|
//----------------------- Macro per import/export ----------------------------
|
|
#undef EGK_EXPORT
|
|
#if defined( I_AM_EGK) // da definirsi solo nella DLL
|
|
#define EGK_EXPORT __declspec( dllexport)
|
|
#else
|
|
#define EGK_EXPORT __declspec( dllimport)
|
|
#endif
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Costanti per info su tipo di Semplice Collisione tra regioni piane
|
|
const int SCI_NONE = 0 ; // non definito
|
|
const int SCI_PNT_PNT = 1 ; // tra punto di mobile e punto di fissa
|
|
const int SCI_PNT_LINE = 2 ; // tra punto di mobile e linea di fissa
|
|
const int SCI_LINE_PNT = 3 ; // tra linea di mobile e punto di fissa
|
|
const int SCI_LINE_LINE = 4 ; // tra linea di mobile e linea di fissa
|
|
|
|
//----------------------------------------------------------------------------
|
|
struct SCollInfo
|
|
{
|
|
int nType ; // tipo di collisione
|
|
|
|
int nChunkM ; // indice del chunk della regione mobile
|
|
int nLoopM ; // indice del loop del chunk della regione mobile
|
|
int nCrvM ; // indice della curva nel loop del chunk
|
|
|
|
int nChunkF ; // indice del chunk della regione fissa
|
|
int nLoopF ; // indice del loop del chunk della regione fissa
|
|
int nCrvF ; // indice della curva nel loop del chunk
|
|
|
|
Point3d ptP1 ; // punto di contatto
|
|
Point3d ptP2 ; // se contatto linea-linea, secondo punto di contatto
|
|
Vector3d vtDirM ; // se contatto del mobile con linea, sua direzione
|
|
Vector3d vtDirF ; // se contatto del fisso con linea, sua direzione
|
|
|
|
// costruttori
|
|
SCollInfo() : nType( SCI_NONE), nChunkM( -1), nLoopM( -1), nCrvM( -1), nChunkF( -1), nLoopF( -1), nCrvF( -1),
|
|
ptP1(), ptP2(), vtDirM(), vtDirF() {}
|
|
SCollInfo( const SCollInfo& Sou) : nType( Sou.nType),
|
|
nChunkM( Sou.nChunkM), nLoopM( Sou.nLoopM), nCrvM( Sou.nCrvM),
|
|
nChunkF( Sou.nChunkF), nLoopF( Sou.nLoopF), nCrvF( Sou.nCrvF),
|
|
ptP1( Sou.ptP1), ptP2( Sou.ptP2), vtDirM( Sou.vtDirM), vtDirF( Sou.vtDirF) {}
|
|
} ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
class CAvSimpleSurfFrMove
|
|
{
|
|
public :
|
|
EGK_EXPORT CAvSimpleSurfFrMove( const ISurfFlatRegion& SfrM, const ISurfFlatRegion& SfrF) ;
|
|
|
|
public :
|
|
EGK_EXPORT bool Translate( const Vector3d& vtDir, double& dLen) ;
|
|
EGK_EXPORT bool Rotate( const Point3d& ptCen, double& dAng) ;
|
|
EGK_EXPORT const SCollInfo& GetSCollInfo()
|
|
{ return m_SCollInfo ;}
|
|
|
|
private :
|
|
const ISurfFlatRegion* m_pRegM ;
|
|
const ISurfFlatRegion* m_pRegF ;
|
|
SCollInfo m_SCollInfo ;
|
|
} ;
|