Include :

- aggiornamento prototipi
- aggiunta IsPointInsideTriangle a EGkTriangle3d.h.
This commit is contained in:
Dario Sassi
2019-06-08 07:47:44 +00:00
parent aed1e870c4
commit 1d2b3e1563
3 changed files with 76 additions and 7 deletions
+4 -3
View File
@@ -1,13 +1,13 @@
//----------------------------------------------------------------------------
// EgalTech 2018-2018
// EgalTech 2018-2019
//----------------------------------------------------------------------------
// File : EGkCAvToolSurfTm.h Data : 08.05.18 Versione : 1.9e2
// File : EGkCAvToolSurfTm.h Data : 06.06.19 Versione : 2.1f1
// Contenuto : Dichiarazione della classe ICAvToolSurfTm.
//
//
//
// Modifiche : 27.04.18 DS Creazione modulo.
//
// 06.06.19 DS Aggiunta gestione di più superfici.
//
//----------------------------------------------------------------------------
@@ -28,6 +28,7 @@ class __declspec( novtable) ICAvToolSurfTm {
public :
virtual ~ICAvToolSurfTm( void) {}
virtual bool SetSurfTm( const ISurfTriMesh& Stm) = 0 ;
virtual bool AddSurfTm( const ISurfTriMesh& Stm) = 0 ;
virtual bool SetStdTool( double dH, double dR, double dCornR) = 0 ;
virtual bool SetAdvTool( double dH, double dR, double dTipH, double dTipR, double dCornR) = 0 ;
virtual bool SetSawTool( double dH, double dR, double dThick, double dStemR, double dCornR) = 0 ;
+12 -2
View File
@@ -1,7 +1,7 @@
//----------------------------------------------------------------------------
// EgalTech 2014-2014
// EgalTech 2014-2019
//----------------------------------------------------------------------------
// File : EgkSurf.h Data : 07.04.14 Versione : 1.5d2
// File : EgkSurf.h Data : 06.06.19 Versione : 2.1f1
// Contenuto : Dichiarazione della interfaccia ISurf.
//
//
@@ -14,6 +14,9 @@
#pragma once
#include "/EgtDev/Include/EGkGeoObj.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include <vector>
#include <list>
//----------------------------------------------------------------------------
class __declspec( novtable) ISurf : public IGeoObj
@@ -38,3 +41,10 @@ inline ISurf* GetSurf( IGeoObj* pGObj)
{ if ( pGObj == nullptr || ( pGObj->GetType() & GEO_SURF) == 0)
return nullptr ;
return (static_cast<ISurf*>(pGObj)) ; }
//----------------------------------------------------------------------------
// Raccolte di puntatori a ISurf
typedef std::vector<const ISurf*> CISURFPVECTOR ; // vettore di puntatori a const ISurf
typedef std::vector<ISurf*> ISURFPVECTOR ; // vettore di puntatori a ISurf
typedef std::list<ISurf*> ISURFPLIST ; // lista di puntatori a ISurf
typedef std::vector<PtrOwner<ISurf>> ISURFPOVECTOR ; // vettore di puntatori esclusivi a ISurf
+60 -2
View File
@@ -1,7 +1,7 @@
//----------------------------------------------------------------------------
// EgalTech 2014-2018
// EgalTech 2014-2019
//----------------------------------------------------------------------------
// File : EGkTria3d.h Data : 15.01.18 Versione : 1.9a1
// File : EGkTria3d.h Data : 06.06.19 Versione : 2.1f1
// Contenuto : Dichiarazione classe triangolo Triangle3d.
//
//
@@ -9,6 +9,7 @@
// Modifiche : 30.03.14 DS Creazione modulo.
// 07.02.15 DS Agg. GetArea e GetAspectRatio.
// 15.01.18 LM Agg. flag.
// 06.06.19 LM Agg. IsPointInsideTriangle.
//
//----------------------------------------------------------------------------
@@ -422,3 +423,60 @@ CalcNormal( const Point3d& ptP, const Triangle3d& Tria, const TriNormals3d& Tnor
// la normalizzo
return vtNorm.Normalize( EPS_ZERO) ;
}
//----------------------------------------------------------------------------
enum TriangleType { OPEN = -1, EXACT = 0, CLOSED = 1 };
//----------------------------------------------------------------------------
// Stabilisce se un punto appartiene a un triangolo aperto, esatto o chiuso.
inline bool
IsPointInsideTriangle( const Point3d& ptP, const Triangle3d& trTria, int nTriType)
{
// Se il punto non è nel box del triangolo, è sicuramente esterno
BBox3d b3Tria( trTria.GetP( 0)) ;
b3Tria.Add( trTria.GetP( 1)) ;
b3Tria.Add( trTria.GetP( 2)) ;
if ( ! b3Tria.Encloses( ptP))
return false;
// Se il punto non sta sul piano del triangolo, è sicuramente esterno
if ( abs( ( ptP - trTria.GetP(0)) * trTria.GetN()) > EPS_SMALL)
return false ;
// Tolleranza di appartenenza dipendente dal tipo di triangolo
double dEps ;
switch ( nTriType) {
case OPEN :
dEps = EPS_SMALL ;
break ;
case EXACT :
dEps = 0 ;
break ;
case CLOSED:
dEps = -EPS_SMALL ;
break ;
default :
return false ;
}
// Verifico se il punto è a destra del primo lato
Vector3d vtV0 = trTria.GetP( 1) - trTria.GetP( 0) ;
vtV0.Normalize() ;
double dProd0 = ( vtV0 ^ (ptP - trTria.GetP( 0))) * trTria.GetN() ;
if ( dProd0 < dEps)
return false ;
// Verifico se il punto è a destra del secondo lato
Vector3d vtV1 = trTria.GetP( 2) - trTria.GetP( 1) ;
vtV1.Normalize() ;
double dProd1 = ( vtV1 ^ (ptP - trTria.GetP( 1))) * trTria.GetN() ;
if ( dProd1 < dEps)
return false ;
// Verifico se il punto è a destra del terzo lato
Vector3d vtV2 = trTria.GetP( 0) - trTria.GetP( 2) ;
vtV2.Normalize() ;
double dProd2 = ( vtV2 ^ (ptP - trTria.GetP(2))) * trTria.GetN() ;
if ( dProd2 < dEps)
return false ;
// Punto a sinistra di tutti i lati, quindi interno
return true ;
}