EgtGeomKernel :
- piccola correzione in GetOCCrvsWithProps.
This commit is contained in:
@@ -344,52 +344,51 @@ GetOCCrvsWithProps( const ISurfTriMesh& StmOrig, int nFaceInd, ICRVCOMPOPOVECTOR
|
||||
Vector3d vtN ;
|
||||
if ( ! StmOrig.GetFacetNormal( nFaceInd, vtN))
|
||||
return false ;
|
||||
// creo la curva a partire dei loop
|
||||
// creo la curva a partire dai loop
|
||||
for ( int i = 0 ; i < int( vPL.size()) ; i++) {
|
||||
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
|
||||
pCrvCompo->FromPolyLine( vPL[i]) ;
|
||||
if ( ! pCrvCompo->IsValid())
|
||||
if ( IsNull( pCrvCompo) || ! pCrvCompo->FromPolyLine( vPL[i]) || ! pCrvCompo->IsValid())
|
||||
return false ;
|
||||
// imposto a 0 tutti i lati della pCrvCompo
|
||||
for ( int u = 0 ; u < pCrvCompo->GetCurveCount() ; ++ u)
|
||||
pCrvCompo->SetCurveTempProp( u, 0, 0) ;
|
||||
// determino eventuali lati aperti e aggiorno proprietà del contorno
|
||||
int nInd = 0 ;
|
||||
double dPar ;
|
||||
bool bFound = vPL[i].GetFirstU( dPar, true) ;
|
||||
while ( bFound) {
|
||||
// recupero il flag
|
||||
int nFlag = int( dPar) ;
|
||||
// se non c'è nulla di adiacente, lato aperto
|
||||
if ( nFlag == SVT_NULL) {
|
||||
// determino eventuali lati aperti e aggiorno proprietà del contorno
|
||||
int nInd = 0 ;
|
||||
double dPar ;
|
||||
bool bFound = vPL[i].GetFirstU( dPar, true) ;
|
||||
while ( bFound) {
|
||||
// recupero il flag
|
||||
int nFlag = int( dPar) ;
|
||||
// se non c'è nulla di adiacente, lato aperto
|
||||
if ( nFlag == SVT_NULL) {
|
||||
pCrvCompo->SetCurveTempProp( nInd, 1, 0) ; // --> lato aperto
|
||||
pCrvCompo->SetCurveTempProp( nInd, -1, 1) ; // --> nessuna faccia adiacente
|
||||
}
|
||||
// altrimenti verifico se la faccia adiacente forma diedro convesso o concavo
|
||||
else {
|
||||
bool bAdjac ;
|
||||
Point3d ptP1, ptP2 ;
|
||||
double dAng ;
|
||||
if ( ! StmOrig.GetFacetsContact( nFaceInd, nFlag, bAdjac, ptP1, ptP2, dAng))
|
||||
dAng = - ANG_RIGHT ;
|
||||
if ( dAng > - EPS_ANG_SMALL) {
|
||||
pCrvCompo->SetCurveTempProp( nInd, 1, 0) ; // --> lato aperto
|
||||
pCrvCompo->SetCurveTempProp( nInd, -1, 1) ; // --> nessuna faccia adiacente
|
||||
}
|
||||
// altrimenti verifico se la faccia adiacente forma diedro convesso o concavo
|
||||
else {
|
||||
bool bAdjac ;
|
||||
Point3d ptP1, ptP2 ;
|
||||
double dAng ;
|
||||
if ( ! StmOrig.GetFacetsContact( nFaceInd, nFlag, bAdjac, ptP1, ptP2, dAng))
|
||||
dAng = - ANG_RIGHT ;
|
||||
if ( dAng > - EPS_ANG_SMALL) {
|
||||
pCrvCompo->SetCurveTempProp( nInd, 1, 0) ; // --> lato aperto
|
||||
pCrvCompo->SetCurveTempProp( nInd, -1, 1) ; // --> nessuna faccia adiacente
|
||||
}
|
||||
else
|
||||
// salvo come prop 1 la faccia adiacente
|
||||
pCrvCompo->SetCurveTempProp( nInd, nFlag, 1) ; // --> il lato chiuso è 0 per default
|
||||
}
|
||||
// passo al successivo
|
||||
++nInd ;
|
||||
bFound = vPL[i].GetNextU( dPar, true) ;
|
||||
else
|
||||
// salvo come prop 1 la faccia adiacente
|
||||
pCrvCompo->SetCurveTempProp( nInd, nFlag, 1) ; // --> il lato chiuso è 0 per default
|
||||
}
|
||||
// assegno l'estrusione dalla normale alla faccia
|
||||
pCrvCompo->SetExtrusion( vtN) ;
|
||||
// unisco le eventuali parti allineate ( mantenendo le proprietà)
|
||||
pCrvCompo->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, true, true) ;
|
||||
// aggiorno la superficie con il loop
|
||||
vCrvsWithTmpProps.emplace_back( Release( pCrvCompo)) ;
|
||||
// passo al successivo
|
||||
++nInd ;
|
||||
bFound = vPL[i].GetNextU( dPar, true) ;
|
||||
}
|
||||
// assegno l'estrusione dalla normale alla faccia
|
||||
pCrvCompo->SetExtrusion( vtN) ;
|
||||
// unisco le eventuali parti allineate ( mantenendo le proprietà)
|
||||
pCrvCompo->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, true, true) ;
|
||||
// aggiorno la superficie con il loop
|
||||
vCrvsWithTmpProps.emplace_back( Release( pCrvCompo)) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user