EgtGeomKernel :
- altre migliorie a GeneralizedCut di SurfTriMesh.
This commit is contained in:
+21
-4
@@ -503,10 +503,26 @@ SurfTriMesh::GeneralizedCut( const ICurve& cvCurve, bool bSaveOnEq)
|
||||
// Determino se il centro del triangolo cade all'interno della curva
|
||||
bool bTriaCenIn = false ;
|
||||
{
|
||||
DistPointCurve dstPC( trTria.GetCentroid(), cvCompo) ;
|
||||
int nSide ;
|
||||
if ( dstPC.GetSideAtMinDistPoint( 0, vtExtr, nSide))
|
||||
bTriaCenIn = ( nSide == MDS_LEFT) ;
|
||||
// centro proiettato sul piano della curva
|
||||
Point3d ptCen = trTria.GetCentroid() ;
|
||||
ptCen = ptCen - ( ptCen - ptStart) * vtExtr * vtExtr ;
|
||||
// calcolo distanza
|
||||
DistPointCurve dstPC( ptCen, cvCompo) ;
|
||||
double dDist ; dstPC.GetDist( dDist) ;
|
||||
// se maggiore oltre il limite originale
|
||||
if ( dDist > CUT_SCALE * EPS_SMALL) {
|
||||
int nSide ;
|
||||
if ( dstPC.GetSideAtMinDistPoint( 0, vtExtr, nSide))
|
||||
bTriaCenIn = ( nSide == MDS_LEFT) ;
|
||||
}
|
||||
// altrimenti ricalcolo con centro del triangolo spostato all'interno sulla normale
|
||||
else {
|
||||
Point3d ptCen2 = trTria.GetCentroid() - CUT_SCALE * EPS_SMALL * trTria.GetN() ;
|
||||
DistPointCurve dstP2C( ptCen2, cvCompo) ;
|
||||
int nSide2 ;
|
||||
if ( dstP2C.GetSideAtMinDistPoint( 0, vtExtr, nSide2))
|
||||
bTriaCenIn = ( nSide2 == MDS_LEFT && bSaveOnEq) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Vettore di catene di punti
|
||||
@@ -577,6 +593,7 @@ SurfTriMesh::GeneralizedCut( const ICurve& cvCurve, bool bSaveOnEq)
|
||||
else
|
||||
++ itI ;
|
||||
}
|
||||
nChainCnt = int( vChain.size()) ;
|
||||
|
||||
// unisco eventuali catene estreme che sono parte di una stessa catena
|
||||
if ( nChainCnt > 1) {
|
||||
|
||||
Reference in New Issue
Block a user