EgtGeomKernel :

- in trimming migliorata la gestione delle curve di sincronizzazione mediante interpolazione.
This commit is contained in:
Riccardo Elitropi
2026-02-23 15:47:14 +01:00
parent 69916e7756
commit 390cc3bd8b
+49 -6
View File
@@ -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() ;