d3c687c586
- aggiornamento prototipi e costanti.
62 lines
3.5 KiB
C
62 lines
3.5 KiB
C
//----------------------------------------------------------------------------
|
|
// EgalTech 2018-2019
|
|
//----------------------------------------------------------------------------
|
|
// File : EGkIntersTriaTria.h Data : 01.10.19 Versione : 2.1i3
|
|
// Contenuto : Dichiarazione della classe intersezione triangolo/triangolo.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 27.08.18 DS Creazione modulo.
|
|
// 01.10.19 LM Aggiunte costanti
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkPlane3d.h"
|
|
#include "/EgtDev/Include/EGkTriangle3d.h"
|
|
#include "/EgtDev/Include/EGkGeoCollection.h"
|
|
|
|
//----------------------- Macro per import/export ----------------------------
|
|
#undef EGK_EXPORT
|
|
#if defined( I_AM_EGK) // da definirsi solo nella DLL
|
|
#define EGK_EXPORT __declspec( dllexport)
|
|
#else
|
|
#define EGK_EXPORT __declspec( dllimport)
|
|
#endif
|
|
|
|
//-----------------------------------------------------------------------------
|
|
EGK_EXPORT int IntersTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2,
|
|
Point3d& ptInt, Point3d& ptInt2, TRIA3DVECTOR& vTria) ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// 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] ;
|
|
}
|
|
|