diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 2bed869..c90a3d5 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/IntersSurfTmSurfTm.cpp b/IntersSurfTmSurfTm.cpp index 4a07e49..1a95d00 100644 --- a/IntersSurfTmSurfTm.cpp +++ b/IntersSurfTmSurfTm.cpp @@ -116,7 +116,7 @@ IntersSurfTmSurfTm( const ISurfTriMesh& Stm1, const ISurfTriMesh& Stm2, } } // se altrimenti sovrapposizione - else if ( nRes == ITTT_OVERLAPS) { + else if ( nRes == ITTT_OVERLAPS || nRes == ITTT_COUNTER_OVERLAPS) { for ( const auto& Tria : vIttTria) { // verifico se triangolo già inserito bool bFound = false ; diff --git a/IntersTriaTria.cpp b/IntersTriaTria.cpp index 177ebf3..9da4969 100644 --- a/IntersTriaTria.cpp +++ b/IntersTriaTria.cpp @@ -84,6 +84,7 @@ IntersTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2, Point3d& p if ( nResPP == IPPT_OVERLAPS || ((( nVertPos1 == 0 && nVertNeg1 == 0) || ( nVertPos2 == 0 && nVertNeg2 == 0)) && ( trTria1.GetN() ^ trTria2.GetN()).SqLen() < 25 * SIN_EPS_ANG_SMALL * SIN_EPS_ANG_SMALL)) { + // verifica per triangoli con normali controverse bool bCounter = false ; Triangle3d trMyTria2 = trTria2 ; if ( trTria1.GetN() * trTria2.GetN() < 0) { @@ -93,6 +94,7 @@ IntersTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2, Point3d& p trMyTria2.Validate() ; bCounter = true ; } + // verifica per triangoli coincidenti bool bAreSameTria = ( ( AreSamePointExact( trTria1.GetP( 0), trMyTria2.GetP( 0)) && AreSamePointExact( trTria1.GetP( 1), trMyTria2.GetP( 1)) && AreSamePointExact( trTria1.GetP( 2), trMyTria2.GetP( 2))) || @@ -139,7 +141,7 @@ IntersTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2, Point3d& p int IntersCoplanarTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2, TRIA3DVECTOR& vTria) { - // Se i tre vertici del secondo triangolo stanno tutti a destra di almeno un lato del primo, non c'è intersezione + // Se i tre vertici del secondo triangolo stanno tutti a destra di almeno un lato del primo, non c'� intersezione for ( int i = 0 ; i < 3 ; ++ i) { Vector3d vtSide = trTria1.GetP( ( i + 1) % 3) - trTria1.GetP( i) ; Vector3d vtSN = vtSide ^ trTria1.GetN() ; @@ -149,7 +151,7 @@ IntersCoplanarTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2, TR ( trTria2.GetP( 2) - trTria1.GetP( i)) * vtSN > - EPS_TRIA_H) return ITTT_NO ; } - // Se i tre vertici del primo triangolo stanno tutti a destra di almeno un lato del secondo, non c'è intersezione + // Se i tre vertici del primo triangolo stanno tutti a destra di almeno un lato del secondo, non c'� intersezione for ( int i = 0 ; i < 3 ; ++ i) { Vector3d vtSide = trTria2.GetP( ( i + 1) % 3) - trTria2.GetP( i) ; Vector3d vtSN = vtSide ^ trTria2.GetN() ; @@ -232,7 +234,7 @@ int FindTriaTriaIntersType( const Triangle3d& trTria1, const Triangle3d& trTria2, const Point3d& ptLineSt, const Vector3d& vtLineDir, double dStU1, double dEnU1, double dStU2, double dEnU2, int nRes1, int nRes2, double& dIntStU, double& dIntEnU) { - // Controllo su validità input + // Controllo su validit� input if ( ! ( trTria1.IsValid() && trTria2.IsValid() && vtLineDir.IsNormalized())) return ITTT_NO ; // Casi diff --git a/SurfTriMesh.cpp b/SurfTriMesh.cpp index 0970cbd..4fa8bab 100644 --- a/SurfTriMesh.cpp +++ b/SurfTriMesh.cpp @@ -239,7 +239,7 @@ SurfTriMesh::RemoveTriangle( int nId) // indice vertice int nV = m_vTria[nId].nIdVert[i] ; // se vertice non c'è passo al prossimo - if ( nV < 0 || nV >= int( m_vTria.size())) + if ( nV < 0 || nV >= int( m_vVert.size())) continue ; if ( m_vVert[nV].nIdTria == nId) { int nAdjP = m_vTria[nId].nIdAdjac[i] ; diff --git a/SurfTriMeshBooleans.cpp b/SurfTriMeshBooleans.cpp index ac5cc01..c227e9d 100644 --- a/SurfTriMeshBooleans.cpp +++ b/SurfTriMeshBooleans.cpp @@ -181,7 +181,7 @@ SurfTriMesh::DecomposeLoop( CHAINVECTOR& cvOpenChain, INTVECTOR& vnDegVec, PNTMA // elimino i punti superflui prima for ( int i = 0 ; i < nCvFirst ; ++ i) cvBoundClosedLoopVec[nLoop].erase( cvBoundClosedLoopVec[nLoop].begin()) ; - // verifico se questo punto è dalla parte valida o no + // verifico se questo punto � dalla parte valida o no bool bC12 = ( ( ptM12 - ptProva) * vtVecProva < 0) ; vbInOut[nLoop] = bC12 ; } @@ -192,7 +192,7 @@ SurfTriMesh::DecomposeLoop( CHAINVECTOR& cvOpenChain, INTVECTOR& vnDegVec, PNTMA // elimino i punti superflui intermedi for ( int i = nCvFirst + 2 ; i < nCvSecond ; ++ i) cvBoundClosedLoopVec[nLoop].erase( cvBoundClosedLoopVec[nLoop].begin() + nCvFirst + 2) ; - // verifico se questo punto è dalla parte valida o no + // verifico se questo punto � dalla parte valida o no bool bC21 = ( ( ptM21 - ptProva) * vtVecProva < 0) ; vbInOut[nLoop] = bC21 ; } @@ -251,7 +251,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT if ( int( it->second.size()) == 0) continue ; - // Se il triangolo è stato sottoposto a ritriangolazione, le sue componenti sono classificabili come dentro-fuori. + // Se il triangolo � stato sottoposto a ritriangolazione, le sue componenti sono classificabili come dentro-fuori. // Lo tolgo dall'insieme dei triangoli ambigui (intersezione edge-edge) else { auto itS = Ambiguos.find( it->first) ; @@ -499,7 +499,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT // Creo il loop chiuso padre di tutti, il perimetro del triangolo. // Questo viene diviso in sotto-loop chiusi mediante quelli aperti. // I loop chiusi trovati precedentemente sono interni a uno dei sotto-loop - // chiusi di cui è formato il perimetro. + // chiusi di cui � formato il perimetro. PNTVECTOR cvFirstLoop ; cvFirstLoop.emplace_back( trTria.GetP( 0)) ; cvFirstLoop.emplace_back( trTria.GetP( 1)) ; @@ -579,7 +579,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT // Assegno ai loop trovati i rispettivi interni // Assumo che i loop interni a uno dei loop creati fino ad'ora siano tutti sullo stesso livello. // Il caso generale si risolve con una struttura ad albero in cui il nodi corrispondente a un - // loop è figlio del nodo corrispondente al loop che lo contiene. + // loop � figlio del nodo corrispondente al loop che lo contiene. INTVECTOR vInnerLoop ; for ( int nCLI = 0 ; nCLI < int( cvClosedChain.size()) ; ++ nCLI) { for ( int nPtNum = 0 ; nPtNum < int( cvClosedChain[nCLI].size()) ; ++ nPtNum) { @@ -1004,7 +1004,7 @@ SurfTriMesh::AmbiguosTriangleManager( TRIA3DVECTORMAP& Ambiguos, SurfTriMesh& Su { for ( auto it = Ambiguos.begin() ; it != Ambiguos.end() ; ++ it) { // Se il triangolo ha l'indice diverso da zero vuol dire che oltre a un - // contatto edge-edge ha avuto dei contatti che lo hanno già classificato. + // contatto edge-edge ha avuto dei contatti che lo hanno gi� classificato. if ( Surf.m_vTria[it->first].nTempPart != 0) continue ; // Recupero il triangolo corrente @@ -1080,7 +1080,7 @@ SurfTriMesh::AmbiguosTriangleManager( TRIA3DVECTORMAP& Ambiguos, SurfTriMesh& Su if ( j < 3) break ; } - // Se la classificazione è coerente segno gli edge di contatto come invalicabili + // Se la classificazione � coerente segno gli edge di contatto come invalicabili Surf.m_vTria[it->first].nETempFlag[0] = int( vAdjSegToCurTria[0].size()) > 0 ? 1 : 0 ; Surf.m_vTria[it->first].nETempFlag[1] = int( vAdjSegToCurTria[1].size()) > 0 ? 1 : 0 ; Surf.m_vTria[it->first].nETempFlag[2] = int( vAdjSegToCurTria[2].size()) > 0 ? 1 : 0 ; @@ -1106,7 +1106,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) // Ciclo sui triangoli delle mesh int nTriaNumA = GetTriangleSize() ; int nTriaNumB = SurfB.GetTriangleSize() ; - // Setto il triangolo come né fuori né dentro + // Setto il triangolo come n� fuori n� dentro for ( int nTA = 0 ; nTA < nTriaNumA ; ++ nTA) { m_vTria[nTA].nTempPart = 0 ; m_vTria[nTA].nETempFlag[0] = 0 ; @@ -1122,7 +1122,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) // Resetto e ricalcolo la HashGrid della superficie B SurfB.ResetHashGrids3d() ; for ( int nTA = 0 ; nTA < nTriaNumA ; ++ nTA) { - // Se il triangolo A non è valido, continuo + // Se il triangolo A non � valido, continuo Triangle3d trTriaA ; if ( ! GetTriangle( nTA, trTriaA) || ! trTriaA.Validate( true)) continue ; @@ -1133,7 +1133,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) INTVECTOR vNearTria ; SurfB.GetAllTriaOverlapBox( b3dTriaA, vNearTria) ; for ( int nTB = 0 ; nTB < int( vNearTria.size()) ; ++ nTB) { - // Se il triangolo B non è valido, continuo + // Se il triangolo B non � valido, continuo Triangle3d trTriaB ; if ( ! SurfB.GetTriangle( vNearTria[nTB], trTriaB) || ! trTriaB.Validate( true)) continue ; @@ -1209,7 +1209,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) } } if ( nSegMaxDist >= 0) { - // Cerco qual'è il segmento di contatto per dichiararlo come invalicabile + // Cerco qual'� il segmento di contatto per dichiararlo come invalicabile int nVA ; for ( nVA = 0 ; nVA < 3 ; ++ nVA) { if ( abs( ( trTriaA.GetP( nVA) - trTriaB.GetP( 0)) * trTriaB.GetN()) < EPS_SMALL && @@ -1233,7 +1233,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) } } if ( nSegMaxDist >= 0) { - // Cerco qual'è il segmento di contatto per dichiararlo come invalicabile + // Cerco qual'� il segmento di contatto per dichiararlo come invalicabile int nVB ; for ( nVB = 0 ; nVB < 3 ; ++ nVB) { if ( abs( ( trTriaB.GetP( nVB) - trTriaA.GetP(0)) * trTriaA.GetN()) < EPS_SMALL && @@ -1246,8 +1246,8 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) } } // Intersezione edge-edge: salvo indice e vettore triangoli - // Uso i triangoli perché, se un triangolo fosse cancellato, non potrei accedervi poi usando l'indice. - // Salvando i triangoli risolvo il problema perché ai fini dello studio di questi contatti, triangolo + // Uso i triangoli perch�, se un triangolo fosse cancellato, non potrei accedervi poi usando l'indice. + // Salvando i triangoli risolvo il problema perch� ai fini dello studio di questi contatti, triangolo // e sua ritriangolazione portano al medesimo risultato. else if ( bIntOnEndgeA && bIntOnEndgeB) { auto itA = AmbiguosA.find( nTA) ; @@ -1277,7 +1277,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) RetriangulationForBooleanOperation( LineMapA, AmbiguosA, *this, bModif) ; RetriangulationForBooleanOperation( LineMapB, AmbiguosB, SurfB, bModif) ; - // Se i triangoli delle superfici non si intersecano, una delle due è totalmente interna o esterna all'altra. + // Se i triangoli delle superfici non si intersecano, una delle due � totalmente interna o esterna all'altra. bool bRetriangulated = true ; if ( ! bModif && ( int( AmbiguosA.size()) == 0 || int( AmbiguosB.size()) == 0)) { bRetriangulated = false ; @@ -1289,7 +1289,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) int nTriaNum = - 1 ; double dMinDist = DBL_MAX ; for ( int nTB = 0 ; nTB < nTriaNumB ; ++ nTB) { - // Se il triangolo B non è valido, continuo + // Se il triangolo B non � valido, continuo Triangle3d trTriaB ; if ( ! SurfB.GetTriangle( nTB, trTriaB) || ! trTriaB.Validate( true)) continue ; @@ -1322,7 +1322,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) int nTriaNum = - 1 ; double dMinDist = DBL_MAX ; for ( int nTA = 0 ; nTA < nTriaNumA ; ++ nTA) { - // Se il triangolo A non è valido, continuo + // Se il triangolo A non � valido, continuo Triangle3d trTriaA ; if ( ! ( GetTriangle( nTA, trTriaA) && trTriaA.Validate( true))) continue ; @@ -1354,7 +1354,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) } } - // Se c'è stata una ritriangolazione di almeno un triangolo, NON siamo nel caso di tutto dentro o tutto fuori. + // Se c'� stata una ritriangolazione di almeno un triangolo, NON siamo nel caso di tutto dentro o tutto fuori. // Studio i triangoli ambigui. if ( bRetriangulated) { AmbiguosTriangleManager( AmbiguosA, *this) ; @@ -1371,7 +1371,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) // Resetto e ricalcolo la HashGrid della superficie B SurfB.ResetHashGrids3d() ; for ( int nTA = 0 ; nTA < nTriaNum2A ; ++ nTA) { - // Se il triangolo A non è valido, continuo + // Se il triangolo A non � valido, continuo Triangle3d trTriaA ; if ( ! GetTriangle( nTA, trTriaA) || ! trTriaA.Validate( true)) continue ; @@ -1382,7 +1382,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) INTVECTOR vNearTria ; SurfB.GetAllTriaOverlapBox( b3dTriaA, vNearTria) ; for ( int nTB = 0 ; nTB < int( vNearTria.size()) ; ++ nTB) { - // Se il triangolo B non è valido, continuo + // Se il triangolo B non � valido, continuo Triangle3d trTriaB ; if ( ! SurfB.GetTriangle( vNearTria[nTB], trTriaB) || ! trTriaB.Validate( true)) continue ; @@ -1395,8 +1395,8 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other) SurfB.m_vTria[vNearTria[nTB]].nTempPart = 2 ; } else if ( nIntTypeAB == ITTT_COUNTER_OVERLAPS) { - m_vTria[nTA].nTempPart = - 2 ; - SurfB.m_vTria[vNearTria[nTB]].nTempPart = - 2 ; + m_vTria[nTA].nTempPart = -2 ; + SurfB.m_vTria[vNearTria[nTB]].nTempPart = -2 ; } } } @@ -1411,7 +1411,7 @@ bool SurfTriMesh::IdentifyParts( void) const { for ( int i = 0 ; i < int( m_vTria.size()) ; ++ i) { - // salto triangoli cancellati o già assegnati + // salto triangoli cancellati o gi� assegnati if ( m_vTria[i].nIdVert[0] == SVT_DEL || abs( m_vTria[i].nTempPart) != 1) continue ; @@ -1451,7 +1451,7 @@ SurfTriMesh::RemoveTJunctions(void) for ( int nT = 0 ; nT < int( m_vTria.size()) ; ++ nT) { // Riga di matrice per il triangolo INTVECTOR& vIndexRow = vvIndexMatrix[nT] ; - // Se il triangolo non è valido, passo al successivo + // Se il triangolo non � valido, passo al successivo Triangle3d trTria ; if ( ! GetTriangle( nT, trTria) || ! trTria.Validate( true)) continue ; @@ -1464,7 +1464,7 @@ SurfTriMesh::RemoveTJunctions(void) for ( int nSeg = 0 ; nSeg < 3 ; ++ nSeg) { // aggiungo alla riga della matrice il vertice iniziale del lato vIndexRow.emplace_back( m_vTria[nT].nIdVert[nSeg]) ; - // Se in questo lato il triangolo è adiacente a un altro, lo salto. + // Se in questo lato il triangolo � adiacente a un altro, lo salto. if ( m_vTria[nT].nIdAdjac[nSeg] != SVT_DEL && m_vTria[nT].nIdAdjac[nSeg] != SVT_NULL) continue ; int nPrevSize = int( vIndexRow.size()) ; @@ -1478,7 +1478,7 @@ SurfTriMesh::RemoveTJunctions(void) vtSeg /= dSegLen ; // Ciclo sui triangoli vicini for ( int nI = 0 ; nI < int( vNearTria.size()) ; ++ nI) { - // Salto il triangolo se è quello di riferimento + // Salto il triangolo se � quello di riferimento if ( vNearTria[nI] == nT) continue ; // Cerco i vertici che stanno sul lato del triangolo @@ -1518,7 +1518,7 @@ SurfTriMesh::RemoveTJunctions(void) ++ itN ; itI = vvIndexMatrix[nT].erase( itN, itJ) ; } - // Se il triangolo non è valido, passo al successivo + // Se il triangolo non � valido, passo al successivo Triangle3d trTria ; if ( ! GetTriangle( nT, trTria) || ! trTria.Validate( true)) continue ; @@ -1621,7 +1621,7 @@ SurfTriMesh::ScanForTripleTriangles( bool& bModified) bool bCirc ; INTVECTOR vTriaIndex ; int nTriaNum = GetAllTriaAroundVertex( nV, vTriaIndex, bCirc) ; - // Se il vertice è condiviso da tre triangoli tutti adiacenti fra loro a due a due + // Se il vertice � condiviso da tre triangoli tutti adiacenti fra loro a due a due if ( nTriaNum == 3 && bCirc) { // Valuto parallelismo fra le normali int nParallel = 0 ; @@ -1634,7 +1634,7 @@ SurfTriMesh::ScanForTripleTriangles( bool& bModified) } // Se sono tutte parallele fra loro unisco i tre triangoli in uno if ( nParallel == 3) { - // Cerco gli altri triangoli adiacenti a quelli che sostituirò con il triangolo grande. + // Cerco gli altri triangoli adiacenti a quelli che sostituir� con il triangolo grande. // Cerco anche quali lati dei tre triangoli che saranno eliminati sono adiacenti a quelli esterni INTVECTOR vVertAndAdjTria ; for ( int nTria = 0 ; nTria < 3 ; ++ nTria) { @@ -1646,7 +1646,7 @@ SurfTriMesh::ScanForTripleTriangles( bool& bModified) } } } - // Cerco fra questi altri triangoli esterni sono adiacenti ai triangoli che eliminerò + // Cerco fra questi altri triangoli esterni sono adiacenti ai triangoli che eliminer� int nAdjTriaContactEdge[3] ; for ( int nAdjTria = 1 ; nAdjTria < 6 ; nAdjTria += 2) { for ( int nAdjEdge = 0 ; nAdjEdge < 3 ; ++ nAdjEdge) { @@ -1709,19 +1709,19 @@ SurfTriMesh::FlipTriangles( int nTA, int nTB) if ( m_vTria[nTB].nIdAdjac[nEdgeB] == nTA) break ; } - // Se uno è adiacente all'altro ma non viceversa, c'è un errore + // Se uno � adiacente all'altro ma non viceversa, c'� un errore if ( ( nEdgeA == 3 && nEdgeB < 3) || ( nEdgeA < 3 && nEdgeB == 3)) return false ; // Se non sono adiacenti, ho finito else if ( nEdgeA == 3 && nEdgeB == 3) return true ; - // Se non trovo i vertici del triangolo A, c'è un errorre + // Se non trovo i vertici del triangolo A, c'� un errorre Point3d ptSegSt, ptSegEn, ptVertA ; if ( ! GetVertex( m_vTria[nTA].nIdVert[nEdgeA], ptSegSt) || ! GetVertex( m_vTria[nTA].nIdVert[( nEdgeA + 1) % 3], ptSegEn) || ! GetVertex( m_vTria[nTA].nIdVert[( nEdgeA + 2) % 3], ptVertA)) return false ; - // Se non trovo i vertici del triangolo B, c'è un errorre + // Se non trovo i vertici del triangolo B, c'� un errorre Point3d ptVertB ; if ( ! GetVertex( m_vTria[nTB].nIdVert[( nEdgeB + 2) % 3], ptVertB)) return false ; @@ -2004,7 +2004,7 @@ SurfTriMesh::IntersFacetPlane( const SurfFlatRegion& Region, const Plane3d& plCu // Intersezione tra i piani delle due facce Point3d ptL ; Vector3d vtL ; int nResPP = IntersPlanePlane( plFacetPlane, plCutPlane, ptL, vtL) ; - // Sono considerate non complanari, se c'è la retta d'intersezione è errore + // Sono considerate non complanari, se c'� la retta d'intersezione � errore if ( nResPP == IPPT_NO || nResPP == IPPT_OVERLAPS) return FPI_ERROR ; @@ -2026,7 +2026,7 @@ SurfTriMesh::IntersFacetPlane( const SurfFlatRegion& Region, const Plane3d& plCu // Classifico la linea di intersezione con la faccia CRVCVECTOR IntersectionResults ; bool bClassificationOk = Region.GetCurveClassification( cvPlaneIntersLine, 0.1 * EPS_SMALL, IntersectionResults) ; - // Se non trovo le intersezioni, c'è un errore. + // Se non trovo le intersezioni, c'� un errore. if ( ! bClassificationOk) return FPI_ERROR ; @@ -2043,7 +2043,7 @@ SurfTriMesh::IntersFacetPlane( const SurfFlatRegion& Region, const Plane3d& plCu if ( ! IntersLinePart.empty()) return FPI_CUT ; - // La linea si è ridotta ad un punto, la regione è tutta dentro o tutta fuori + // La linea si � ridotta ad un punto, la regione � tutta dentro o tutta fuori Point3d ptCen ; if ( ! Region.GetChunkCentroid( 0, ptCen)) return FPI_ERROR ; @@ -2288,7 +2288,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet vNewPieces.back().nPiecePart = 1 ; GetFacetLoops( it->first, vNewPieces.back().vPieceLoop) ; // Divido la faccia in parti. - // Ciclo sulle catene finché non esauriscono. + // Ciclo sulle catene finch� non esauriscono. int nIterNumber = 0 ; int nPrevLastChainNum = int( cvOpenChain.size()) ; while ( int( cvOpenChain.size()) > 0) { @@ -2414,7 +2414,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet NewLoopCCW = NewLoop2; NewLoopCW = NewLoop1; } - // Creo il pezzo nuovo, il cui loop esterno è stato appena definito. + // Creo il pezzo nuovo, il cui loop esterno � stato appena definito. FacetPiece DetachedPiece; DetachedPiece.vPieceLoop.emplace_back(NewLoopCCW); DetachedPiece.nPiecePart = bFirstLoopIsCounter ? 1 : -1; @@ -2592,7 +2592,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet NewLoopCCW = NewLoop2 ; NewLoopCW = NewLoop1 ; } - // // Creo il pezzo nuovo, il cui loop esterno è stato appena definito. + // // Creo il pezzo nuovo, il cui loop esterno � stato appena definito. // FacetPiece PieceInn ; // PieceInn.vPieceLoop.emplace_back( NewLoop1) ; // PieceInn.nPiecePart = 1 ; @@ -2619,7 +2619,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet // vNewPieces[nPart].vPieceLoop.emplace_back( NewLoop2) ; // vNewPieces[nPart].nPiecePart = - 1 ; // vNewPieces.emplace_back( PieceInn) ; - // Creo il pezzo nuovo, il cui loop esterno è stato appena definito. + // Creo il pezzo nuovo, il cui loop esterno � stato appena definito. FacetPiece DetachedPiece ; DetachedPiece.vPieceLoop.emplace_back( NewLoopCCW) ; DetachedPiece.nPiecePart = bFirstLoopIsCounter ? 1 : - 1 ; @@ -2831,7 +2831,7 @@ SurfTriMesh::EdgeInteriorContactManager( const SurfTriMesh& OthSurf, GetAllTriaInFacet( nFacet, vFacetTria) ; // Versore normale alla faccia. Vector3d vtN = m_vTria[m_vFacet[nFacet]].vtN ; - // Se la faccia è stata tagliata, salto alla prossima faccia. + // Se la faccia � stata tagliata, salto alla prossima faccia. if ( InterInterLineMap.find( nFacet) != InterInterLineMap.end()) continue ; int nInOutPart = 0 ; @@ -2928,7 +2928,7 @@ SurfTriMesh::EdgeEdgeContactManager( const SurfTriMesh& OthSurf, GetAllTriaInFacet( nFacet, vFacetTria) ; // Versore normale alla faccia. Vector3d vtN = m_vTria[m_vFacet[nFacet]].vtN ; - // Se la faccia è stata tagliata, salto alla prossima faccia. + // Se la faccia � stata tagliata, salto alla prossima faccia. if ( InterInterLineMap.find( nFacet) != InterInterLineMap.end()) continue ; int nInOutPart = 0 ; @@ -2989,7 +2989,7 @@ SurfTriMesh::EdgeEdgeContactManager( const SurfTriMesh& OthSurf, if ( nOthFacet2 != int( Edge.vOthFacetIndex.size())) break ; } - // Se l'indice interno/esterno non è stato assegnato + // Se l'indice interno/esterno non � stato assegnato if ( nInOutPart == 0) { // Se non ho trovato una coppia di facce, uso la prima. if ( ( nOthFacet1 == int( Edge.vOthFacetIndex.size()) - 1 && nOthFacet2 == int( Edge.vOthFacetIndex.size())) || nOthFacet2 == - 1) { @@ -3104,8 +3104,8 @@ SurfTriMesh::RetriangulateFacetPieces( const PieceMap& NewFacet, int nNewId[3] = { AddVertex( vPt[nNewTriaVertId[0]]), AddVertex( vPt[nNewTriaVertId[1]]), AddVertex( vPt[nNewTriaVertId[2]])} ; - // Il colore passato nel secondo parametro è definito perché il vettore delle facce ha ancora salvato l'indice di un suo triangolo e - // il triangolo è cancellato semplicente assegnadno la costante apposita VT_DEL (-2) a nIdVert[0]; ma il suo colore resta definito. + // Il colore passato nel secondo parametro � definito perch� il vettore delle facce ha ancora salvato l'indice di un suo triangolo e + // il triangolo � cancellato semplicente assegnadno la costante apposita VT_DEL (-2) a nIdVert[0]; ma il suo colore resta definito. int nNewTriaNum = AddTriangle( nNewId, m_vTria[m_vFacet[it->first]].nTFlag) ; if ( IsValidSvt( nNewTriaNum)) { // Assegno l'indice della parte interno/esterno. @@ -3203,7 +3203,7 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) INTERSCHAINMAP IntersLineMapA, IntersLineMapB ; INTERSEDGEMAP EdgeInnLineMapA, EdgeInnLineMapB ; INTERSEDGEMAP EdgeEdgeLineMapA, EdgeEdgeLineMapB ; - // Setto il triangolo come né fuori né dentro + // Setto il triangolo come n� fuori n� dentro int nTriaNumA = GetTriangleSize(); int nTriaNumB = SurfB.GetTriangleSize(); for ( int nTA = 0 ; nTA < nTriaNumA ; ++ nTA) { @@ -3402,7 +3402,7 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) EdgeEdgeContactManager( SurfB, IntersLineMapA, EdgeEdgeLineMapA) ; SurfB.EdgeEdgeContactManager( *this, IntersLineMapB, EdgeEdgeLineMapB) ; - // Se non ci sono stati tagli, valuto se una è tutta interna all'altra. + // Se non ci sono stati tagli, valuto se una � tutta interna all'altra. if ( int( NewFacetA.size() + NewFacetB.size()) == 0) { int nVertNum = 0 ; Point3d ptVert ; @@ -3435,7 +3435,7 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) ++ nVertNum ; } } - // Se la superficie A non è interna valuto la posizione della superficie B. + // Se la superficie A non � interna valuto la posizione della superficie B. int nInOutNumB = nInOutNumA == 1 ? - 1 : 0 ; if ( nInOutNumB == 0) { nVertNum = 0 ; @@ -3469,8 +3469,8 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) } } } - // Se la posizione della superficie A rispetto alla B non è definita e - // B è esterna ad A, allora assumiamo che siano reciprocamente esterne. + // Se la posizione della superficie A rispetto alla B non � definita e + // B � esterna ad A, allora assumiamo che siano reciprocamente esterne. if ( nInOutNumA == 0 && nInOutNumB == - 1) nInOutNumA = - 1 ; // Assegno gli indici interni/esterni. @@ -3698,7 +3698,7 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) // Resetto e ricalcolo la HashGrid della superficie B SurfB.ResetHashGrids3d() ; for ( int nTA = 0 ; nTA < nTriaNum2A ; ++ nTA) { - // Se il triangolo A non è valido, continuo + // Se il triangolo A non � valido, continuo Triangle3d trTriaA ; if ( ! GetTriangle( nTA, trTriaA) || ! trTriaA.Validate( true)) continue ; @@ -3709,7 +3709,7 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) INTVECTOR vNearTria ; SurfB.GetAllTriaOverlapBox( b3dTriaA, vNearTria) ; for ( int nTB = 0 ; nTB < int( vNearTria.size()) ; ++ nTB) { - // Se il triangolo B non è valido, continuo + // Se il triangolo B non � valido, continuo Triangle3d trTriaB ; if ( ! SurfB.GetTriangle( vNearTria[nTB], trTriaB) || ! trTriaB.Validate( true)) continue ; @@ -3724,12 +3724,15 @@ SurfTriMesh::IntersectTriMeshFacets( SurfTriMesh& Other) bSuccesfullInters = IsPointInsideTriangle( ptIntTriaCentroid, trTriaA, TriangleType::EXACT) && IsPointInsideTriangle( ptIntTriaCentroid, trTriaB, TriangleType::EXACT) ; } - // Se l'intersezeione è corretta e i triangoli sono sovrapposti aggiorno gli indici. + // Se l'intersezeione � corretta e i triangoli sono sovrapposti aggiorno gli indici. +<<<<<<< HEAD /*if ( nIntTypeAB == ITTT_OVERLAPS && bSuccesfullInters) { bool bInvertB = trTriaA.GetN() * trTriaB.GetN() < 0. ; m_vTria[nTA].nTempPart = ( bInvertB ? -2 : 2) ; SurfB.m_vTria[vNearTria[nTB]].nTempPart = ( bInvertB ? - 2 : 2) ; }*/ +======= +>>>>>>> ca83aaa249ef66937ccc16640c11d72bd2f04c55 if ( nIntTypeAB == ITTT_OVERLAPS && bSuccesfullInters) { m_vTria[nTA].nTempPart = 2 ; SurfB.m_vTria[vNearTria[nTB]].nTempPart = 2 ; diff --git a/SurfTriMeshCuts.cpp b/SurfTriMeshCuts.cpp index 4d29524..124ce0e 100644 --- a/SurfTriMeshCuts.cpp +++ b/SurfTriMeshCuts.cpp @@ -57,7 +57,7 @@ SurfTriMesh::Cut( const Plane3d& plPlane, bool bSaveOnEq) // se superficie originale a facce, cerco di semplificarle in ogni caso if ( nFacetOriCnt < 200 || double( nTriaOriCnt) / nFacetOriCnt > 4) { - if ( ! SimplifyFacets( 500.0)) + if ( ! SimplifyFacets( 5000.0)) LOG_ERROR( GetEGkLogger(), "Error in SimplifyFacets of Stm::Cut") } @@ -866,7 +866,7 @@ SurfTriMesh::GeneralizedCut( const ICurve& cvCurve, bool bSaveOnEq) // se superficie originale a facce, cerco di semplificarle in ogni caso if ( nFacetOriCnt < 200 || double( nTriaOriCnt) / nFacetOriCnt > 4) { - if ( ! SimplifyFacets( 500.0)) + if ( ! SimplifyFacets( 5000.0)) LOG_ERROR( GetEGkLogger(), "Error in SimplifyFacets of Stm::GeneralizedCut") }