Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a4b66af304 | |||
| 0a5d655bfc | |||
| 6393817f41 | |||
| f871bfedc9 | |||
| e38b065357 | |||
| 704a977475 | |||
| 51fb1f4993 | |||
| dbb751a441 | |||
| 6a4b4feff5 | |||
| 6f1f3441ea | |||
| b955b12f38 |
+41
-9
@@ -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
@@ -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) ;
|
||||||
|
|||||||
@@ -2383,3 +2383,11 @@ CurveBezier::IsALine( void) const
|
|||||||
}
|
}
|
||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
PNTVECTOR
|
||||||
|
CurveBezier::GetAllControlPoints( void) const
|
||||||
|
{
|
||||||
|
PNTVECTOR vPntCtrl = m_vPtCtrl ;
|
||||||
|
return vPntCtrl ;
|
||||||
|
}
|
||||||
@@ -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 ;
|
||||||
|
|||||||
@@ -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
@@ -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 ;
|
||||||
|
|||||||
@@ -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.
|
||||||
} ;
|
} ;
|
||||||
@@ -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
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user