EgtGeomKernel :
- migliorie nella intersezione tra triangoli - correzione a IntersSurfTmSurfTm che non interpretava correttamente i nuovi risultati di IntersTriaTria - correzioni a Zmap per Mortising con movimento nel piano ma non perpendicolare all'asse dell'utensile.
This commit is contained in:
+12
-11
@@ -51,9 +51,9 @@ IntersRectangleTriangle( const Point3d& ptP, const Vector3d& vtL1, const Vector3
|
||||
Point3d ptIntA1, ptIntA2 ;
|
||||
TRIA3DVECTOR vTriaA ;
|
||||
int nIntTypeA = IntersTriaTria( trTria, trTriaA, ptIntA1, ptIntA2, vTriaA) ;
|
||||
if ( nFromSpecialToNormal[nIntTypeA] == ITTT_PNT || nFromSpecialToNormal[nIntTypeA] == ITTT_VERT)
|
||||
if ( FromSpecialToNormal( nIntTypeA) == ITTT_PNT || FromSpecialToNormal( nIntTypeA) == ITTT_VERT)
|
||||
nIntA = 1 ;
|
||||
else if ( nFromSpecialToNormal[nIntTypeA] == ITTT_YES || nFromSpecialToNormal[nIntTypeA] == ITTT_EDGE) {
|
||||
else if ( FromSpecialToNormal( nIntTypeA) == ITTT_YES || FromSpecialToNormal( nIntTypeA) == ITTT_EDGE) {
|
||||
nIntA = 2 ;
|
||||
}
|
||||
// Interseco il triangolo con il secondo dei due triangoli del rettangolo
|
||||
@@ -61,9 +61,9 @@ IntersRectangleTriangle( const Point3d& ptP, const Vector3d& vtL1, const Vector3
|
||||
Point3d ptIntB1, ptIntB2 ;
|
||||
TRIA3DVECTOR vTriaB ;
|
||||
int nIntTypeB = IntersTriaTria( trTria, trTriaB, ptIntB1, ptIntB2, vTriaB) ;
|
||||
if ( nFromSpecialToNormal[nIntTypeB] == ITTT_PNT || nFromSpecialToNormal[nIntTypeB] == ITTT_VERT)
|
||||
if ( FromSpecialToNormal( nIntTypeB) == ITTT_PNT || FromSpecialToNormal( nIntTypeB) == ITTT_VERT)
|
||||
nIntB = 1 ;
|
||||
else if ( nFromSpecialToNormal[nIntTypeB] == ITTT_YES || nFromSpecialToNormal[nIntTypeB] == ITTT_EDGE) {
|
||||
else if ( FromSpecialToNormal( nIntTypeB) == ITTT_YES || FromSpecialToNormal( nIntTypeB) == ITTT_EDGE) {
|
||||
nIntB = 2 ;
|
||||
}
|
||||
// Unisco le due intersezioni
|
||||
@@ -911,8 +911,8 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
if ( m_nStatus != OK || ! SurfB.IsValid())
|
||||
return false ;
|
||||
// Unordered map dei segmenti di intersezione
|
||||
std::unordered_map <int, Chain> LineMapA ;
|
||||
std::unordered_map <int, Chain> LineMapB ;
|
||||
unordered_map <int, Chain> LineMapA ;
|
||||
unordered_map <int, Chain> LineMapB ;
|
||||
// Ciclo sui triangoli delle mesh
|
||||
int nTriaNumA = GetTriangleSize() ;
|
||||
int nTriaNumB = SurfB.GetTriangleSize() ;
|
||||
@@ -946,12 +946,12 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
Point3d ptSegSt, ptSegEn ;
|
||||
TRIA3DVECTOR vTria ;
|
||||
int nIntType = IntersTriaTria( trTriaA, trTriaB, ptSegSt, ptSegEn, vTria) ;
|
||||
if ( ! ( nFromSpecialToNormal[nIntType] == ITTT_NO ||
|
||||
nFromSpecialToNormal[nIntType] == ITTT_OVERLAPS ||
|
||||
nFromSpecialToNormal[nIntType] == ITTTS_VERT_VERT)) {
|
||||
if ( ! ( FromSpecialToNormal( nIntType) == ITTT_NO ||
|
||||
FromSpecialToNormal( nIntType) == ITTT_OVERLAPS ||
|
||||
FromSpecialToNormal( nIntType) == ITTTS_VERT_VERT)) {
|
||||
// Assegno i dati di intersezione
|
||||
IntSegment CurInters ;
|
||||
if ( nFromSpecialToNormal[nIntType] == ITTT_EDGE || nFromSpecialToNormal[nIntType] == ITTT_YES) {
|
||||
if ( FromSpecialToNormal( nIntType) == ITTT_EDGE || FromSpecialToNormal( nIntType) == ITTT_YES) {
|
||||
CurInters.ptSt = ptSegSt ;
|
||||
CurInters.ptEn = ptSegEn ;
|
||||
CurInters.bDegenerate = false ;
|
||||
@@ -1035,7 +1035,6 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Ritriangolarizzo i triangoli della superficie A
|
||||
for ( auto it = LineMapA.begin() ; it != LineMapA.end() ; ++ it) {
|
||||
@@ -1762,6 +1761,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
vInnerLoop.resize( 0) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Se i triangoli delle superfici non si intersecano, una delle due è totalmente interna o esterna all'altra.
|
||||
if ( ! bModif) {
|
||||
int nVertNum = 0 ;
|
||||
@@ -1848,6 +1848,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
// Se avvenuta modifica, aggiorno tutto
|
||||
if ( bModif)
|
||||
bContinue = ( AdjustVertices() && DoCompacting() && SurfB.AdjustVertices() && SurfB.DoCompacting()) ;
|
||||
|
||||
// Triangoli sovrapposti
|
||||
if ( bContinue) {
|
||||
int nTriaNumA = GetTriangleSize() ;
|
||||
|
||||
Reference in New Issue
Block a user