From 4352332d549556257540d6a14388bc15dec9bff7 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Fri, 27 Mar 2026 18:32:58 +0100 Subject: [PATCH 1/3] Include (Nst_SurfFr) : - primo commit per CAv tra Regioni Piane con loop interni e Interferenza tra Regioni Piane. --- EGkCAvSurfFrMove.h | 76 +++++++++++++++++++++++++++++++++++++++++++++ EGkSurfFlatRegion.h | 3 +- EXeExecutor.h | 1 + 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 EGkCAvSurfFrMove.h diff --git a/EGkCAvSurfFrMove.h b/EGkCAvSurfFrMove.h new file mode 100644 index 0000000..cfc04f0 --- /dev/null +++ b/EGkCAvSurfFrMove.h @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------------- +// EgalTech 2015-2018 +//---------------------------------------------------------------------------- +// File : EGkCAvSurfFrMove.h Data : 26.03.2026 Versione : 3.1c6 +// 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/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 Collisione tra regioni piane +const int CI_NONE = 0 ; // non definito +const int CI_PNT_PNT = 1 ; // tra punto di mobile e punto di fissa +const int CI_PNT_LINE = 2 ; // tra punto di mobile e linea di fissa +const int CI_LINE_PNT = 3 ; // tra linea di mobile e punto di fissa +const int CI_LINE_LINE = 4 ; // tra linea di mobile e linea di fissa + +//---------------------------------------------------------------------------- +struct CollInfo +{ + 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 + CollInfo() : nType( CI_NONE), nChunkM( -1), nLoopM( -1), nCrvM( -1), nChunkF( -1), nLoopF( -1), nCrvF( -1), + ptP1(), ptP2(), vtDirM(), vtDirF() {} + CollInfo( const CollInfo& 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 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 CollInfo& GetCollInfo() + { return m_CollInfo ; } + + private : + const ISurfFlatRegion* m_pRegM ; + const ISurfFlatRegion* m_pRegF ; + CollInfo 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) ; From ca5efc44a99470537a2cb0369947d07b9e695d6c Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Mon, 30 Mar 2026 18:14:56 +0200 Subject: [PATCH 2/3] Include (Nst_SurfFr) : - aggiornamento prototipi. --- EGkCAvSimpleSurfFrMove.h | 21 +++++++++++++------- EGkCAvSurfFrMove.h | 41 +++------------------------------------- 2 files changed, 17 insertions(+), 45 deletions(-) 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 index cfc04f0..30ce905 100644 --- a/EGkCAvSurfFrMove.h +++ b/EGkCAvSurfFrMove.h @@ -12,7 +12,7 @@ #pragma once -#include "/EgtDev/Include/EGkSurfFlatRegion.h" +#include "/EgtDev/Include/EGkCAvSimpleSurfFrMove.h" //----------------------- Macro per import/export ---------------------------- #undef EGK_EXPORT @@ -22,41 +22,6 @@ #define EGK_EXPORT __declspec( dllimport) #endif -//---------------------------------------------------------------------------- -// Costanti per info su tipo di Collisione tra regioni piane -const int CI_NONE = 0 ; // non definito -const int CI_PNT_PNT = 1 ; // tra punto di mobile e punto di fissa -const int CI_PNT_LINE = 2 ; // tra punto di mobile e linea di fissa -const int CI_LINE_PNT = 3 ; // tra linea di mobile e punto di fissa -const int CI_LINE_LINE = 4 ; // tra linea di mobile e linea di fissa - -//---------------------------------------------------------------------------- -struct CollInfo -{ - 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 - CollInfo() : nType( CI_NONE), nChunkM( -1), nLoopM( -1), nCrvM( -1), nChunkF( -1), nLoopF( -1), nCrvF( -1), - ptP1(), ptP2(), vtDirM(), vtDirF() {} - CollInfo( const CollInfo& 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 CAvSurfFrMove { @@ -66,11 +31,11 @@ class CAvSurfFrMove public : EGK_EXPORT bool Translate( const Vector3d& vtDir, double& dLen) ; EGK_EXPORT bool Rotate( const Point3d& ptCen, double& dAng) ; - EGK_EXPORT const CollInfo& GetCollInfo() + EGK_EXPORT const SCollInfo& GetCollInfo() { return m_CollInfo ; } private : const ISurfFlatRegion* m_pRegM ; const ISurfFlatRegion* m_pRegF ; - CollInfo m_CollInfo ; + SCollInfo m_CollInfo ; } ; From a11da73e368f70969ffdd3e8d3acc6988ff6aa06 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Tue, 31 Mar 2026 14:32:41 +0200 Subject: [PATCH 3/3] Include (Nst_SurfFr) : - modifica stilistica. --- EGkCAvSurfFrMove.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EGkCAvSurfFrMove.h b/EGkCAvSurfFrMove.h index 30ce905..586c901 100644 --- a/EGkCAvSurfFrMove.h +++ b/EGkCAvSurfFrMove.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- // EgalTech 2015-2018 //---------------------------------------------------------------------------- -// File : EGkCAvSurfFrMove.h Data : 26.03.2026 Versione : 3.1c6 +// File : EGkCAvSurfFrMove.h Data : 26.03.2026 Versione : 3.1c7 // Contenuto : Dichiarazione classe per movimento di superfici flat region // nel loro piano evitando collisioni //