EgtGeomKernel :
- in trimming migliorata la gestione delle curve di sincronizzazione mediante interpolazione.
This commit is contained in:
+49
-6
@@ -3920,8 +3920,50 @@ GetTrimmingSyncInterpolation( const ICurve* pCrvEdge1, const ICurve* pCrvEdge2,
|
||||
return false ;
|
||||
|
||||
// Recupero i due tratti di curva
|
||||
PtrOwner<CurveComposite> pCompoGuide1( ConvertCurveToBasicComposite( pCrvEdge1->CopyParamRange( dUA, dUC))) ;
|
||||
PtrOwner<CurveComposite> pCompoGuide2( ConvertCurveToBasicComposite( pCrvEdge2->CopyParamRange( dUB, dUD))) ;
|
||||
PtrOwner<CurveComposite> pCompoGuide1( nullptr) ;
|
||||
PtrOwner<CurveComposite> pCompoGuide2( nullptr) ;
|
||||
// se entrambe chiuse
|
||||
if ( pCrvEdge1->IsClosed() && pCrvEdge2->IsClosed()) {
|
||||
// Recupero la porzione di curva di Edge1 di lunghezza minima tra il parametro A e C
|
||||
PtrOwner<CurveComposite> pCompoAC( ConvertCurveToBasicComposite( pCrvEdge1->CopyParamRange( dUA, dUC))) ;
|
||||
PtrOwner<CurveComposite> pCompoCA( ConvertCurveToBasicComposite( pCrvEdge1->CopyParamRange( dUC, dUA))) ;
|
||||
if ( IsNull( pCompoAC) || IsNull( pCompoCA) || ! pCompoAC->IsValid() || ! pCompoCA->IsValid())
|
||||
return false ;
|
||||
double dLenAC ; pCompoAC->GetLength( dLenAC) ;
|
||||
double dLenCA ; pCompoCA->GetLength( dLenCA) ;
|
||||
if ( dLenAC < dLenCA)
|
||||
pCompoGuide1.Set( Release( pCompoAC)) ;
|
||||
else
|
||||
pCompoGuide1.Set( Release( pCompoCA)) ;
|
||||
// Recupero la porzione di curva di Edge2 di lunghezza minima tra il parametro B e D
|
||||
PtrOwner<CurveComposite> pCompoBD( ConvertCurveToBasicComposite( pCrvEdge2->CopyParamRange( dUB, dUD))) ;
|
||||
PtrOwner<CurveComposite> pCompoDB( ConvertCurveToBasicComposite( pCrvEdge2->CopyParamRange( dUD, dUB))) ;
|
||||
if ( IsNull( pCompoBD) || IsNull( pCompoBD) || ! pCompoBD->IsValid() || ! pCompoDB->IsValid())
|
||||
return false ;
|
||||
double dLenBD ; pCompoBD->GetLength( dLenBD) ;
|
||||
double dLenDB ; pCompoDB->GetLength( dLenDB) ;
|
||||
if ( dLenBD < dLenDB)
|
||||
pCompoGuide2.Set( Release( pCompoBD)) ;
|
||||
else
|
||||
pCompoGuide2.Set( Release( pCompoDB)) ;
|
||||
}
|
||||
// se entrambe aperte
|
||||
else if ( ! pCrvEdge1->IsClosed() && ! pCrvEdge2->IsClosed()) {
|
||||
pCompoGuide1.Set( ConvertCurveToBasicComposite( pCrvEdge1->Clone())) ;
|
||||
if ( IsNull( pCompoGuide1) || ! pCompoGuide1->IsValid())
|
||||
return false ;
|
||||
if ( dUA < dUC)
|
||||
pCompoGuide1->TrimStartEndAtParam( dUA, dUC) ;
|
||||
else
|
||||
pCompoGuide1->TrimStartEndAtParam( dUC, dUA) ;
|
||||
pCompoGuide2.Set( ConvertCurveToBasicComposite( pCrvEdge2->Clone())) ;
|
||||
if ( IsNull( pCompoGuide2) || ! pCompoGuide2->IsValid())
|
||||
return false ;
|
||||
if ( dUB < dUD)
|
||||
pCompoGuide2->TrimStartEndAtParam( dUB, dUD) ;
|
||||
else
|
||||
pCompoGuide2->TrimStartEndAtParam( dUD, dUB) ;
|
||||
}
|
||||
if ( IsNull( pCompoGuide1) || IsNull( pCompoGuide2) ||
|
||||
! pCompoGuide1->IsValid() || ! pCompoGuide2->IsValid())
|
||||
return false ;
|
||||
@@ -3935,10 +3977,11 @@ GetTrimmingSyncInterpolation( const ICurve* pCrvEdge1, const ICurve* pCrvEdge2,
|
||||
swap( pCompoGuide1, pCompoGuide2) ;
|
||||
swap( dLen1, dLen2) ;
|
||||
}
|
||||
if ( pCompoGuide2->IsPointOn( ptS1))
|
||||
swap( ptS1, ptE1) ;
|
||||
if ( pCompoGuide2->IsPointOn( ptS2))
|
||||
swap( ptS2, ptE2) ;
|
||||
// Aggiorno gli estremi delle curve
|
||||
pCompoGuide1->GetStartPoint( ptS1) ;
|
||||
pCompoGuide2->GetStartPoint( ptE1) ;
|
||||
pCompoGuide1->GetEndPoint( ptS2) ;
|
||||
pCompoGuide2->GetEndPoint( ptE2) ;
|
||||
|
||||
#if DEBUG_SYNC_INTERPOLATION
|
||||
VT.clear() ; VC.clear() ;
|
||||
|
||||
Reference in New Issue
Block a user