EgtGeomKernel :

- aggiornamento funzioni per recuperare i loop di una surf di bezier.
This commit is contained in:
Daniele Bariletti
2025-10-14 16:30:45 +02:00
parent 942f15b49d
commit 5c287d49bb
2 changed files with 22 additions and 29 deletions
+18 -25
View File
@@ -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 {