Include :
- aggiornamento prototipi - aggiunta IsPointInsideTriangle a EGkTriangle3d.h.
This commit is contained in:
+4
-3
@@ -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 ;
|
||||
|
||||
@@ -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
@@ -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 ;
|
||||
}
|
||||
Reference in New Issue
Block a user