//---------------------------------------------------------------------------- // 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 nCrvM ; // indice della curva nel loop esterno del chunk int nChunkF ; // indice del chunk della regione fissa int nCrvF ; // indice della curva nel loop esterno 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), nCrvM( -1), nChunkF( -1), nCrvF( -1), ptP1(), ptP2(), vtDirM(), vtDirF() {} SCollInfo( const SCollInfo& Sou) : nType( Sou.nType), nChunkM( Sou.nChunkM), nCrvM( Sou.nCrvM), nChunkF( Sou.nChunkF), 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 ; } ;