From 96d900a0a9b0c5d6b8b1d84f02ea06b26e94fb9f Mon Sep 17 00:00:00 2001 From: DarioS Date: Mon, 26 Apr 2021 19:06:52 +0200 Subject: [PATCH 1/3] Include : - aggiornamento prototipi. --- EInAPI.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/EInAPI.h b/EInAPI.h index dee0897..a7b8c23 100644 --- a/EInAPI.h +++ b/EInAPI.h @@ -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]) ; From e2dcf7957117d332aed3e103ee11f26c1c03779b Mon Sep 17 00:00:00 2001 From: DarioS Date: Mon, 3 May 2021 09:20:10 +0200 Subject: [PATCH 2/3] Include : - aggiornamento mensile chiave librerie. --- EgtKeyCodes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EgtKeyCodes.h b/EgtKeyCodes.h index c2dfb0b..3bc6a85 100644 --- a/EgtKeyCodes.h +++ b/EgtKeyCodes.h @@ -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 ; //---------------------------------------------------------------------------- From c4db78c2d4a1096f694d9ddf98867619d089f0c2 Mon Sep 17 00:00:00 2001 From: DarioS Date: Fri, 14 May 2021 17:26:44 +0200 Subject: [PATCH 3/3] Include : - modificate costanti per tipo intersezione tra due triangoli IntTriaTriaType - aggiunto prototipo GetSurfFlatRegionFromPolyLineVector - aggiunta funzione IsPointOnTriangleVertex. --- EGkIntersTriaTria.h | 47 +++++++++++++++------------------------------ EGkSfrCreate.h | 1 + EGkTriangle3d.h | 16 ++++++++++++--- 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/EGkIntersTriaTria.h b/EGkIntersTriaTria.h index 06f6692..7295555 100644 --- a/EGkIntersTriaTria.h +++ b/EGkIntersTriaTria.h @@ -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. // //---------------------------------------------------------------------------- @@ -30,33 +31,17 @@ EGK_EXPORT int IntersTriaTria( const Triangle3d& trTria1, const Triangle3d& trTr Point3d& ptInt, Point3d& ptInt2, TRIA3DVECTOR& vTria) ; //----------------------------------------------------------------------------- -// Tipo di intersezione triangolo-triangolo +// 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] ; -} - \ No newline at end of file + 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 + } ; diff --git a/EGkSfrCreate.h b/EGkSfrCreate.h index ec4fbde..134d8d5 100644 --- a/EGkSfrCreate.h +++ b/EGkSfrCreate.h @@ -30,6 +30,7 @@ EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionDisk( double dRadius) ; // 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 diff --git a/EGkTriangle3d.h b/EGkTriangle3d.h index d2ceac7..70e97d0 100644 --- a/EGkTriangle3d.h +++ b/EGkTriangle3d.h @@ -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,