EgtExecutor :
- aggiornamento funzioni per restituire loop di una surf bezier.
This commit is contained in:
+11
-10
@@ -2514,29 +2514,30 @@ ExeCreateSurfBzByRevolve( int nParentId, int nCrvId,
|
||||
bbox3dSurf.Add( ptCtrl) ;
|
||||
}
|
||||
// recupero i loop
|
||||
ICRVCOMPOPOVECTOR vCCLoop ;
|
||||
pSbz->GetLoops( vCCLoop, true) ;
|
||||
ICRVCOMPOPOVECTOR vCCLoop(2) ;
|
||||
vCCLoop[0].Set(pSbz->GetSingleEdge3D( true, 1)) ;
|
||||
vCCLoop[1].Set(pSbz->GetSingleEdge3D( true, 3)) ;
|
||||
// controllo se i loop trovati sono validi
|
||||
bool bValidLoop1 = false ;
|
||||
bool bValidLoop3 = false ;
|
||||
if( ! IsNull(vCCLoop[1]) && vCCLoop[1]->IsValid())
|
||||
if( ! IsNull(vCCLoop[0]) && vCCLoop[0]->IsValid())
|
||||
bValidLoop1 = true ;
|
||||
if( ! IsNull(vCCLoop[3]) && vCCLoop[3]->IsValid())
|
||||
if( ! IsNull(vCCLoop[1]) && vCCLoop[1]->IsValid())
|
||||
bValidLoop3 = true ;
|
||||
|
||||
if( ! IsNull(vCCLoop[1]) && ! vCCLoop[1]->IsValid() && ! bStartOnAx)
|
||||
if( ! IsNull(vCCLoop[0]) && ! vCCLoop[0]->IsValid() && ! bStartOnAx)
|
||||
return GDB_ID_NULL ;
|
||||
if( ! IsNull(vCCLoop[3]) && ! vCCLoop[3]->IsValid() && ! bEndOnAx)
|
||||
if( ! IsNull(vCCLoop[1]) && ! vCCLoop[1]->IsValid() && ! bEndOnAx)
|
||||
return GDB_ID_NULL ;
|
||||
// il getLoops per superfici non trimmate restituisce 1 elemento per ogni lato dello spazio parametrico.
|
||||
// in questo caso la superficie è chiusa lungo il parametro V, quindi i lati 0 e 2 saranno null.
|
||||
double dAngTolDeg = 5 ;
|
||||
PolyLine plEdge1 ;
|
||||
if( bValidLoop1)
|
||||
vCCLoop[1]->ApproxWithLines( dLinTol, dAngTolDeg, ICurve::APL_STD, plEdge1) ;
|
||||
vCCLoop[0]->ApproxWithLines( dLinTol, dAngTolDeg, ICurve::APL_STD, plEdge1) ;
|
||||
PolyLine plEdge3 ;
|
||||
if( bValidLoop3)
|
||||
vCCLoop[3]->ApproxWithLines( dLinTol, dAngTolDeg, ICurve::APL_STD, plEdge3) ;
|
||||
vCCLoop[1]->ApproxWithLines( dLinTol, dAngTolDeg, ICurve::APL_STD, plEdge3) ;
|
||||
|
||||
// devo distinguere tra il loop superiore e quello inferiore
|
||||
Point3d ptCen ;
|
||||
@@ -2546,7 +2547,7 @@ ExeCreateSurfBzByRevolve( int nParentId, int nCrvId,
|
||||
bOk = bOk && plEdge1.IsClosedAndFlat( plPlane, dArea, 50 * EPS_SMALL) ;
|
||||
vtN = plPlane.GetVersN() ;
|
||||
// vedo come questa normale è orientata rispetto alla bbox della superficie
|
||||
vCCLoop[1]->GetCentroid( ptCen) ;
|
||||
vCCLoop[0]->GetCentroid( ptCen) ;
|
||||
ptCen += vtN ;
|
||||
if ( bbox3dSurf.Encloses( ptCen))
|
||||
plEdge1.Invert() ;
|
||||
@@ -2555,7 +2556,7 @@ ExeCreateSurfBzByRevolve( int nParentId, int nCrvId,
|
||||
bOk = bOk && plEdge3.IsClosedAndFlat( plPlane, dArea, 50 * EPS_SMALL) ;
|
||||
vtN = plPlane.GetVersN() ;
|
||||
// vedo come questa normale è orientata rispetto alla bbox della superficie
|
||||
vCCLoop[3]->GetCentroid( ptCen) ;
|
||||
vCCLoop[1]->GetCentroid( ptCen) ;
|
||||
ptCen += vtN ;
|
||||
if ( bbox3dSurf.Encloses( ptCen))
|
||||
plEdge3.Invert() ;
|
||||
|
||||
Reference in New Issue
Block a user