EgtGeomKernel :

- correzione alle rigate Bezier nella modalità MinDist.
This commit is contained in:
Daniele Bariletti
2024-07-09 15:47:47 +02:00
parent bc3c1e377e
commit c7035305e2
+15 -15
View File
@@ -3884,7 +3884,7 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
int nSecondRowInd = nDegU * nSpanU + 1 ;
// se sto usando la ISOPARM o la MINDIST semplice allora collego più span di una curva allo stesso punto
// ( aggiungo virtualmente delle span alla curva che localmente ne ha di meno, semplicemente riprendo più volte lo stesso punto)
// ( aggiungo delle span alla curva che localmente ne ha di meno, semplicemente riprendo più volte lo stesso punto)
if ( nRuledType != RLT_B_MINDIST_PLUS){
if ( nRuledType == RLT_B_MINDIST) {
// creo le liste di punti per le isoparametriche in U
@@ -3929,7 +3929,6 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
}
++ nCount0 ;
// ripeto l'ultimo punto aggiunto alla riga 2
//int nInd = nIndMatch == nSpanU1 ? nIndMatch - 1 : nIndMatch ;
int nInd = nIndMatch - 1 ;
const ICurveBezier* pSubCrv0 = GetCurveBezier( pCrvU1->GetCurve( nInd)) ;
for ( int j = nCount1 == 0 ? 0 : 1 ; j < nLastPoint ; ++j) {
@@ -3945,10 +3944,12 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
// qui devo capire se aggiungere la nuova sottocurva prima o dopo la ripetizione dei punti
// se il match del punto della U1 è uguale al punto a cui ero arrivato sulla U0 allora prima aggiungo la ripetizione di punti
// se invece il match è più avanti allora aggiuno prima la curva e poi la ripetzione di punti
bool bSubCurveAddedFirst = false ;
if ( vPnt1Match[vPnt0Match[i+1].second].second != i+1 ) {
bSubCurveAddedFirst = true ;
// aggiungo una sottocurva dalla prima curva
bool bSubCurveAddedFirst = true ;
for ( int z = vPnt0Match[i].second ; z <= vPnt0Match[i+1].second ; ++z)
bSubCurveAddedFirst = bSubCurveAddedFirst && vPnt1Match[z].second != i ;
if( bSubCurveAddedFirst) {
// aggiungo una sottocurva dalla curva U0
pSubCrv0 = GetCurveBezier( pCrvU0->GetCurve( i)) ;
for ( int j = nCount0 == 0 ? 0 : 1 ; j < nLastPoint ; ++j) {
if ( ! bRat0)
@@ -3959,11 +3960,11 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
++ nCount0 ;
}
// ripeto l'ultimo punto aggiunto per il numero di curve balzate della seconda curva - 1
// ripeto l'ultimo punto aggiunto per il numero di curve balzate - 1 della curva U1
for( int k = 0 ; k < nIndMatchNext - nIndMatch - 1 ; ++k) {
pSubCrv0 = GetCurveBezier( pCrvU0->GetCurve( i != 0 ? i - 1 : i)) ;
for ( int j = nCount0 == 0 ? 0 : 1 ; j < nLastPoint ; ++j) {
int nPoint = nCount0 == 0 && ! bSubCurveAddedFirst ? 0 : nDegU ;
int nPoint = i == 0 && ! bSubCurveAddedFirst ? 0 : nDegU ;
if ( ! bRat0)
SetControlPoint( nCount0 * nDegU + j, pSubCrv0->GetControlPoint( nPoint)) ;
else
@@ -3971,9 +3972,8 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
}
++ nCount0 ;
}
// se non l'ho già aggiunta prima aggiungo una sottocurva della prima curva
// se non l'ho già aggiunta prima aggiungo una sottocurva della U0
if( ! bSubCurveAddedFirst) {
// aggiungo una sottocurva dalla prima curva
pSubCrv0 = GetCurveBezier( pCrvU0->GetCurve( i)) ;
for ( int j = nCount0 == 0 ? 0 : 1 ; j < nLastPoint ; ++j) {
if ( ! bRat0)
@@ -3985,7 +3985,7 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
}
// aggiungo tutte le sottocurve che ho balzato della seconda
// aggiungo tutte le sottocurve che ho balzato della curva U1
for( int k = 0 ; k < nIndMatchNext - nIndMatch ; ++k) {
pSubCrv0 = GetCurveBezier( pCrvU1->GetCurve( nIndMatch + k)) ;
for ( int j = nCount1 == 0 ? 0 : 1 ; j < nLastPoint ; ++j ) {
@@ -3999,12 +3999,12 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
}
}
//controllo se ho aggiunto tutti i punti della seconda curva
//controllo se ho aggiunto tutti i punti della curva U1
if ( vPnt0Match.back().second != nSpanU1) {
// riaggiungo l'ultimo punto
// riaggiungo l'ultimo punto della U0
const ICurveBezier* pSubCrv0 = GetCurveBezier( pCrvU0->GetCurve( nSpanU0 - 1)) ;
int nPoint = nDegU ;
while( nCount0 - 1 < nSpanU1) {
while( nCount0 < nSpanU) {
for ( int j = 1 ; j < nLastPoint ; ++j) {
if ( ! bRat0)
SetControlPoint( nCount0 * nDegU + j, pSubCrv0->GetControlPoint( nPoint)) ;
@@ -4014,7 +4014,7 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int
++ nCount0 ;
}
// aggiungo le restanti sottocurve della curva 2
// aggiungo le restanti sottocurve della curva U1
int nCrv1 = vPnt0Match.back().second ;
while( nCrv1 < nSpanU1) {
const ICurveBezier* pSubCrv1 = GetCurveBezier( pCrvU1->GetCurve( nCrv1)) ;