Merge remote-tracking branch 'origin/master' into LorenzoM
This commit is contained in:
+17
-18
@@ -1,13 +1,14 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2018-2019
|
||||
// EgalTech 2018-2021
|
||||
//----------------------------------------------------------------------------
|
||||
// File : EGkIntersTriaTria.h Data : 01.10.19 Versione : 2.1i3
|
||||
// File : EGkIntersTriaTria.h Data : 14.05.21 Versione : 2.3e1
|
||||
// Contenuto : Dichiarazione della classe intersezione triangolo/triangolo.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 27.08.18 DS Creazione modulo.
|
||||
// 01.10.19 LM Aggiunte costanti
|
||||
// 14.05.21 LM Ridefinizione costanti intersezione tra triangoli.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -27,22 +28,20 @@
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
EGK_EXPORT int IntersTriaTria( const Triangle3d& trTria1, const Triangle3d& trTria2,
|
||||
Point3d& ptInt, Point3d& ptInt2, TRIA3DVECTOR& vTria, bool bSpecial = false) ;
|
||||
Point3d& ptInt, Point3d& ptInt2, TRIA3DVECTOR& vTria) ;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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
|
||||
} ;
|
||||
|
||||
|
||||
enum IntTriaTriaType { 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_EDGE_VERT = 4, // vertice del secondo su lato del primo
|
||||
ITTT_VERT_INT = 5, // vertice del primo nell'interno del secondo
|
||||
ITTT_INT_VERT = 6, // vertice del secondo nell'interno del primo
|
||||
ITTT_EDGE_EDGE_PNT = 7, // punto sull'intersezione di due lati
|
||||
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
|
||||
} ;
|
||||
|
||||
@@ -32,6 +32,7 @@ EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromPolyLineVector( const POLYLINEV
|
||||
// la curva ingrassata non deve autointersecarsi
|
||||
EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius,
|
||||
bool bSquareEnds, bool bSquareMids) ;
|
||||
EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromPolyLineVector( const POLYLINEVECTOR& vContoursPolyLineVec) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class SurfFlatRegionByContours
|
||||
|
||||
+13
-3
@@ -449,7 +449,7 @@ CalcNormal( const Point3d& ptP, const Triangle3d& Tria, const TriNormals3d& Tnor
|
||||
enum TriangleType { OPEN = -1, EXACT = 0, CLOSED = 1 };
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Stabilisce se un punto appartiene a un triangolo aperto, esatto o chiuso.
|
||||
// Stabilisce se un punto appartiene al triangolo aperto, esatto o chiuso.
|
||||
inline bool
|
||||
IsPointInsideTriangle( const Point3d& ptP, const Triangle3d& trTria, int nTriType)
|
||||
{
|
||||
@@ -458,7 +458,7 @@ IsPointInsideTriangle( const Point3d& ptP, const Triangle3d& trTria, int nTriTyp
|
||||
b3Tria.Add( trTria.GetP( 1)) ;
|
||||
b3Tria.Add( trTria.GetP( 2)) ;
|
||||
if ( ! b3Tria.Encloses( ptP))
|
||||
return false;
|
||||
return false ;
|
||||
|
||||
// Se il punto non sta sul piano del triangolo, è sicuramente esterno
|
||||
if ( abs( ( ptP - trTria.GetP(0)) * trTria.GetN()) > EPS_SMALL)
|
||||
@@ -473,7 +473,7 @@ IsPointInsideTriangle( const Point3d& ptP, const Triangle3d& trTria, int nTriTyp
|
||||
case EXACT :
|
||||
dEps = 0 ;
|
||||
break ;
|
||||
case CLOSED:
|
||||
case CLOSED :
|
||||
dEps = -EPS_SMALL ;
|
||||
break ;
|
||||
default :
|
||||
@@ -502,6 +502,16 @@ IsPointInsideTriangle( const Point3d& ptP, const Triangle3d& trTria, int nTriTyp
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Stabilisce se un punto appartiene a un vertice del triangolo
|
||||
inline bool
|
||||
IsPointOnTriangleVertex( const Point3d& ptP, const Triangle3d& trTria)
|
||||
{
|
||||
return ( AreSamePointApprox( trTria.GetP( 0), ptP) ||
|
||||
AreSamePointApprox( trTria.GetP( 1), ptP) ||
|
||||
AreSamePointApprox( trTria.GetP( 2), ptP)) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
inline bool
|
||||
GetTriaVertexNearestToLine( const Triangle3d& trTria, const Point3d& ptL, const Vector3d& vtL,
|
||||
|
||||
@@ -898,6 +898,10 @@ EIN_EXPORT BOOL __stdcall EgtGetAllHeadsNames( wchar_t*& wsNames) ;
|
||||
EIN_EXPORT BOOL __stdcall EgtGetAllTablesNames( wchar_t*& wsNames) ;
|
||||
// Machine Calc
|
||||
EIN_EXPORT BOOL __stdcall EgtSetCalcTool( const wchar_t* wsTool, const wchar_t* wsHead, int nExit) ;
|
||||
EIN_EXPORT BOOL __stdcall EgtGetCalcAngles( const double vtDirT[3], const double vtDirA[3],
|
||||
int* pnStat, double* pdAngA1, double* pdAngB1, double* pdAngA2, double* pdAngB2) ;
|
||||
EIN_EXPORT BOOL __stdcall EgtGetCalcPositions( const double ptP[3], double dAngA, double dAngB,
|
||||
int* pnStat, double* pdX, double* pdY, double* pdZ) ;
|
||||
EIN_EXPORT BOOL __stdcall EgtGetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA, double dAngB,
|
||||
BOOL bBottom, double ptTip[3]) ;
|
||||
EIN_EXPORT BOOL __stdcall EgtGetCalcToolDirFromAngles( double dAngA, double dAngB, double vtDir[3]) ;
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const int KEY_BASELIB_PROD = 207 ;
|
||||
const int KEY_BASELIB_VER = 2304 ;
|
||||
const int KEY_BASELIB_VER = 2305 ;
|
||||
const int KEY_BASELIB_LEV = 1 ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user