EgtExecutor :
- in Trimming piccola miglioria nella scelta delle curve di sincronizzazione da visualizzare.
This commit is contained in:
+28
-13
@@ -704,6 +704,9 @@ ExeTrimmingGetSurfBzSyncPoints( int nParentId, int nEdge1Id, int nEdge2Id, doubl
|
||||
bOk = bOk && ( pCrvEdge1 != nullptr && pCrvEdge1->IsValid() &&
|
||||
pCrvEdge2 != nullptr && pCrvEdge2->IsValid()) ;
|
||||
|
||||
// Verifico che le curve siano entrambe Aperte o entrambe Chiuse
|
||||
bOk = bOk && ( pCrvEdge1->IsClosed() == pCrvEdge2->IsClosed()) ;
|
||||
|
||||
// Recupero i punti di sincronizzazione
|
||||
BIPNTVECTOR vSyncPoints ;
|
||||
bOk = bOk && GetTrimmingSurfBzSyncPoints( pCrvEdge1, pCrvEdge2, dMyLinTol, vSyncPoints) &&
|
||||
@@ -761,20 +764,32 @@ ExeTrimmingGetSurfBzSyncPoints( int nParentId, int nEdge1Id, int nEdge2Id, doubl
|
||||
}
|
||||
// Se devo mostrare alcune Linee -> Algoritmo di Pick_Bresenham
|
||||
if ( bOk && nLineNbr > 0) {
|
||||
if ( nLineNbr == 1)
|
||||
setInds.insert( 0) ;
|
||||
else {
|
||||
int nDx = nToTSyncLines - 1 ;
|
||||
int nDy = nLineNbr - 1 ;
|
||||
int nErr = 0 ;
|
||||
int nX = 0 ;
|
||||
for ( int i = 0 ; i <= nDy ; ++ i) {
|
||||
setInds.insert( nX) ;
|
||||
nErr += nDx ;
|
||||
while ( nErr >= nDy) {
|
||||
nX += 1 ;
|
||||
nErr -= nDy ;
|
||||
bool bBothOpen = ( ! pCrvEdge1->IsClosed() && ! pCrvEdge2->IsClosed()) ;
|
||||
bool bBothClosed = ( ! bBothOpen) ;
|
||||
int nLastIdx = nToTSyncLines - 1 ;
|
||||
if ( bBothClosed) {
|
||||
int nLine = nLineNbr ;
|
||||
if ( nLine == 1)
|
||||
setInds.insert( 0) ;
|
||||
else {
|
||||
int nMaxIndex = nToTSyncLines - 2 ;
|
||||
for ( int i = 0 ; i < nLine ; ++ i) {
|
||||
double dT = double( i) / double( nLine) ;
|
||||
int nIdx = int( 0.5 + dT * nMaxIndex) ;
|
||||
setInds.insert( nIdx) ;
|
||||
}
|
||||
setInds.erase( nLastIdx) ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
int nInternal = nLineNbr ;
|
||||
setInds.insert( 0) ;
|
||||
setInds.insert( nLastIdx) ;
|
||||
int nMaxIndex = nLastIdx ;
|
||||
for ( int i = 0; i < nInternal ; ++ i) {
|
||||
double dT = double( i + 1) / double( nInternal + 1) ;
|
||||
int nIdx = int( 0.5 + dT * nMaxIndex) ;
|
||||
setInds.insert( nIdx) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user