EgtGeomKernel :
- prime sistemazioni per offset superfici trimesh tramite Zmap.
This commit is contained in:
+59
-51
@@ -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 ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user