diff --git a/EgtGeomKernel.vcxproj b/EgtGeomKernel.vcxproj
index b8b6bc4..b9099fc 100644
--- a/EgtGeomKernel.vcxproj
+++ b/EgtGeomKernel.vcxproj
@@ -345,6 +345,7 @@ copy $(TargetPath) \EgtProg\Dll64
+
diff --git a/EgtGeomKernel.vcxproj.filters b/EgtGeomKernel.vcxproj.filters
index 6120010..68e0c44 100644
--- a/EgtGeomKernel.vcxproj.filters
+++ b/EgtGeomKernel.vcxproj.filters
@@ -550,7 +550,7 @@
File di origine\Geo
- File di origine\Geo
+ File di origine\GeoOffset
@@ -1232,6 +1232,9 @@
File di intestazione
+
+ File di intestazione\Include
+
diff --git a/SurfTriMeshOffset.cpp b/SurfTriMeshOffset.cpp
index 56213cf..dba93f3 100644
--- a/SurfTriMeshOffset.cpp
+++ b/SurfTriMeshOffset.cpp
@@ -1,21 +1,21 @@
//----------------------------------------------------------------------------
// EgalTech 2025
//----------------------------------------------------------------------------
-// File : SurfTriMeshOffset.cpp Data : 10.06.25 Versione : 2.7e4
+// File : SurfTriMeshOffset.cpp Data : 07.07.25 Versione : 2.7g1
// Contenuto : Implementazione funzione per Offset di Superfici TriMesh.
//
//
//
-// Modifiche : 10.06.25 RE - Creazione modulo.
-// 10.06.25 RE - Offset di superfici chiuse. ( ver. 2.7e4)
-// 04.07.25 RE - Thickening Offset di superfici generiche. ( ver. 2.7g1)
+// Modifiche : 10.06.25 RE Creazione modulo.
+// 10.06.25 RE Offset di superfici chiuse.
+// 04.07.25 RE Thickening Offset di superfici generiche.
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
-#include "SurfTriMesh.h"
#include "VolZmap.h"
+#include "\EgtDev\Include\EGkSurfTriMeshAux.h"
using namespace std ;
@@ -46,31 +46,34 @@ SumStm( const CISURFTMPVECTOR& vStm)
}
//----------------------------------------------------------------------------
-/* Funzione che crea l'Offset di una superficie TriMesh */
+// Funzione che crea l'Offset di una superficie TriMesh
+//----------------------------------------------------------------------------
ISurfTriMesh*
-CreateSurfTriMeshOffset( const ISurfTriMesh* pStm, double dOffs, double dLinTol, int nType)
+CreateSurfTriMeshOffset( const ISurfTriMesh* pStm, double dOffs, double dPrec, int nType)
{
- return ( CreateSurfTriMeshesOffset( { pStm}, dOffs, dLinTol, nType)) ;
+ return ( CreateSurfTriMeshesOffset( { pStm}, dOffs, dPrec, nType)) ;
}
//----------------------------------------------------------------------------
-/* Funzione che crea il Fat Offset di una superficie TriMesh */
+// Funzione che crea il Fat Offset di una superficie TriMesh
+//----------------------------------------------------------------------------
ISurfTriMesh*
-CreateSurfTriMeshThickeningOffset( const ISurfTriMesh* pStm, double dOffs, double dLinTol, int nType)
+CreateSurfTriMeshThickeningOffset( const ISurfTriMesh* pStm, double dOffs, double dPrec, int nType)
{
- return ( CreateSurfTriMeshesThickeningOffset( { pStm}, dOffs, dLinTol, nType)) ;
+ return ( CreateSurfTriMeshesThickeningOffset( { pStm}, dOffs, dPrec, nType)) ;
}
//----------------------------------------------------------------------------
-/* Funzione che crea l'Offset di un insieme di superfici */
+// Funzione che crea l'Offset di un insieme di superfici
+//----------------------------------------------------------------------------
ISurfTriMesh*
-CreateSurfTriMeshesOffset( const CISURFTMPVECTOR& vStm, double dOffs, double dLinTol, int nType)
+CreateSurfTriMeshesOffset( const CISURFTMPVECTOR& vStm, double dOffs, double dPrec, int nType)
{
// se vettore delle superfici vuoto, non faccio nulla
if ( vStm.empty())
return nullptr ;
// controllo sul valore di tolleranza lineare
- double dMyLinTol = max( dLinTol, 10 * EPS_SMALL) ;
+ double dMyPrec = max( dPrec, 100 * EPS_SMALL) ;
// --- NB. ( Il valore di Offset deve essere maggiore di 10 * EPS_SMALL in valore assoluto)
// Nel caso sia minore, restituisco semplicemente la somma delle superfici
// ( questo valore serve per rimanere coerente con l'Offset delle curve)
@@ -79,7 +82,7 @@ CreateSurfTriMeshesOffset( const CISURFTMPVECTOR& vStm, double dOffs, double dLi
// creo lo Zmap associato alle superfici TriMesh
PtrOwner pVolZmap( CreateVolZmap()) ;
- if ( IsNull( pVolZmap) || ! pVolZmap->CreateFromTriMeshOffset( vStm, dOffs, dMyLinTol, nType))
+ if ( IsNull( pVolZmap) || ! pVolZmap->CreateFromTriMeshOffset( vStm, dOffs, dMyPrec, nType))
return nullptr ;
// restituisco la superficie TriMesh
@@ -87,15 +90,16 @@ CreateSurfTriMeshesOffset( const CISURFTMPVECTOR& vStm, double dOffs, double dLi
}
//----------------------------------------------------------------------------
-/* Funzione che crea il Fat Offset di un insieme di superfici */
+//* Funzione che crea il Fat Offset di un insieme di superfici
+//----------------------------------------------------------------------------
ISurfTriMesh*
-CreateSurfTriMeshesThickeningOffset( const CISURFTMPVECTOR& vStm, double dOffs, double dLinTol, int nType)
+CreateSurfTriMeshesThickeningOffset( const CISURFTMPVECTOR& vStm, double dOffs, double dPrec, int nType)
{
// se vettore delle superfici vuoto, non faccio nulla
if ( vStm.empty())
return nullptr ;
// controllo sul valore di tolleranza lineare
- double dMyLinTol = max( dLinTol, 10 * EPS_SMALL) ;
+ double dMyPrec = max( dPrec, 100 * EPS_SMALL) ;
// --- NB. ( Il valore di Offset deve essere maggiore di 10 * EPS_SMALL in valore assoluto)
// Nel caso sia minore, restituisco semplicemente la somma delle superfici
// ( questo valore serve per rimanere coerente con l'Offset delle curve)
@@ -104,9 +108,9 @@ CreateSurfTriMeshesThickeningOffset( const CISURFTMPVECTOR& vStm, double dOffs,
// creo lo Zmap associato alle superfici TriMesh
PtrOwner pVolZmap( CreateVolZmap()) ;
- if ( IsNull( pVolZmap) || ! pVolZmap->CreateFromTriMeshThickeningOffset( vStm, dOffs, dMyLinTol, nType))
+ if ( IsNull( pVolZmap) || ! pVolZmap->CreateFromTriMeshThickeningOffset( vStm, dOffs, dMyPrec, nType))
return nullptr ;
// restituisco la superficie TriMesh
return ( pVolZmap->GetSurfTriMesh()) ;
-}
\ No newline at end of file
+}
diff --git a/VolZmap.h b/VolZmap.h
index d8ecd70..64d4dfb 100644
--- a/VolZmap.h
+++ b/VolZmap.h
@@ -82,8 +82,8 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool CreateEmpty( const Point3d& ptO, double dDimX, double dDimY, double dDimZ, double dStep, bool bTriDex) override ;
bool CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double dStep, bool bTriDex) override ;
bool CreateFromTriMesh( const ISurfTriMesh& Surf, double dStep, bool bTriDex, double dExtraBox = 0.) override ;
- bool CreateFromTriMeshOffset( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol, int nType = ISurfTriMesh::OFF_FILLET) override ;
- bool CreateFromTriMeshThickeningOffset( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol, int nType = ISurfTriMesh::OFF_FILLET) override ;
+ bool CreateFromTriMeshOffset( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol, int nType = STMOFF_FILLET) override ;
+ bool CreateFromTriMeshThickeningOffset( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol, int nType = STMOFF_FILLET) override ;
int GetBlockCount( void) const override ;
int GetBlockUpdatingCounter( int nBlock) const override ;
bool GetBlockTriangles( int nBlock, TRIA3DEXVECTOR& vTria) const override ;
diff --git a/VolZmapOffset.cpp b/VolZmapOffset.cpp
index 61223bb..3907beb 100644
--- a/VolZmapOffset.cpp
+++ b/VolZmapOffset.cpp
@@ -24,7 +24,8 @@
using namespace std ;
//----------------------------------------------------------------------------
-/* Funzione per sottrarre intervalli lungo un Dexel per l'offset di una superficie TriMesh */
+// Funzione per sottrarre intervalli lungo un Dexel per l'offset di una superficie TriMesh
+//----------------------------------------------------------------------------
bool
VolZmap::SubtractIntervalsForOffset( int nGrid, int nI, int nJ,
double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax,
@@ -35,7 +36,8 @@ VolZmap::SubtractIntervalsForOffset( int nGrid, int nI, int nJ,
}
//----------------------------------------------------------------------------
-/* Funzione per aggiungere intervalli lungo un Dexel per l'offset di una superficie TriMesh */
+// Funzione per aggiungere intervalli lungo un Dexel per l'offset di una superficie TriMesh
+//----------------------------------------------------------------------------
bool
VolZmap::AddIntervalsForOffset( int nGrid, int nI, int nJ,
double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax,
@@ -46,8 +48,9 @@ VolZmap::AddIntervalsForOffset( int nGrid, int nI, int nJ,
}
//----------------------------------------------------------------------------
-/* Funzione per la creazione di una sfera di Offset centrata sul vertice di una TriMesh con cui
- aggiungere o sottrarre intervalli lungo i Dexel coinvolti */
+// Funzione per la creazione di una sfera di Offset centrata sul vertice di una TriMesh con cui
+// aggiungere o sottrarre intervalli lungo i Dexel coinvolti
+//----------------------------------------------------------------------------
bool
VolZmap::CreateOffsSphereOnVertex( const Point3d& ptV, double dOffs, int nGrid, int nTool)
{
@@ -86,8 +89,9 @@ VolZmap::CreateOffsSphereOnVertex( const Point3d& ptV, double dOffs, int nGrid,
}
//----------------------------------------------------------------------------
-/* Funzione per la creazione di un cilindro di Offset sul vertice di una TriMesh con cui
- aggiungere o sottrarre intervalli lungo i Dexel coinvolti */
+// Funzione per la creazione di un cilindro di Offset sul vertice di una TriMesh con cui
+// aggiungere o sottrarre intervalli lungo i Dexel coinvolti.
+//----------------------------------------------------------------------------
bool
VolZmap::CreateOffsCylinderOnEdge( const Point3d& ptP1, const Point3d& ptP2, double dOffs, int nGrid,
int nTool)
@@ -140,10 +144,11 @@ VolZmap::CreateOffsCylinderOnEdge( const Point3d& ptP1, const Point3d& ptP2, dou
}
//----------------------------------------------------------------------------
-/* Funzione per inizializzare lo ZMap a partire da un vettore di superfici TriMesh */
-/* L'idea è quella di creare uno ZMap a partire dal Box complessivo delle superfici TriMesh :
-* - le superfici chiuse possono già inserire i rispettivi spilloni
-* - le superfici aperte non danno contributo */
+// Funzione per inizializzare lo ZMap a partire da un vettore di superfici TriMesh
+// L'idea è quella di creare uno ZMap a partire dal Box complessivo delle superfici TriMesh :
+// - le superfici chiuse possono già inserire i rispettivi spilloni
+// - le superfici aperte non danno contributo
+//----------------------------------------------------------------------------
bool
VolZmap::InitVolZMapOffs( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol)
{
@@ -207,8 +212,9 @@ VolZmap::InitVolZMapOffs( const CISURFTMPVECTOR& vSurf, double dOffs, double dTo
}
//----------------------------------------------------------------------------
-/* Funzione per inizializzare lo ZMap a partire da un vettore di superfici TriMesh */
-/* L'idea è quella di creare uno ZMap vuoto a partire dal Box complessivo delle superfici TriMesh */
+// Funzione per inizializzare lo ZMap a partire da un vettore di superfici TriMesh
+// L'idea è quella di creare uno ZMap vuoto a partire dal Box complessivo delle superfici TriMesh
+//----------------------------------------------------------------------------
bool
VolZmap::InitVolZMapThickeningOffs( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol)
{
@@ -240,8 +246,10 @@ VolZmap::InitVolZMapThickeningOffs( const CISURFTMPVECTOR& vSurf, double dOffs,
return ( CreateEmpty( BBoxGlob.GetMin(), BBoxGlob.GetDimX(), BBoxGlob.GetDimY(), BBoxGlob.GetDimZ(), dTol, true)) ;
}
-/* [Fillet] Funzione per aggiornare mediante Sfere, Cilindri e Facce di estrusione lo ZMap corrente
- mediante una superficie chiusa */
+//----------------------------------------------------------------------------
+// [Fillet] Funzione per aggiornare mediante Sfere, Cilindri e Facce di estrusione lo ZMap corrente
+// mediante una superficie aperta
+//----------------------------------------------------------------------------
bool
VolZmap::UpdateVolZMapByOpenSurfFilletOffset( const ISurfTriMesh* Surf, double dOffs, double dTol)
{
@@ -249,8 +257,10 @@ VolZmap::UpdateVolZMapByOpenSurfFilletOffset( const ISurfTriMesh* Surf, double d
return false ;
}
-/* [Fillet] Funzione per aggiornare mediante Sfere, Cilindri e Facce di estrusione lo ZMap corrente
- mediante una superficie chiusa */
+//----------------------------------------------------------------------------
+// [Fillet] Funzione per aggiornare mediante Sfere, Cilindri e Facce di estrusione lo ZMap corrente
+// mediante una superficie chiusa
+//----------------------------------------------------------------------------
bool
VolZmap::UpdateVolZMapByClosedSurfFilletOffset( const ISurfTriMesh* Surf, double dOffs, double dTol)
{
@@ -260,25 +270,25 @@ VolZmap::UpdateVolZMapByClosedSurfFilletOffset( const ISurfTriMesh* Surf, double
if ( ! Surf->IsValid() || Surf->GetTriangleCount() == 0)
return true ;
- /* Assunzioni :
- - Idea Generale di Offset
- - Su ogni vertice viene definita una sfera ( con raggio pari al valore di Offset e
- centro il vertice corrente)
- - Su ogni lato viene definito un cilindro ( con raggio di base pari al valore di Offset
- e asse definito dall'edge stesso)
- - Su ogni faccia viene definita una superficie di estrusione ( dove le due basi sono
- definite dalla traslazione sia in positivo che in negativo della faccia lungo la sua normale)
-
- - Segno dell'Offset :
- - Positivo ( si sommano gli intervalli corrisipondenti alle entità create)
- - Negativo ( si sottraggono gli intervalli corrispondenti alle enetità create)
-
- - Semplificazione entità :
- La creazione di Sfere e Cilindri potrebbe essere resa più "corretta" definitendo solo
- "spicchi 3d" di sfera e "spicchi 3d" di cilindri. Dato che le operazioni di somma, sottrazioni e
- calcolo delle normali per gli spilloni sono elementari su queste figure, si rischia di appesantire
- troppo i conti introducendo variabili angolari che non sommando tutte le parti.
- */
+ // Assunzioni :
+ // - Idea Generale di Offset
+ // - Su ogni vertice viene definita una sfera ( con raggio pari al valore di Offset e
+ // centro il vertice corrente)
+ // - Su ogni lato viene definito un cilindro ( con raggio di base pari al valore di Offset
+ // e asse definito dall'edge stesso)
+ // - Su ogni faccia viene definita una superficie di estrusione ( dove le due basi sono
+ // definite dalla traslazione sia in positivo che in negativo della faccia lungo la sua normale)
+ //
+ // - Segno dell'Offset :
+ // - Positivo ( si sommano gli intervalli corrisipondenti alle entità create)
+ // - Negativo ( si sottraggono gli intervalli corrispondenti alle enetità create)
+ //
+ // - Semplificazione entità :
+ // La creazione di Sfere e Cilindri potrebbe essere resa più "corretta" definitendo solo
+ // "spicchi 3d" di sfera e "spicchi 3d" di cilindri. Dato che le operazioni di somma, sottrazioni e
+ // calcolo delle normali per gli spilloni sono elementari su queste figure, si rischia di appesantire
+ // troppo i conti introducendo variabili angolari che non sommando tutte le parti.
+ //
// definisco vettore di frame Locali alle 3 griglie
FRAME3DVECTOR vFrGrid( 4) ;
@@ -372,8 +382,9 @@ VolZmap::UpdateVolZMapByClosedSurfFilletOffset( const ISurfTriMesh* Surf, double
return true ;
}
-/* [Fillet Thickening] Funzione per aggiornare mediante Sfere, Cilindri e Facce di estrusione lo ZMap corrente
- mediante una superficie generica (aperta o chiusa) */
+//----------------------------------------------------------------------------
+// [Fillet Thickening] Funzione per aggiornare mediante Sfere, Cilindri e Facce di estrusione lo ZMap corrente
+// mediante una superficie generica (aperta o chiusa)
//----------------------------------------------------------------------------
bool
VolZmap::UpdateVolZMapBySurfThickeningFilletOffset( const ISurfTriMesh* Surf, double dOffs, double dTol)
@@ -470,13 +481,12 @@ VolZmap::UpdateVolZMapBySurfThickeningFilletOffset( const ISurfTriMesh* Surf, do
}
//----------------------------------------------------------------------------
-/* Funzione per la creazine di uno Zmap di Offset (positivo o negativo) a partire da un
- vettore di superfici TriMesh (aperte o chiuse) */
-/*
- Definizione :
- - Lo Zmap di Offset ( positivo o negativo) di una superficie chiusa è automaticamente l'Offset stesso
- - Lo Zmap di Offset ( positivo o negativo) di una superficie aperta è ????? ( da capire...)
-*/
+// Funzione per la creazine di uno Zmap di Offset (positivo o negativo) a partire da un
+// vettore di superfici TriMesh (aperte o chiuse).
+// Definizione :
+// - Lo Zmap di Offset ( positivo o negativo) di una superficie chiusa è automaticamente l'Offset stesso
+// - Lo Zmap di Offset ( positivo o negativo) di una superficie aperta è ????? ( da capire...)
+//----------------------------------------------------------------------------
bool
VolZmap::CreateFromTriMeshOffset( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol, int nType)
{
@@ -503,7 +513,7 @@ VolZmap::CreateFromTriMeshOffset( const CISURFTMPVECTOR& vSurf, double dOffs, do
continue ;
// aggiorno lo ZMap
if ( Surf->IsClosed()) {
- if ( nType == ISurfTriMesh::OFF_FILLET) {
+ if ( nType == STMOFF_FILLET) {
if ( ! UpdateVolZMapByClosedSurfFilletOffset( Surf, dOffs, dTol))
return false ;
}
@@ -518,8 +528,9 @@ VolZmap::CreateFromTriMeshOffset( const CISURFTMPVECTOR& vSurf, double dOffs, do
}
//----------------------------------------------------------------------------
-/* Funzione per la creazine di uno Zmap di Fat Offset a partire da un
- vettore di superfici TriMesh (aperte o chiuse) */
+// Funzione per la creazine di uno Zmap di Fat Offset a partire da un
+// vettore di superfici TriMesh (aperte o chiuse).
+//----------------------------------------------------------------------------
bool
VolZmap::CreateFromTriMeshThickeningOffset( const CISURFTMPVECTOR& vSurf, double dOffs, double dTol, int nType)
{
@@ -546,7 +557,7 @@ VolZmap::CreateFromTriMeshThickeningOffset( const CISURFTMPVECTOR& vSurf, double
continue ;
// aggiorno lo Zmap
- if ( nType == ISurfTriMesh::OFF_FILLET) {
+ if ( nType == STMOFF_FILLET) {
if ( ! UpdateVolZMapBySurfThickeningFilletOffset( Surf, dOffs, dTol))
return false ;
}
@@ -555,6 +566,3 @@ VolZmap::CreateFromTriMeshThickeningOffset( const CISURFTMPVECTOR& vSurf, double
m_nShape = OFFSET ;
return true ;
}
-
-
-