EgtGeomKernel:
- correzione errori nel taglio con piani di Surf di bezier.
This commit is contained in:
+20
-20
@@ -1621,7 +1621,7 @@ SurfBezier::GetAuxSurf( void) const
|
||||
if ( m_pSTM != nullptr)
|
||||
return m_pSTM ;
|
||||
// eseguo calcolo
|
||||
m_pSTM = GetApproxSurf( 50 * EPS_SMALL, 100 * EPS_SMALL) ;
|
||||
m_pSTM = GetApproxSurf( 1000 * EPS_SMALL, 100 * EPS_SMALL) ;
|
||||
return m_pSTM ;
|
||||
}
|
||||
|
||||
@@ -1673,7 +1673,7 @@ SurfBezier::GetApproxSurf( double dTol, double dSideMin) const
|
||||
m_bClosedU = m_bClosedU || Tree.IsClosedU() ;
|
||||
m_bClosedV = m_bClosedV || Tree.IsClosedV() ;
|
||||
//// salvo i bordi in 3d, che servono in caso si voglia trimmare la superficie DOPO aver costruito la trimesh ausiliaria
|
||||
// UpdateEdgesFromTree( Tree) ;
|
||||
// UpdateEdgesFromTree( Tree) ; // ora viene fatto nella GetPolygons
|
||||
}
|
||||
|
||||
//// per usare i polygon basic//////////////////////
|
||||
@@ -2553,10 +2553,10 @@ SurfBezier::Cut( const Plane3d& plPlane, bool bSaveOnEq)
|
||||
ICRVCOMPOPOVECTOR vpCCOpen ;
|
||||
ICRVCOMPOPOVECTOR vpCCClosed ;
|
||||
|
||||
////debug
|
||||
//static int a = 0 ;
|
||||
//a += 1 ;
|
||||
////debug
|
||||
// //debug
|
||||
// static int a = 0 ;
|
||||
// a += 1 ;
|
||||
// //debug
|
||||
|
||||
while ( chainC.GetChainFromNear( ptNear, false, vId)) {
|
||||
// creo una curva composita
|
||||
@@ -2607,17 +2607,17 @@ SurfBezier::Cut( const Plane3d& plPlane, bool bSaveOnEq)
|
||||
vpCCClosed.back()->FromPolyLine( vPLTria[i]) ;
|
||||
}
|
||||
|
||||
////debug
|
||||
//// ora posso chiamare la costruzione dello spazio parametrico trimmato
|
||||
//if ( a == 4) {
|
||||
// vector<IGeoObj*> vObj ;
|
||||
// for ( int i = 0 ; i < int(vpCCOpen.size()) ; ++i)
|
||||
// vObj.push_back( vpCCOpen[i]->Clone()) ;
|
||||
// vObj.push_back( m_pTrimReg->Clone()) ;
|
||||
// vObj.push_back( this->Clone()) ;
|
||||
// SaveGeoObj( vObj, "D:\\Temp\\bezier\\triangolazione\\doppiaSTM\\curveOPEN.nge", 2) ;
|
||||
//}
|
||||
////debug
|
||||
// //debug
|
||||
// // ora posso chiamare la costruzione dello spazio parametrico trimmato
|
||||
// if ( a == 2) {
|
||||
// vector<IGeoObj*> vObj ;
|
||||
// for ( int i = 0 ; i < int(vpCCOpen.size()) ; ++i)
|
||||
// vObj.push_back( vpCCOpen[i]->Clone()) ;
|
||||
// vObj.push_back( m_pTrimReg->Clone()) ;
|
||||
// vObj.push_back( this->Clone()) ;
|
||||
// SaveGeoObj( vObj, "D:\\Temp\\bezier\\triangolazione\\doppiaSTM\\curveOPEN.nge", 2) ;
|
||||
// }
|
||||
// //debug
|
||||
|
||||
PtrOwner<ISurfFlatRegion> pSFR( CreateTrimRegionFromCuts( vpCCOpen, vpCCClosed)) ;
|
||||
if ( IsNull( pSFR) || ! pSFR->IsValid())
|
||||
@@ -2748,6 +2748,8 @@ SurfBezier::UnprojectPointFromStm( int nT, const Point3d& ptI, Point3d& ptSP, in
|
||||
if ( ! m_mCCEdge[c][i]->GetOnlyPoint(pt))
|
||||
return false ;
|
||||
vInters[c] = AreSamePointApprox( pt, ptI) ? 1 : 0 ;
|
||||
if ( vInters[c] == 1)
|
||||
bIsPole = true ;
|
||||
nInters += vInters[c] ;
|
||||
}
|
||||
else {
|
||||
@@ -2759,9 +2761,7 @@ SurfBezier::UnprojectPointFromStm( int nT, const Point3d& ptI, Point3d& ptSP, in
|
||||
|
||||
// se ho tre intersezioni vuol dire che un lato è collassato in un punto e il punto di cui voglio la controimmagine è esattamente nel polo
|
||||
// oppure sono su un lato di chiusura
|
||||
if ( nInters == 3 || ( m_bClosedU && ( vInters[1] == 1 || vInters[3] == 1)) || ( m_bClosedV && ( vInters[0] == 1 || vInters[2] == 1))) {
|
||||
if ( nInters == 3)
|
||||
bIsPole = true ;
|
||||
if ( bIsPole || ( m_bClosedU && ( vInters[1] == 1 || vInters[3] == 1)) || ( m_bClosedV && ( vInters[0] == 1 || vInters[2] == 1))) {
|
||||
// visto che sono in un polo o su un lato di chiusura devo verificare di aver ricevuto il triangolo giusto
|
||||
// se è stato passato il punto successivo o precedente mi sposto verso quello e ricalcolo il triangolo di appartenenza
|
||||
if ( ! ptIPrevOrNext.IsValid())
|
||||
|
||||
Reference in New Issue
Block a user