Correzione casi intersezione triangolo triangolo

This commit is contained in:
LorenzoM
2021-05-14 10:15:50 +02:00
parent 6b8f97230d
commit 621221b24e
+16 -30
View File
@@ -27,36 +27,22 @@
//-----------------------------------------------------------------------------
EGK_EXPORT int IntersTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2,
Point3d& ptInt, Point3d& ptInt2, TRIA3DVECTOR& vTria) ;
Point3d& ptInt, Point3d& ptInt2, TRIA3DVECTOR& vTria, bool bSpecial = false) ;
//-----------------------------------------------------------------------------
// Tipo di intersezione triangolo-triangolo
enum IntTriaTriaType { ITTT_NO = 0, // non c'è intersezione
ITTT_OVERLAPS = 1, // i triangoli si sovrappongono (i triangoli del poligono sono in vTria)
ITTT_VERT = 2, // l'intersezione coincide con un vertice di un triangolo (ptInt)
ITTT_PNT = 3, // l'intersezione è un punto sui lati di entrambi i triangoli (ptInt)
ITTT_EDGE = 4, // l'intersezione coincide con un lato di un triangolo (ptInt, ptInt2)
ITTT_YES = 5} ; // l'intersezione è un segmento (ptInt, ptInt2)
// Tipi estesi
enum IntTriaTriaSpecialType { ITTTS_NO = 0, // non c'è intersezione
ITTTS_OVERLAPS = 1, // i triangoli si sovrappongono (i triangoli del poligono sono in vTria)
ITTTS_VERT_VERT = 2, // intersezione coppia di vertici
ITTTS_VERT_EDGE = 3, // vertice del primo su lato del secondo
ITTTS_VERT_INT = 4, // vertice del primo nell'interno del secondo
ITTTS_EDGE_VERT = 5, // vertice del secondo su lato del primo
ITTTS_EDGE_EDGE_PNT = 6, // punto sull'intersezione di due lati
ITTTS_INT_VERT = 7, // vertice del secondo nell'interno del primo
ITTTS_EDGE_EDGE_SEG = 8, // sovrapposizione di lati
ITTTS_EDGE_INT = 9, // lato del primo nell'interno del secondo
ITTTS_INT_EDGE = 10, // lato del secondo nell'interno del primo
ITTTS_INT_INT_SEG = 11 // segmento all'interno di entrambi i triangoli
} ;
// Conversione dai nuovi ai vecchi tipi
inline int FromSpecialToNormal( int nRes)
{
if ( nRes < ITTTS_NO || nRes > ITTTS_INT_INT_SEG)
return ITTT_NO ;
const int nFromSpecialToNormal[] = { ITTT_NO, ITTT_OVERLAPS, ITTT_VERT, ITTT_VERT, ITTT_VERT, ITTT_VERT, ITTT_PNT, ITTT_VERT, ITTT_EDGE, ITTT_EDGE, ITTT_EDGE, ITTT_YES } ;
return nFromSpecialToNormal[nRes] ;
}
// Tipo di intersezione triangolo-triangolo
enum IntTriaTriaSpecialType { ITTT_NO = 0, // non c'è intersezione
ITTT_OVERLAPS = 1, // i triangoli si sovrappongono (i triangoli del poligono sono in vTria)
ITTT_VERT_VERT = 2, // intersezione coppia di vertici
ITTT_VERT_EDGE = 3, // vertice del primo su lato del secondo
ITTT_VERT_INT = 4, // vertice del primo nell'interno del secondo
ITTT_EDGE_VERT = 5, // vertice del secondo su lato del primo
ITTT_EDGE_EDGE_PNT = 6, // punto sull'intersezione di due lati
ITTT_INT_VERT = 7, // vertice del secondo nell'interno del primo
ITTT_EDGE_EDGE_SEG = 8, // sovrapposizione di lati
ITTT_EDGE_INT = 9, // lato del primo nell'interno del secondo
ITTT_INT_EDGE = 10, // lato del secondo nell'interno del primo
ITTT_INT_INT_SEG = 11, // segmento all'interno di entrambi i triangoli
} ;