EgtGeomKernel :
- aggiornamento funzioni per recuperare i loop di una surf di bezier.
This commit is contained in:
+18
-25
@@ -3333,7 +3333,7 @@ SurfBezier::CalcPoles( void) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfBezier::GetLoops( ICRVCOMPOPOVECTOR& vCC, bool bLineOrBezier, int nEdge) const
|
||||
SurfBezier::GetLoops( ICRVCOMPOPOVECTOR& vCC, bool bLineOrBezier) const
|
||||
{
|
||||
// se necessario calcolo i poli
|
||||
if ( m_vbPole.empty())
|
||||
@@ -3347,30 +3347,23 @@ SurfBezier::GetLoops( ICRVCOMPOPOVECTOR& vCC, bool bLineOrBezier, int nEdge) con
|
||||
// se la superficie non è trimmata mi basta recuperare gli edge della superficie
|
||||
if ( ! m_bTrimmed) {
|
||||
// se decidessi di non restituire gli edge chiusi e i poli posso discriminare qui
|
||||
if ( nEdge == -1 ) {
|
||||
vCC = ICRVCOMPOPOVECTOR(4) ;
|
||||
if ( ! m_bClosedV ) {
|
||||
if ( ! m_vbPole[0])
|
||||
vCC[0].Set( GetSingleEdge3D( bLineOrBezier, 0)) ;
|
||||
if ( ! m_vbPole[2])
|
||||
vCC[2].Set( GetSingleEdge3D( bLineOrBezier, 2)) ;
|
||||
}
|
||||
if ( ! m_bClosedU ) {
|
||||
if ( ! m_vbPole[1])
|
||||
vCC[1].Set( GetSingleEdge3D( bLineOrBezier, 1)) ;
|
||||
if ( ! m_vbPole[3])
|
||||
vCC[3].Set( GetSingleEdge3D( bLineOrBezier, 3)) ;
|
||||
}
|
||||
//// se li volessi restituire tutti
|
||||
//vCC.emplace_back( GetSingleEdge3D( bLineOrBezier, 0)) ;
|
||||
//vCC.emplace_back( GetSingleEdge3D( bLineOrBezier, 1)) ;
|
||||
//vCC.emplace_back( GetSingleEdge3D( bLineOrBezier, 2)) ;
|
||||
//vCC.emplace_back( GetSingleEdge3D( bLineOrBezier, 3)) ;
|
||||
}
|
||||
else {
|
||||
if ( (((nEdge == 0 || nEdge == 2) && ! m_bClosedV) || ((nEdge == 1 || nEdge == 3) && ! m_bClosedU)) && ! m_vbPole[nEdge])
|
||||
vCC.emplace_back( GetSingleEdge3D( bLineOrBezier, nEdge)) ;
|
||||
}
|
||||
vCC.emplace_back() ;
|
||||
if ( ! m_bClosedV ) {
|
||||
if ( ! m_vbPole[0])
|
||||
vCC.back()->AddCurve( GetSingleEdge3D( bLineOrBezier, 0)) ;
|
||||
}
|
||||
if ( ! m_bClosedU ) {
|
||||
if ( ! m_vbPole[1])
|
||||
vCC.back()->AddCurve( GetSingleEdge3D( bLineOrBezier, 1)) ;
|
||||
}
|
||||
if ( ! m_bClosedV ) {
|
||||
if ( ! m_vbPole[2])
|
||||
vCC.back()->AddCurve( GetSingleEdge3D( bLineOrBezier, 2)) ;
|
||||
}
|
||||
if ( ! m_bClosedU ) {
|
||||
if ( ! m_vbPole[3])
|
||||
vCC.back()->AddCurve( GetSingleEdge3D( bLineOrBezier, 3)) ;
|
||||
}
|
||||
}
|
||||
// se la superficie è trimmata devo recuperare i loop dello spazio parametrico
|
||||
else {
|
||||
|
||||
+4
-4
@@ -136,8 +136,10 @@ class SurfBezier : public ISurfBezier, public IGeoObjRW
|
||||
bool IncreaseUV( double& dU, double dx, bool bUOrV, double* dUVCopy = nullptr, bool bModifyOrig = true) const override ;
|
||||
bool IncreaseUV( Point3d& ptUV, Vector3d vtH , Point3d* ptUVCopy, bool bModifyOrig) const override ;
|
||||
// funzione che restituisce gli edge della superficie o in forma di linea spezzata o in forma di curva di Bezier
|
||||
// se la superficie è trimmata restituisce i loop dello spazio parametrico in forma di linee spezzate
|
||||
bool GetLoops( ICRVCOMPOPOVECTOR& vCC, bool bLineOrBezier, int nEdge = -1) const override ; // se la superficie non è trimmata restituisce un vettore di 4 elementi. Se la superficie è chiusa lungo un parametro i lati algi estremi di quel parametro saranno null.
|
||||
// restituisce un vettore con i loop della superficie ( più di uno solo se è trimmata con un parametrico con buchi o più di un chunk)
|
||||
bool GetLoops( ICRVCOMPOPOVECTOR& vCC, bool bLineOrBezier) const override ;
|
||||
// restituisce il singolo edge della superficie non trimmata
|
||||
ICurveComposite* GetSingleEdge3D( bool bLineOrBezier, int nEdge) const override ;
|
||||
bool IsPlanar( void) const override ;
|
||||
bool CreateByFlatContour( const PolyLine& PL) override ;
|
||||
bool CreateByRegion( const POLYLINEVECTOR& vPL) override ;
|
||||
@@ -200,8 +202,6 @@ class SurfBezier : public ISurfBezier, public IGeoObjRW
|
||||
// funzione che proietta nello spazio parametrico un trim derivante da un taglio con un piano, categorizzandolo come aperto o chiuso ( nel parametrico)
|
||||
bool AddCurveCompoToCuts( ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vpCCOpen, ICRVCOMPOPOVECTOR& vpCCClosed, double dToler = EPS_SMALL, const Plane3d* pPlCut = nullptr) const ;
|
||||
ISurfFlatRegion* CreateTrimRegionFromCuts( ICRVCOMPOPOVECTOR& vpCCOpen, ICRVCOMPOPOVECTOR& vpCCClosed) const ;
|
||||
// restituisce il singolo edge della superficie non trimmata
|
||||
ICurveComposite* GetSingleEdge3D( bool bLineOrBezier, int nEdge) const ;
|
||||
// funzione che calcola se gli edge sono collassati in poli
|
||||
bool CalcPoles( void) const ;
|
||||
bool FindMatchByParam( const PolyLine& pl0, const PolyLine& pl1, INTVECTOR& vMatch, int& nLong) const ;
|
||||
|
||||
Reference in New Issue
Block a user