Compare commits

...

11 Commits

Author SHA1 Message Date
Daniele Bariletti a4b66af304 EgtGeomKernel :
- piccola correzione.
2025-08-28 11:51:08 +02:00
Daniele Bariletti 0a5d655bfc EgtGeomKernel :
- correzione al precedente commit.
2025-08-28 11:37:35 +02:00
Daniele Bariletti 6393817f41 EgtGeomKernel :
- piccoli aggiustamenti.
2025-08-28 10:27:43 +02:00
Daniele Bariletti f871bfedc9 EgtGeomKernel :
- correzioni alla versione VM 5 assi con sup bilineari.
2025-08-28 10:10:53 +02:00
Daniele Bariletti e38b065357 EgtGeomKernel :
- VM 5 assi con sup. bilineari, aggiunta gestione delle intersezioni multiple.
2025-08-27 10:43:58 +02:00
Daniele Bariletti 704a977475 EgtGeomKernel :
- tolto l'uso di namespace std dagli header.
2025-08-27 10:42:11 +02:00
Daniele Bariletti 51fb1f4993 EgtGeomKernel :
- VM 5 assi con bilineari con un volume unico.
2025-08-26 10:30:34 +02:00
Daniele Bariletti dbb751a441 EgtGeomKernel :
- VM 5 assi con bilineari, riorganizzato.
2025-08-25 16:53:44 +02:00
Daniele Bariletti 6a4b4feff5 EgtGeomKernel :
- aggiunta funzione per restituire tutti i punti di controllo di una surf di bezier.

(cherry picked from commit 574041cf18)
2025-08-22 15:44:27 +02:00
Daniele Bariletti 6f1f3441ea EgtGeomKernel :
- uniformazione delle funzioni per l'approssimazione curve con bezier.

(cherry picked from commit 05c0b0a18b)
2025-08-22 15:44:17 +02:00
Daniele Bariletti b955b12f38 EgtGeomKernel :
- aggiunta e miglioramento funzioni per la gesitone di curve bezier.

(cherry picked from commit 8ee5bc74d5)
2025-08-22 15:43:53 +02:00
9 changed files with 1022 additions and 962 deletions
+41 -9
View File
@@ -513,8 +513,13 @@ CurveToBezierCurve( const ICurve* pCrv, int nDeg, bool bMakeRatOrNot)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
ICurveBezier* ICurveBezier*
LineToBezierCurve( const ICurveLine* pCrvLine, int nDeg, bool bMakeRatOrNot) LineToBezierCurve( const ICurve* pCrv, int nDeg, bool bMakeRatOrNot)
{ {
// verifico sia una linea
const CurveLine* pCrvLine = GetBasicCurveLine( pCrv) ;
if ( pCrvLine == nullptr)
return nullptr ;
PtrOwner<ICurveBezier> pCrvBezier( CreateCurveBezier()) ; PtrOwner<ICurveBezier> pCrvBezier( CreateCurveBezier()) ;
// rendo tutte le curve di grado 2 e razionali così posso convertire anche archi e avere tutte curve dello stesso grado e razionali // rendo tutte le curve di grado 2 e razionali così posso convertire anche archi e avere tutte curve dello stesso grado e razionali
pCrvBezier->Init( nDeg, true) ; pCrvBezier->Init( nDeg, true) ;
@@ -560,7 +565,7 @@ ArcToBezierCurve( const ICurve* pCrv, int nDeg, bool bMakeRatOrNot)
nParts = max( nParts, 2) ; nParts = max( nParts, 2) ;
for ( int i = 0 ; i < nParts ; ++ i) { for ( int i = 0 ; i < nParts ; ++ i) {
// copio l'arco originale // copio l'arco originale
CurveArc cArc = *pArc ; CurveArc cArc = *GetBasicCurveArc(pArc->Clone()) ;
// lo limito alla parte di interesse // lo limito alla parte di interesse
cArc.TrimStartEndAtParam( i / double( nParts), ( i + 1) / double( nParts)) ; cArc.TrimStartEndAtParam( i / double( nParts), ( i + 1) / double( nParts)) ;
// creo la curva di Bezier equivalente // creo la curva di Bezier equivalente
@@ -584,8 +589,13 @@ ArcToBezierCurve( const ICurve* pCrv, int nDeg, bool bMakeRatOrNot)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
ICurve* ICurve*
CompositeToBezierCurve( const ICurveComposite* pCC, int nDeg, bool bMakeRatOrNot) CompositeToBezierCurve( const ICurve* pCrv, int nDeg, bool bMakeRatOrNot)
{ {
// verifico sia una composita
const CurveComposite* pCC = GetBasicCurveComposite( pCrv) ;
if ( pCC == nullptr)
return nullptr ;
// converto tutte le curve in bezier razionali di grado 2 // converto tutte le curve in bezier razionali di grado 2
PtrOwner<ICurveComposite> pCCBezier( CreateCurveComposite()) ; PtrOwner<ICurveComposite> pCCBezier( CreateCurveComposite()) ;
for ( int i = 0 ; i < int( pCC->GetCurveCount()) ; ++i) { for ( int i = 0 ; i < int( pCC->GetCurveCount()) ; ++i) {
@@ -620,10 +630,15 @@ CompositeToBezierCurve( const ICurveComposite* pCC, int nDeg, bool bMakeRatOrNot
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
ICurve* ICurve*
EditBezierCurve( const ICurveBezier* pCrvBezier, int nDeg, bool bMakeRatOrNot, double dTol) EditBezierCurve( const ICurve* pCrv, int nDeg, bool bMakeRatOrNot, double dTol)
{ {
// se nDeg == -1 allora viene mantenuto il grado della curva originale // se nDeg == -1 allora viene mantenuto il grado della curva originale
// verifico sia una bezier
const CurveBezier* pCrvBezier = GetBasicCurveBezier( pCrv) ;
if ( pCrvBezier == nullptr)
return nullptr ;
if( nDeg == 2 || nDeg == 1) if( nDeg == 2 || nDeg == 1)
return nullptr ; return nullptr ;
@@ -889,8 +904,13 @@ BezierDecreaseDegree(const ICurveBezier* pCrvBezier, double dTol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
ICurve* ICurve*
ApproxBezierWithCubics(const ICurveBezier* pCrvBezier, double dTol) ApproxBezierWithCubics(const ICurve* pCrv, double dTol)
{ {
// verifico sia una bezier
const CurveBezier* pCrvBezier = GetBasicCurveBezier( pCrv) ;
if ( pCrvBezier == nullptr)
return nullptr ;
// cerco di stimare quanti cambi di concavità ho // cerco di stimare quanti cambi di concavità ho
// tiro una linea tra il primo punto di controllo e l'ultimo e poi scorro gli altri punti di controllo // tiro una linea tra il primo punto di controllo e l'ultimo e poi scorro gli altri punti di controllo
// controllando quante volte salto da un lato all'altro della linea // controllando quante volte salto da un lato all'altro della linea
@@ -1012,8 +1032,13 @@ ApproxBezierWithCubics(const ICurveBezier* pCrvBezier, double dTol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
ICurveBezier* ICurveBezier*
ApproxCurveBezierWithSingleCubic( const ICurveBezier* pCrvBez) ApproxCurveBezierWithSingleCubic( const ICurve* pCrv)
{ {
// verifico sia una bezier
const CurveBezier* pCrvBez = GetBasicCurveBezier( pCrv) ;
if ( pCrvBez == nullptr)
return nullptr ;
Point3d ptStart, ptEnd ; Point3d ptStart, ptEnd ;
pCrvBez->GetStartPoint( ptStart) ; pCrvBez->GetStartPoint( ptStart) ;
pCrvBez->GetEndPoint( ptEnd) ; pCrvBez->GetEndPoint( ptEnd) ;
@@ -1042,8 +1067,13 @@ ApproxCurveBezierWithSingleCubic( const ICurveBezier* pCrvBez)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
ICurveBezier* ICurveBezier*
ApproxArcCurveBezierWithSingleCubic( const ICurveBezier* pCrvBez, const Point3d& ptCen) ApproxArcCurveBezierWithSingleCubic( const ICurve* pCrv, const Point3d& ptCen)
{ {
// verifico sia una bezier
const CurveBezier* pCrvBez = GetBasicCurveBezier( pCrv) ;
if ( pCrvBez == nullptr)
return nullptr ;
// converto una curva di bezier che definisce un arco perfetto di circonferenza // converto una curva di bezier che definisce un arco perfetto di circonferenza
// dato il centro( della circonferenza), inizio e fine // dato il centro( della circonferenza), inizio e fine
// N.B. : per archi con angolo al centro < 90 // N.B. : per archi con angolo al centro < 90
@@ -1086,7 +1116,9 @@ ApproxArcCurveBezierWithSingleCubic( const ICurveBezier* pCrvBez, const Point3d&
ICurve* ICurve*
ApproxCurveWithBezier( const ICurve*, double dTol) ApproxCurveWithBezier( const ICurve*, double dTol)
{ {
// interpolazione di punti con una curva bezier // campiono punti lungo la curva e poi li interpolo
// oppure faccio la fat curve e poi calcolo una bezier che stia all'interno di quella regione
PtrOwner<ICurveComposite> pCC( CreateBasicCurveComposite()) ; PtrOwner<ICurveComposite> pCC( CreateBasicCurveComposite()) ;
return Release( pCC) ; return Release( pCC) ;
@@ -1262,7 +1294,7 @@ CurveToNoArcsCurve( const ICurve* pCrv)
return nullptr ; return nullptr ;
// se arco, devo trasformarlo in curva di Bezier (semplice o composta) // se arco, devo trasformarlo in curva di Bezier (semplice o composta)
if ( pCrv->GetType() == CRV_ARC) { if ( pCrv->GetType() == CRV_ARC) {
return ArcToBezierCurve( pCrv) ; return ArcToBezierCurve( GetCurveArc(pCrv)) ;
} }
// se curva composita, devo trasformarla in composita senza archi // se curva composita, devo trasformarla in composita senza archi
else if ( pCrv->GetType() == CRV_COMPO) { else if ( pCrv->GetType() == CRV_COMPO) {
+1 -1
View File
@@ -33,5 +33,5 @@ bool CurveGetArea( const ICurve& crvC, Plane3d& plPlane, double& dArea) ;
bool CurveDump( const ICurve& crvC, std::string& sOut, bool bMM, const char* szNewLine) ; bool CurveDump( const ICurve& crvC, std::string& sOut, bool bMM, const char* szNewLine) ;
bool CopyExtrusion( const ICurve* pSouCrv, ICurve* pDestCrv) ; bool CopyExtrusion( const ICurve* pSouCrv, ICurve* pDestCrv) ;
bool CopyThickness( const ICurve* pSouCrv, ICurve* pDestCrv) ; bool CopyThickness( const ICurve* pSouCrv, ICurve* pDestCrv) ;
ICurveBezier* ApproxCurveBezierWithSingleCubic( const ICurveBezier* pCrvBez) ; ICurveBezier* ApproxCurveBezierWithSingleCubic( const ICurve* pCrv) ;
Voronoi* GetCurveVoronoi( const ICurve& crvC) ; Voronoi* GetCurveVoronoi( const ICurve& crvC) ;
+8
View File
@@ -2383,3 +2383,11 @@ CurveBezier::IsALine( void) const
} }
return true ; return true ;
} }
//----------------------------------------------------------------------------
PNTVECTOR
CurveBezier::GetAllControlPoints( void) const
{
PNTVECTOR vPntCtrl = m_vPtCtrl ;
return vPntCtrl ;
}
+1
View File
@@ -153,6 +153,7 @@ class CurveBezier : public ICurveBezier, public IGeoObjRW
bool MakeRationalStandardForm( void) override ; bool MakeRationalStandardForm( void) override ;
bool MakeNonRational( double dTol) override ; bool MakeNonRational( double dTol) override ;
bool IsALine( void) const override ; bool IsALine( void) const override ;
PNTVECTOR GetAllControlPoints( void) const ; // non aggiunta in interfaccia
public : // IGeoObjRW public : // IGeoObjRW
int GetNgeId( void) const override ; int GetNgeId( void) const override ;
+8
View File
@@ -5352,3 +5352,11 @@ SurfBezier::CreateBySetOfCurves( const ICURVEPOVECTOR& vCrvBez, bool bReduceToDe
} }
return true ; return true ;
} }
//----------------------------------------------------------------------------
PNTVECTOR
SurfBezier::GetAllControlPoints( void) const
{
PNTVECTOR vPntCtrl = m_vPtCtrl ;
return vPntCtrl ;
}
+3 -3
View File
@@ -22,7 +22,6 @@
#include "/EgtDev/Include/EGkSurfBezier.h" #include "/EgtDev/Include/EGkSurfBezier.h"
#include "/EgtDev/Include/EGkGeoCollection.h" #include "/EgtDev/Include/EGkGeoCollection.h"
using namespace std ;
class Tree ; class Tree ;
struct PairHashIntInt { struct PairHashIntInt {
@@ -157,6 +156,7 @@ class SurfBezier : public ISurfBezier, public IGeoObjRW
bool CreateByPointCurve( const Point3d& pt, const ICurve* pCurve) override ; bool CreateByPointCurve( const Point3d& pt, const ICurve* pCurve) override ;
bool CreateByTwoCurves( const ICurve* pCurve1, const ICurve* pCurve2, int nType) override ; bool CreateByTwoCurves( const ICurve* pCurve1, const ICurve* pCurve2, int nType) override ;
bool CreateBySetOfCurves( const ICURVEPOVECTOR& vCrvBez, bool bReduceToDeg3) override ; bool CreateBySetOfCurves( const ICURVEPOVECTOR& vCrvBez, bool bReduceToDeg3) override ;
PNTVECTOR GetAllControlPoints( void) const ;
public : // IGeoObjRW public : // IGeoObjRW
int GetNgeId( void) const override ; int GetNgeId( void) const override ;
@@ -168,7 +168,7 @@ class SurfBezier : public ISurfBezier, public IGeoObjRW
public : public :
SurfBezier( void) ; SurfBezier( void) ;
SurfBezier( const SurfBezier& sbSrc) SurfBezier( const SurfBezier& sbSrc) : m_pSTM( nullptr), m_pSTMRefined( nullptr), m_pTrimReg(nullptr)
{ if ( ! CopyFrom( sbSrc)) { if ( ! CopyFrom( sbSrc))
LOG_ERROR( GetEGkLogger(), "SurfBezier : copy constructor error") } LOG_ERROR( GetEGkLogger(), "SurfBezier : copy constructor error") }
SurfBezier& operator =( const SurfBezier& sbSrc) SurfBezier& operator =( const SurfBezier& sbSrc)
@@ -238,7 +238,7 @@ class SurfBezier : public ISurfBezier, public IGeoObjRW
SurfFlatRegion* m_pTrimReg ; // eventuale regione di trim SurfFlatRegion* m_pTrimReg ; // eventuale regione di trim
int m_nTempProp[2] ; // vettore proprietà temporanee int m_nTempProp[2] ; // vettore proprietà temporanee
double m_dTempParam[2] ; // vettore parametri temporanei double m_dTempParam[2] ; // vettore parametri temporanei
mutable vector<ICRVCOMPOPOVECTOR> m_mCCEdge ; // vettore dei vettori che contengono le curve compo degli edge della superficie nello spazio 3D mutable std::vector<ICRVCOMPOPOVECTOR> m_mCCEdge ; // vettore dei vettori che contengono le curve compo degli edge della superficie nello spazio 3D
mutable ICRVCOMPOPOVECTOR m_vCCLoop ; // vettore dei loop della superficie trimmata mutable ICRVCOMPOPOVECTOR m_vCCLoop ; // vettore dei loop della superficie trimmata
mutable int m_nIsPlanar ; // enum che indica se la superficie è piana ( -1, non è stato calcolato) mutable int m_nIsPlanar ; // enum che indica se la superficie è piana ( -1, non è stato calcolato)
mutable DBLVECTOR m_vBernU ; mutable DBLVECTOR m_vBernU ;
+8 -8
View File
@@ -23,7 +23,7 @@
#include <utility> #include <utility>
struct PairHashInt64 { struct PairHashInt64 {
size_t operator()(const pair<int64_t, int64_t>& key) const { size_t operator()(const std::pair<int64_t, int64_t>& key) const {
size_t h1 = std::hash<int64_t>{}(key.first) ; size_t h1 = std::hash<int64_t>{}(key.first) ;
size_t h2 = std::hash<int64_t>{}(key.second) ; size_t h2 = std::hash<int64_t>{}(key.second) ;
return h1 ^ (h2 << 1); // Combine hashes return h1 ^ (h2 << 1); // Combine hashes
@@ -252,12 +252,12 @@ class Tree
bool BuildTree( double dLinTol = LIN_TOL_STD, double dSideMin = 1, double dSideMax = INFINITO) ; // dSideMax è il massimo per la dimensione maggiore di un triangolo della trimesh bool BuildTree( double dLinTol = LIN_TOL_STD, double dSideMin = 1, double dSideMax = INFINITO) ; // dSideMax è il massimo per la dimensione maggiore di un triangolo della trimesh
// dSideMin è lunghezza minima del lato di una cella nello spazio reale // dSideMin è lunghezza minima del lato di una cella nello spazio reale
bool BuildTree_test( double dLinTol = LIN_TOL_STD, double dSideMin = 1, double dSideMax = INFINITO) ; bool BuildTree_test( double dLinTol = LIN_TOL_STD, double dSideMin = 1, double dSideMax = INFINITO) ;
bool GetPolygons( POLYLINEMATRIX& vvPolygons, POLYLINEMATRIX& vvPolygons3d, vector<ICRVCOMPOPOVECTOR>& vCCEdges3D, ICRVCOMPOPOVECTOR& vCCLoops) ; bool GetPolygons( POLYLINEMATRIX& vvPolygons, POLYLINEMATRIX& vvPolygons3d, std::vector<ICRVCOMPOPOVECTOR>& vCCEdges3D, ICRVCOMPOPOVECTOR& vCCLoops) ;
bool GetPolygonsBasic( POLYLINEVECTOR& vPolygons, POLYLINEVECTOR& vPolygonsCorrected, POLYLINEVECTOR& vPolygons3d) ; // restituisce il poligono corrispondente ad ogni cella foglia dell'albero bool GetPolygonsBasic( POLYLINEVECTOR& vPolygons, POLYLINEVECTOR& vPolygonsCorrected, POLYLINEVECTOR& vPolygons3d) ; // restituisce il poligono corrispondente ad ogni cella foglia dell'albero
// ad ogni poligono sono stati aggiunti tutti i vertici dei vicini posizionati sui suoi lati // ad ogni poligono sono stati aggiunti tutti i vertici dei vicini posizionati sui suoi lati
// ad alcuni poligoni potrebbero venire tolti dei punti per evitare errori dovuti ad eventuali poli sui bordi del parametrico // ad alcuni poligoni potrebbero venire tolti dei punti per evitare errori dovuti ad eventuali poli sui bordi del parametrico
bool GetLeaves ( std::vector<Cell>& vLeaves) const ; // restituisce gli indici delle foglie nell'albero bool GetLeaves ( std::vector<Cell>& vLeaves) const ; // restituisce gli indici delle foglie nell'albero
bool GetEdges3D ( vector<ICRVCOMPOPOVECTOR>& mCCEdge, POLYLINEVECTOR& vPolygons) ; // restituisce gli edge 3D come polyline bool GetEdges3D ( std::vector<ICRVCOMPOPOVECTOR>& mCCEdge, POLYLINEVECTOR& vPolygons) ; // restituisce gli edge 3D come polyline
bool GetSplitLoops( ICRVCOMPOPOVECTOR& vCCLoopSplit) const // funzione che restituisce i loop splitatti ai confini delle celle bool GetSplitLoops( ICRVCOMPOPOVECTOR& vCCLoopSplit) const // funzione che restituisce i loop splitatti ai confini delle celle
{ for ( int i = 0 ; i < int( m_vCCLoop2D.size()); ++i) vCCLoopSplit.emplace_back( m_vCCLoop2D[i]->Clone()) ; return true ; }; { for ( int i = 0 ; i < int( m_vCCLoop2D.size()); ++i) vCCLoopSplit.emplace_back( m_vCCLoop2D[i]->Clone()) ; return true ; };
void SetTestMode( void) { m_bTestMode = true ;} ; // attivando la test mode, per la costruzione dell'albero viene usata la funzione BuiltTree_test e viene corretta di conseguenza la FindCell void SetTestMode( void) { m_bTestMode = true ;} ; // attivando la test mode, per la costruzione dell'albero viene usata la funzione BuiltTree_test e viene corretta di conseguenza la FindCell
@@ -312,8 +312,8 @@ class Tree
const SurfBezier* m_pSrfBz ; // superficie di bezier const SurfBezier* m_pSrfBz ; // superficie di bezier
DBLVECTOR m_vDim ; // distanze tra i vertici della superficie di bezier in 3d in ordine antiorario a partire da ptP00 DBLVECTOR m_vDim ; // distanze tra i vertici della superficie di bezier in 3d in ordine antiorario a partire da ptP00
bool m_bTrimmed ; // superficie trimmata bool m_bTrimmed ; // superficie trimmata
unordered_map<int,int> m_mChunk ; // mappa in cui vengono salvati chunk di appartenza per ogni loop di trim std::unordered_map<int,int> m_mChunk ; // mappa in cui vengono salvati chunk di appartenza per ogni loop di trim
vector<tuple<PolyLine,bool>> m_vPlApprox ; // vettore contenente le approssimazioni dei loop // il bool indica se la curva è CCW std::vector<std::tuple<PolyLine,bool>> m_vPlApprox ; // vettore contenente le approssimazioni dei loop // il bool indica se la curva è CCW
bool m_bBilinear ; // superficie bilineare bool m_bBilinear ; // superficie bilineare
bool m_bMulti ; // superficie multi-patch bool m_bMulti ; // superficie multi-patch
bool m_bClosedU ; // superficie chiusa lungo il parametro U bool m_bClosedU ; // superficie chiusa lungo il parametro U
@@ -324,11 +324,11 @@ class Tree
int m_nDegV ; // grado della superficie nel parametro V int m_nDegV ; // grado della superficie nel parametro V
int m_nSpanU ; // numero di span lungo il parametro U int m_nSpanU ; // numero di span lungo il parametro U
int m_nSpanV ; // numero di span lungo il parametro V int m_nSpanV ; // numero di span lungo il parametro V
unordered_map<int,Cell> m_mTree ; // mappa che contiene tutti i nodi e le foglie dell'albero. -2 è puntatore Null e -1 è root std::unordered_map<int,Cell> m_mTree ; // mappa che contiene tutti i nodi e le foglie dell'albero. -2 è puntatore Null e -1 è root
mutable unordered_map<pair<int64_t, int64_t>,Point3d, PairHashInt64> m_mPt3d ; // mappa che contiene tutti i punti 3d della superficie calcolati (la chiave sono le coordinate, moltiplicate per 2^24 e trasformate in int) mutable std::unordered_map<std::pair<int64_t, int64_t>,Point3d, PairHashInt64> m_mPt3d ; // mappa che contiene tutti i punti 3d della superficie calcolati (la chiave sono le coordinate, moltiplicate per 2^24 e trasformate in int)
INTVECTOR m_vnLeaves ; // vettore delle foglie INTVECTOR m_vnLeaves ; // vettore delle foglie
INTVECTOR m_vnParents ; // vettore delle celle ottenute dalla divisione preliminare in singole patch INTVECTOR m_vnParents ; // vettore delle celle ottenute dalla divisione preliminare in singole patch
bool m_bTestMode ; // bool che indica se la test mode è attiva bool m_bTestMode ; // bool che indica se la test mode è attiva
ICRVCOMPOPOVECTOR m_vCCLoop2D ; // vettore che contiene le CurveCompo che rappresentano i loop di trim tenendo conto della divisione in celle ICRVCOMPOPOVECTOR m_vCCLoop2D ; // vettore che contiene le CurveCompo che rappresentano i loop di trim tenendo conto della divisione in celle
vector<pair<BIPNTVECTOR, ChainCurves>> m_vCEdge2D ; // vettore che le chain che rappresentano ciò che resta degli edge originali, tenendo conto dei trim. std::vector<std::pair<BIPNTVECTOR, ChainCurves>> m_vCEdge2D ; // vettore che le chain che rappresentano ciò che resta degli edge originali, tenendo conto dei trim.
} ; } ;
+54 -2
View File
@@ -16,6 +16,7 @@
#include "ObjGraphicsMgr.h" #include "ObjGraphicsMgr.h"
#include "GeoObjRW.h" #include "GeoObjRW.h"
#include "Tool.h" #include "Tool.h"
#include "SurfBezier.h"
#include "/EgtDev/Include/EGkVolZmap.h" #include "/EgtDev/Include/EGkVolZmap.h"
#include "/EgtDev/Include/EGkIntersLineVolZmap.h" #include "/EgtDev/Include/EGkIntersLineVolZmap.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h" #include "/EgtDev/Include/EGkSurfTriMesh.h"
@@ -30,6 +31,8 @@ typedef std::vector<PNTVEC3D> PNTVEC3DVECTOR ; // vettore di intersezion
// ------------------------- FORWARD ------------------------------------------------------------- // ------------------------- FORWARD -------------------------------------------------------------
class IntersParLinesSurfTm ; class IntersParLinesSurfTm ;
class BBox3d ;
class Frame3d ;
// ------------------------- STRUTTURE ----------------------------------------------------------- // ------------------------- STRUTTURE -----------------------------------------------------------
struct AppliedVector { struct AppliedVector {
@@ -38,6 +41,55 @@ struct AppliedVector {
int nPropIndex ; int nPropIndex ;
} ; } ;
struct MachInfo {
int n5AxisType ;
int nSub ;
int nStepCnt ;
double dSide ;
Vector3d vtDirTipStartEx ;
Vector3d vtDirTipEndEx ;
Vector3d vtDirTopStartEx ;
Vector3d vtDirTopEndEx ;
VCT3DVECTOR vvtTipStartAux ;
VCT3DVECTOR vvtTipEndAux ;
VCT3DVECTOR vvtTopStartAux ;
VCT3DVECTOR vvtTopEndAux ;
Vector3d vtDirTip ;
Vector3d vtDirTop ;
MachInfo( int n5AxisType_, int nSub_, int nStepCnt_, double dSide_, Vector3d vtDirTipStartEx_, Vector3d vtDirTipEndEx_, Vector3d vtDirTopStartEx_, Vector3d vtDirTopEndEx_,
VCT3DVECTOR vvtTipStartAux_, VCT3DVECTOR vvtTipEndAux_, VCT3DVECTOR vvtTopStartAux_, VCT3DVECTOR vvtTopEndAux_, Vector3d vtDirTip_, Vector3d vtDirTop_) :
n5AxisType( n5AxisType_), nSub( nSub_), nStepCnt( nStepCnt_), dSide( dSide_), vtDirTipStartEx( vtDirTipStartEx_), vtDirTipEndEx( vtDirTipEndEx_), vtDirTopStartEx( vtDirTopStartEx_), vtDirTopEndEx( vtDirTopEndEx_),
vvtTipStartAux( vvtTipStartAux_), vvtTipEndAux( vvtTipEndAux_), vvtTopStartAux( vvtTopStartAux_), vvtTopEndAux( vvtTopEndAux_), vtDirTip( vtDirTip_), vtDirTop( vtDirTop_) {}
};
struct ToolInfo {
double dHeight ;
double dMaxRad ;
double dMinRad ;
double dTan ;
double dMaxH ;
double dMinH ;
double dMaxRadApprox ;
double dMinRadApprox ;
BBox3d bbStartCyl ;
BBox3d bbEndCyl ;
Frame3d frToolStart ;
Frame3d frToolEnd ;
//Vector3d vtDirTip ;
//Vector3d vtDirTop ;
ToolInfo( double dHeight_, double dMaxRad_, double dMinRad_, double dTan_, double dMaxH_, double dMinH_, double dMaxRadApprox_, double dMinRadApprox_,
BBox3d bbStartCyl_, BBox3d bbEndCyl_, Frame3d frToolStart_, Frame3d frToolEnd_) :
dHeight ( dHeight_), dMaxRad( dMaxRad_), dMinRad( dMinRad_), dTan( dTan_), dMaxH( dMaxH_), dMinH( dMinH_), dMaxRadApprox( dMaxRadApprox_), dMinRadApprox( dMinRadApprox_),
bbStartCyl( bbStartCyl_), bbEndCyl( bbEndCyl_), frToolStart( frToolStart_), frToolEnd( frToolEnd_) {}
};
struct SurfBezForInters {
SurfBezier sBez ;
BBox3d bbSurf ;
double A1, A2, B1, B2, C1, C2 ;
Vector3d d ;
};
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
class VolZmap : public IVolZmap, public IGeoObjRW class VolZmap : public IVolZmap, public IGeoObjRW
{ {
@@ -397,9 +449,9 @@ class VolZmap : public IVolZmap, public IGeoObjRW
bool IntersLineTruncatedPyramid( const Point3d& ptLineSt, const Vector3d& vtLineDir, bool IntersLineTruncatedPyramid( const Point3d& ptLineSt, const Vector3d& vtLineDir,
const Frame3d& frTruncPyramFrame, double dSegMin, double dSegMax, double dHeight, const Frame3d& frTruncPyramFrame, double dSegMin, double dSegMax, double dHeight,
Point3d& ptInt1, Vector3d& vtN1, Point3d& ptInt2, Vector3d& vtN2) const ; Point3d& ptInt1, Vector3d& vtN1, Point3d& ptInt2, Vector3d& vtN2) const ;
bool IntersToolLine( const Point3d& ptLineStart, const Vector3d& vtLineDir, const MachInfo& mi, const ToolInfo& ti,
const std::vector<SurfBezForInters>& vSurfBez,PNTVEC3DVECTOR& vInters, INTVECTOR& vSurfInters) const ;
bool TestIntersPlaneZmapBBox( const Plane3d& plPlane) const ; bool TestIntersPlaneZmapBBox( const Plane3d& plPlane) const ;
// aggiornamento intersezioni
bool UpdateMaxMin( Point3d& ptBez, Vector3d& vtN, PNTVEC3DVECTOR& vInters) const ;
// Voxel: esistenza e passaggio da N a ijk per i voxel // Voxel: esistenza e passaggio da N a ijk per i voxel
bool IsValidVoxel( int nN) const ; bool IsValidVoxel( int nN) const ;
bool IsValidVoxel( int nI, int nJ, int nK) const ; bool IsValidVoxel( int nI, int nJ, int nK) const ;
+898 -939
View File
File diff suppressed because it is too large Load Diff