EgtGeomKernel :

- correzioni alla RuledByIsoParamSet.
This commit is contained in:
Daniele Bariletti
2026-04-10 10:25:04 +02:00
parent 951d3781d6
commit 2d94dddccb
+22 -16
View File
@@ -6520,12 +6520,12 @@ SurfBezier::CreateByIsoParamSet( const ICurve* pCurve0, const ICurve* pCurve1, c
bool bSplitToAdd = true ;
int c0 = 0, c1 = 0 ;
while ( bSplitToAdd) {
if ( c0 > ssize( vdParamPos0) - 1 && c1 > ssize( vdParamPos1) - 1) {
if ( c0 > ssize( vdParamPos0) - 1 || c1 > ssize( vdParamPos1) - 1) {
LOG_DBG_ERR( GetEGkLogger(), "Surf Bez Ruled Guided: error while reparametrizing some section") ;
return false ;
}
// se ho una corrispondenza tra punti ( e non sono alla fine del tratto) allora non aggiungo split
if ( abs( vdParamPos0[c0] - vdParamPos1[c1]) < EPS_SMALL && vdParamPos0[c0] < 1) {
if ( abs( vdParamPos0[c0] - vdParamPos1[c1]) < EPS_PARAM && vdParamPos0[c0] < 1) {
++c0 ;
++c1 ;
++nLastParam0 ;
@@ -6535,14 +6535,17 @@ SurfBezier::CreateByIsoParamSet( const ICurve* pCurve0, const ICurve* pCurve1, c
// se non ho corrispondenza allora aggiungo uno split sulla curva a cui manca il punto corrispondente
else if ( vdParamPos0[c0] < vdParamPos1[c1]) {
double dPar ; CrvU1.GetParamAtLength( dLenPrev1 + dLen1 * vdParamPos0[c0], dPar) ;
if ( abs( dPar - round( dPar)) > EPS_SMALL) {
vdSplit1.push_back( dPar) ;
nSplit1 = vdSplit1.size() ;
}
else if ( dPar = round( dPar) ; dPar > nLastParam1){
++ c1 ;
++ nLastParam1 ;
if ( dPar > dLastParam1 + EPS_PARAM) {
if ( abs( dPar - round( dPar)) > EPS_PARAM) {
vdSplit1.push_back( dPar) ;
nSplit1 = vdSplit1.size() ;
}
else if ( dPar = round( dPar) ; dPar > nLastParam1){
++ c1 ;
++ nLastParam1 ;
}
}
dLastParam1 = dPar ;
++nLastParam0 ;
vPairs.emplace_back( nLastParam0 + nSplit0, nLastParam1 + nSplit1) ;
++c0 ;
@@ -6550,14 +6553,17 @@ SurfBezier::CreateByIsoParamSet( const ICurve* pCurve0, const ICurve* pCurve1, c
else if ( vdParamPos0[c0] > vdParamPos1[c1]) {
double dPar ; CrvU0.GetParamAtLength( dLenPrev0 + dLen0 * vdParamPos1[c1], dPar) ;
// se lo split non è in prossimità di una joint già esistente allora lo aggiungo
if ( abs( dPar - round( dPar)) > EPS_SMALL) {
vdSplit0.push_back( dPar) ;
nSplit0 = vdSplit0.size() ;
}
else if ( dPar = round( dPar) ; dPar > nLastParam0){
++ c0 ;
++ nLastParam0 ;
if ( dPar > dLastParam0 + EPS_PARAM) {
if ( abs( dPar - round( dPar)) > EPS_PARAM) {
vdSplit0.push_back( dPar) ;
nSplit0 = vdSplit0.size() ;
}
else if ( dPar = round( dPar) ; dPar > nLastParam0){
++ c0 ;
++ nLastParam0 ;
}
}
dLastParam0 = dPar ;
++nLastParam1 ;
vPairs.emplace_back( nLastParam0 + nSplit0, nLastParam1 + nSplit1) ;
++c1 ;