diff --git a/EGkCAvSimpleSurfFrMove.h b/EGkCAvSimpleSurfFrMove.h index 8a0978e..5b1be44 100644 --- a/EGkCAvSimpleSurfFrMove.h +++ b/EGkCAvSimpleSurfFrMove.h @@ -35,20 +35,27 @@ const int SCI_LINE_LINE = 4 ; // tra linea di mobile e linea di fiss 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 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 nCrvF ; // indice della curva nel loop esterno del chunk + 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), nCrvM( -1), nChunkF( -1), nCrvF( -1), + 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), nCrvM( Sou.nCrvM), - nChunkF( Sou.nChunkF), nCrvF( Sou.nCrvF), ptP1( Sou.ptP1), - ptP2( Sou.ptP2), vtDirM( Sou.vtDirM), vtDirF( Sou.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) {} } ; //---------------------------------------------------------------------------- @@ -67,4 +74,4 @@ class CAvSimpleSurfFrMove const ISurfFlatRegion* m_pRegM ; const ISurfFlatRegion* m_pRegF ; SCollInfo m_SCollInfo ; -} ; \ No newline at end of file +} ; diff --git a/EGkCAvSurfFrMove.h b/EGkCAvSurfFrMove.h new file mode 100644 index 0000000..586c901 --- /dev/null +++ b/EGkCAvSurfFrMove.h @@ -0,0 +1,41 @@ +//---------------------------------------------------------------------------- +// EgalTech 2015-2018 +//---------------------------------------------------------------------------- +// File : EGkCAvSurfFrMove.h Data : 26.03.2026 Versione : 3.1c7 +// Contenuto : Dichiarazione classe per movimento di superfici flat region +// nel loro piano evitando collisioni +// +// Modifiche : 26.03.26 RE Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCAvSimpleSurfFrMove.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 + +//---------------------------------------------------------------------------- +class CAvSurfFrMove +{ + public : + EGK_EXPORT CAvSurfFrMove( 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& GetCollInfo() + { return m_CollInfo ; } + + private : + const ISurfFlatRegion* m_pRegM ; + const ISurfFlatRegion* m_pRegF ; + SCollInfo m_CollInfo ; +} ; diff --git a/EGkSurfFlatRegion.h b/EGkSurfFlatRegion.h index 6842148..bb11f61 100644 --- a/EGkSurfFlatRegion.h +++ b/EGkSurfFlatRegion.h @@ -52,7 +52,8 @@ class __declspec( novtable) ISurfFlatRegion : public ISurf virtual bool GetChunkCentroid( int nChunk, Point3d& ptCen) const = 0 ; virtual bool GetChunkArea( int nChunk, double& dArea) const = 0 ; virtual bool GetChunkPerimeter( int nChunk, double& dLen) const = 0 ; - virtual int GetChunkSimpleClassification( int nChunk, const ISurfFlatRegion& Other, int nOthChunk) const ; // compare only outsides + virtual int GetChunkSimpleClassification( int nChunk, const ISurfFlatRegion& Other, int nOthChunk) const = 0 ; // compare only outsides + virtual bool CheckChunkInterference( int nChunk, const ISurfFlatRegion& Other, int nOthChunk, bool& bInterference) const = 0 ; virtual bool GetChunkMaxOffset( int nChunk, double& dOffs) const = 0 ; virtual int GetLoopCount( int nChunk) const = 0 ; virtual int GetLoopCurveCount( int nChunk, int nLoop) const = 0 ; diff --git a/EXeExecutor.h b/EXeExecutor.h index 58edd70..086b938 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -808,6 +808,7 @@ EXE_EXPORT bool ExeSurfFrChunkMaxOffset( int nId, int nChunk, double& dMaxOffset EXE_EXPORT bool ExeSurfFrTestExternal( int nId1, int nId2, double dMinDist) ; EXE_EXPORT int ExeSurfFrChunkCount( int nId) ; EXE_EXPORT int ExeSurfFrChunkSimpleClassify( int nId1, int nChunk1, int nId2, int nChunk2, double dToler = 0) ; +EXE_EXPORT int ExeSurfFlatRegionInterference( int nId1, int nChunk1, int nId2, int nChunk2, double dToler = 0) ; EXE_EXPORT bool ExeSurfFrChunkCenter( int nId, int nChunk, int nRefId, Point3d& ptCen, Vector3d& vtN) ; EXE_EXPORT int ExeExtractSurfFrChunkLoops( int nId, int nChunk, int nDestGrpId, int* pnCount) ; EXE_EXPORT int ExeSurfFrGetZigZagInfill( int nId, int nDestGrpId, double dStep, double dAng, bool bSmooth, int* pnCount) ;