EgtGeomKernel :
- aggiunte funzioni per verifica collisione tra Box, Cilindro e Sfera con Superfici triMesh chiuse - aggiunta costruzione di Polygon3d da triangolo.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2016-2020
|
||||
//----------------------------------------------------------------------------
|
||||
// File : CDBoxSurfTm.cpp Data : 09.01.20 Versione : 2.2a2
|
||||
// Contenuto : Implementazione della verifica di collisione tra
|
||||
// BoundingBox e Closed SurftriMesh.
|
||||
//
|
||||
//
|
||||
// Modifiche : 05.10.16 DS Creazione modulo.
|
||||
// 09.01.20 DS Cambio nome alla funzione.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "/EgtDev/Include/EGkCDeBoxTria.h"
|
||||
#include "/EgtDev/Include/EGkCDeBoxClosedSurfTm.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CDeBoxClosedSurfTm( const Frame3d& frBox, const Vector3d& vtDiag, double dSafeDist, const ISurfTriMesh& Stm)
|
||||
{
|
||||
// verifico che la trimesh sia effettivamente un poliedro
|
||||
if ( ! Stm.IsClosed())
|
||||
return false ;
|
||||
// recupero BBox del poliedro
|
||||
BBox3d b3Poly = Stm.GetAllTriaBox() ;
|
||||
// calcolo il BBox del parallelepipedo
|
||||
BBox3d b3Box( ORIG, ORIG + vtDiag) ;
|
||||
b3Box.Expand( dSafeDist) ;
|
||||
b3Box.ToGlob( frBox) ;
|
||||
// confronto i due Box
|
||||
if ( ! b3Box.Overlaps( b3Poly))
|
||||
return false ;
|
||||
// recupero i triangoli che interferiscono con il box
|
||||
INTVECTOR vT ;
|
||||
Stm.GetAllTriaOverlapBox( b3Box, vT) ;
|
||||
for ( int nT : vT) {
|
||||
Triangle3d Tria ;
|
||||
if ( Stm.GetTriangle( nT, Tria)) {
|
||||
if ( CDeBoxTria( frBox, vtDiag, dSafeDist, Tria))
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
return false ;
|
||||
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2016-2016
|
||||
//----------------------------------------------------------------------------
|
||||
// File : CDBoxPolyhedron.cpp Data : 05.10.16 Versione : 1.6v1
|
||||
// Contenuto : Implementazione della verifica di collisione tra
|
||||
// BoundingBox e Polyhedron.
|
||||
//
|
||||
//
|
||||
// Modifiche : 05.10.16 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "/EgtDev/Include/EGkCDeBoxTria.h"
|
||||
#include "/EgtDev/Include/EGkCDeBoxPolyhedron.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CDeBoxPolyhedron( const BBox3d& b3Box, const ISurfTriMesh& Stm)
|
||||
{
|
||||
// verifico che la trimesh sia effettivamente un poliedro
|
||||
if ( ! Stm.IsClosed())
|
||||
return false ;
|
||||
// recupero BBox del poliedro
|
||||
BBox3d b3Poly ;
|
||||
if ( ! Stm.GetLocalBBox( b3Poly))
|
||||
return false ;
|
||||
// confronto i due Box
|
||||
if ( ! b3Box.Overlaps( b3Poly))
|
||||
return false ;
|
||||
// confronto il Box con tutti i triangoli
|
||||
Triangle3d Tria ;
|
||||
int nId = Stm.GetFirstTriangle( Tria) ;
|
||||
while ( nId != SVT_NULL) {
|
||||
if ( CDeBoxTria( b3Box, Tria))
|
||||
return true ;
|
||||
nId = Stm.GetNextTriangle( nId, Tria) ;
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
+13
-5
@@ -90,10 +90,18 @@ CDeBoxPlane( const BBox3d& Box, const Plane3d& Plane)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CDeBoxTria( const BBox3d& b3Box, const Triangle3d& trTria)
|
||||
CDeBoxTria( const Frame3d& frBox, const Vector3d& vtDiag, double dSafeDist, const Triangle3d& trTria)
|
||||
{
|
||||
// vedi Ericson, Real-Time Collision Detection, pag. 172 + Akenine-Moller
|
||||
|
||||
// Porto il triangolo nel riferimento del box
|
||||
Triangle3d trTriaL = trTria ;
|
||||
trTriaL.ToLoc( frBox) ;
|
||||
|
||||
// Calcolo il box come tale
|
||||
BBox3d b3Box( ORIG, ORIG + vtDiag) ;
|
||||
b3Box.Expand( dSafeDist) ;
|
||||
|
||||
// Compute box center and extents
|
||||
Point3d ptCen ;
|
||||
Vector3d vtExt ;
|
||||
@@ -101,9 +109,9 @@ CDeBoxTria( const BBox3d& b3Box, const Triangle3d& trTria)
|
||||
return false ;
|
||||
|
||||
// Translate triangle as conceptually moving AABB to origin
|
||||
Point3d ptV0 = trTria.GetP( 0) - ( ptCen - ORIG) ;
|
||||
Point3d ptV1 = trTria.GetP( 1) - ( ptCen - ORIG) ;
|
||||
Point3d ptV2 = trTria.GetP( 2) - ( ptCen - ORIG) ;
|
||||
Point3d ptV0 = trTriaL.GetP( 0) - ( ptCen - ORIG) ;
|
||||
Point3d ptV1 = trTriaL.GetP( 1) - ( ptCen - ORIG) ;
|
||||
Point3d ptV2 = trTriaL.GetP( 2) - ( ptCen - ORIG) ;
|
||||
|
||||
// Compute edge vectors for triangle
|
||||
Vector3d vtE0 = ptV1 - ptV0 ;
|
||||
@@ -148,6 +156,6 @@ CDeBoxTria( const BBox3d& b3Box, const Triangle3d& trTria)
|
||||
|
||||
// Test separating axis corresponding to triangle face normal (category 2)
|
||||
Plane3d Plane ;
|
||||
Plane.Set( trTria.GetP( 0), trTria.GetN()) ;
|
||||
Plane.Set( trTriaL.GetP( 0), trTriaL.GetN()) ;
|
||||
return CDeBoxPlane( b3Box, Plane) ;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2020-2020
|
||||
//----------------------------------------------------------------------------
|
||||
// File : CDCylSurfTm.cpp Data : 09.01.20 Versione : 2.2a2
|
||||
// Contenuto : Implementazione della verifica di collisione tra
|
||||
// Cylinder e Closed SurftriMesh.
|
||||
//
|
||||
//
|
||||
// Modifiche : 09.01.20 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "/EgtDev/Include/EGkCDeCylTria.h"
|
||||
#include "/EgtDev/Include/EGkCDeCylClosedSurfTm.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CDeCylClosedSurfTm( const Frame3d& frCyl, double dH, double dR, double dSafeDist, const ISurfTriMesh& Stm)
|
||||
{
|
||||
// verifico che la trimesh sia effettivamente chiusa (un poliedro)
|
||||
if ( ! Stm.IsClosed())
|
||||
return false ;
|
||||
// recupero BBox del poliedro
|
||||
BBox3d b3Poly = Stm.GetAllTriaBox() ;
|
||||
// calcolo il BBox del cilindro
|
||||
BBox3d b3Cyl( ORIG, dR, dR, dH) ;
|
||||
b3Cyl.Expand( dSafeDist) ;
|
||||
b3Cyl.ToGlob( frCyl) ;
|
||||
// confronto i due Box
|
||||
if ( ! b3Cyl.Overlaps( b3Poly))
|
||||
return false ;
|
||||
// recupero i triangoli che interferiscono con il box del Cilindro
|
||||
INTVECTOR vT ;
|
||||
Stm.GetAllTriaOverlapBox( b3Cyl, vT) ;
|
||||
for ( int nT : vT) {
|
||||
Triangle3d Tria ;
|
||||
if ( Stm.GetTriangle( nT, Tria)) {
|
||||
if ( CDeCylTria( frCyl, dH, dR, dSafeDist, Tria))
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2020-2020
|
||||
//----------------------------------------------------------------------------
|
||||
// File : CDeCylTria.cpp Data : 08.01.20 Versione : 2.2a2
|
||||
// Contenuto : Implementazione della verifica di collisione tra
|
||||
// Cylinder e Triangle3d.
|
||||
//
|
||||
//
|
||||
// Modifiche :08.01.20 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "DistPointLine.h"
|
||||
#include "/EgtDev/Include/EGkCDeCylTria.h"
|
||||
#include "/EgtDev/Include/EGkPolygon3d.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CDeCylTria( const Frame3d& frCyl, double dH, double dR, double dSafeDist, const Triangle3d& trTria)
|
||||
{
|
||||
// Costruisco il poligono equivalente
|
||||
Polygon3d plyTria ;
|
||||
if ( ! plyTria.FromTriangle( trTria))
|
||||
return false ;
|
||||
// Lo porto nel riferimento del cilindro
|
||||
plyTria.ToLoc( frCyl) ;
|
||||
// Lo taglio come il cilindro (ingrossato della sicurezza)
|
||||
Plane3d plTrimB ;
|
||||
plTrimB.Set( dSafeDist, -Z_AX) ;
|
||||
plyTria.Trim( plTrimB, true, false) ;
|
||||
Plane3d plTrimT ;
|
||||
plTrimT.Set( dH + dSafeDist, Z_AX) ;
|
||||
plyTria.Trim( plTrimB, true, false) ;
|
||||
// Se non è rimasto alcunchè, allora non c'è collisione
|
||||
if ( plyTria.GetSideCount() == 0)
|
||||
return false ;
|
||||
// Proietto il poligono sul piano XY
|
||||
plyTria.Scale( GLOB_FRM, 1, 1, 0) ;
|
||||
// Verifico che sia orientato verso l'alto
|
||||
if ( plyTria.GetVersN().z < - EPS_SMALL)
|
||||
plyTria.Invert() ;
|
||||
// Determino la distanza con segno dei lati del poligono dall'origine del piano
|
||||
const PNTVECTOR& vVert = plyTria.GetVertices() ;
|
||||
for ( int i = 0 ; i < int( vVert.size()) ; ++ i) {
|
||||
int j = ( i + 1) % vVert.size() ;
|
||||
DistPointLine dstPL( ORIG, vVert[i], vVert[j]) ;
|
||||
double dDist ;
|
||||
if ( dstPL.GetDist( dDist)) {
|
||||
// se distanza minore del raggio, allora collide
|
||||
if ( dDist < dR + dSafeDist)
|
||||
return true ;
|
||||
Point3d ptMinDist ;
|
||||
dstPL.GetMinDistPoint( ptMinDist) ;
|
||||
// se sta a destra del raggio, allora non collide
|
||||
if ( CrossXY( ( ORIG - ptMinDist), ( vVert[j] - vVert[i])) > 0)
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
|
||||
return false ;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2020-2020
|
||||
//----------------------------------------------------------------------------
|
||||
// File : CDCylSurfTm.cpp Data : 09.01.20 Versione : 2.2a2
|
||||
// Contenuto : Implementazione della verifica di collisione tra
|
||||
// Sphere e Closed SurftriMesh.
|
||||
//
|
||||
//
|
||||
// Modifiche : 09.01.20 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "/EgtDev/Include/EGkCDeSpheTria.h"
|
||||
#include "/EgtDev/Include/EGkCDeSpheClosedSurfTm.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CDeSpheClosedSurfTm( const Point3d& ptCen, double dR, double dSafeDist, const ISurfTriMesh& Stm)
|
||||
{
|
||||
// verifico che la trimesh sia effettivamente chiusa (un poliedro)
|
||||
if ( ! Stm.IsClosed())
|
||||
return false ;
|
||||
// recupero BBox del poliedro
|
||||
BBox3d b3Poly = Stm.GetAllTriaBox() ;
|
||||
// calcolo il BBox della sfera
|
||||
BBox3d b3Sphe( ptCen, dR) ;
|
||||
b3Sphe.Expand( dSafeDist) ;
|
||||
// confronto i due Box
|
||||
if ( ! b3Sphe.Overlaps( b3Poly))
|
||||
return false ;
|
||||
// recupero i triangoli che interferiscono con il box della Sfera
|
||||
INTVECTOR vT ;
|
||||
Stm.GetAllTriaOverlapBox( b3Sphe, vT) ;
|
||||
for ( int nT : vT) {
|
||||
Triangle3d Tria ;
|
||||
if ( Stm.GetTriangle( nT, Tria)) {
|
||||
if ( CDeSpheTria( ptCen, dR, dSafeDist, Tria))
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2020-2020
|
||||
//----------------------------------------------------------------------------
|
||||
// File : CDeSpheTria.cpp Data : 09.01.20 Versione : 2.2a2
|
||||
// Contenuto : Implementazione della verifica di collisione tra
|
||||
// Sphere e Triangle3d.
|
||||
//
|
||||
//
|
||||
// Modifiche :09.01.20 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "/EgtDev/Include/EGkCDeSpheTria.h"
|
||||
#include "/EgtDev/Include/EGkDistPointTria.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CDeSpheTria( const Point3d& ptCen, double dR, double dSafeDist, const Triangle3d& trTria)
|
||||
{
|
||||
// Determino la minima distanza tra centro della sfera e triangolo
|
||||
double dDist ;
|
||||
if ( ! DistPointTriangle( ptCen, trTria).GetDist( dDist))
|
||||
return false ;
|
||||
return ( dDist < dR + dSafeDist) ;
|
||||
}
|
||||
+12
-3
@@ -270,8 +270,12 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClCompile Include="CAvSimpleSurfFrMove.cpp" />
|
||||
<ClCompile Include="CAvToolSurfTm.cpp" />
|
||||
<ClCompile Include="CAvToolTriangle.cpp" />
|
||||
<ClCompile Include="CDeBoxPolyhedron.cpp" />
|
||||
<ClCompile Include="CDeBoxClosedSurfTm.cpp" />
|
||||
<ClCompile Include="CDeBoxTria.cpp" />
|
||||
<ClCompile Include="CDeCylClosedSurfTm.cpp" />
|
||||
<ClCompile Include="CDeCylTria.cpp" />
|
||||
<ClCompile Include="CDeSpheClosedSurfTm.cpp" />
|
||||
<ClCompile Include="CDeSpheTria.cpp" />
|
||||
<ClCompile Include="ChainCurves.cpp" />
|
||||
<ClCompile Include="CircleCenTgCurve.cpp" />
|
||||
<ClCompile Include="Color.cpp" />
|
||||
@@ -392,13 +396,17 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkAngle.h" />
|
||||
<ClInclude Include="..\Include\EGkArcCenTgCurvePnt.h" />
|
||||
<ClInclude Include="..\Include\EGkArcPntDirTgCurve.h" />
|
||||
<ClInclude Include="..\Include\EgkArcSpecial.h" />
|
||||
<ClInclude Include="..\Include\EGkArcSpecial.h" />
|
||||
<ClInclude Include="..\Include\EGkBBox3d.h" />
|
||||
<ClInclude Include="..\Include\EGkBiArcs.h" />
|
||||
<ClInclude Include="..\Include\EGkCAvSimpleSurfFrMove.h" />
|
||||
<ClInclude Include="..\Include\EGkCAvToolSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeBoxPolyhedron.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeBoxClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeBoxTria.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeCylClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeCylTria.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeSpheClosedSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkCDeSpheTria.h" />
|
||||
<ClInclude Include="..\Include\EGkChainCurves.h" />
|
||||
<ClInclude Include="..\Include\EGkCircleCenTgCurve.h" />
|
||||
<ClInclude Include="..\Include\EGkColor.h" />
|
||||
@@ -416,6 +424,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
|
||||
<ClInclude Include="..\Include\EGkDistPointSurfTm.h" />
|
||||
<ClInclude Include="..\Include\EGkDistPointTria.h" />
|
||||
<ClInclude Include="..\Include\EGkDllMain.h" />
|
||||
<ClInclude Include="..\Include\EGkExtDimension.h" />
|
||||
<ClInclude Include="..\Include\EGkExtText.h" />
|
||||
<ClInclude Include="..\Include\EGkFilletChamfer.h" />
|
||||
<ClInclude Include="..\Include\EGkFrame3d.h" />
|
||||
|
||||
@@ -375,9 +375,6 @@
|
||||
<ClCompile Include="CAvToolSurfTm.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CDeBoxPolyhedron.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CDeBoxTria.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
@@ -399,6 +396,21 @@
|
||||
<ClCompile Include="ExtDimension.cpp">
|
||||
<Filter>File di origine\Geo</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CDeCylTria.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CDeBoxClosedSurfTm.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CDeCylClosedSurfTm.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CDeSpheTria.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="CDeSpheClosedSurfTm.cpp">
|
||||
<Filter>File di origine\GeoCollision</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stdafx.h">
|
||||
@@ -737,9 +749,6 @@
|
||||
<ClInclude Include="..\Include\EGkArcPntDirTgCurve.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EgkArcSpecial.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkFilletChamfer.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
@@ -872,9 +881,6 @@
|
||||
<ClInclude Include="..\Include\EGkCAvToolSurfTm.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeBoxPolyhedron.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeBoxTria.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
@@ -956,6 +962,27 @@
|
||||
<ClInclude Include="ExtDimension.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeCylTria.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeBoxClosedSurfTm.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeCylClosedSurfTm.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkArcSpecial.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkExtDimension.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeSpheTria.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\EGkCDeSpheClosedSurfTm.h">
|
||||
<Filter>File di intestazione\Include</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="EgtGeomKernel.rc">
|
||||
|
||||
+20
-1
@@ -53,6 +53,25 @@ Polygon3d::FromRectangle( double dDimX, double dDimY)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Polygon3d::FromTriangle( const Triangle3d& trTria)
|
||||
{
|
||||
// annullo il piano del poligono
|
||||
m_Plane.Reset() ;
|
||||
// verifico che il triangolo sia valido
|
||||
if ( ! trTria.IsValid())
|
||||
return false ;
|
||||
// assegno il piano
|
||||
m_Plane.Set( trTria.GetP( 0), trTria.GetN()) ;
|
||||
// assegno i punti
|
||||
m_vVert.emplace_back( trTria.GetP( 0)) ;
|
||||
m_vVert.emplace_back( trTria.GetP( 1)) ;
|
||||
m_vVert.emplace_back( trTria.GetP( 2)) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Polygon3d::FromPolyLine( const PolyLine& PL)
|
||||
@@ -152,7 +171,7 @@ Polygon3d::Trim( const Plane3d& plPlane, bool bInVsOut, bool bOnEq)
|
||||
// determino se normali equiverse
|
||||
bool bEquivNormal = ( m_Plane.GetVersN() * plPlane.GetVersN() > 0) ;
|
||||
// se relazione tra normali opposta al desiderato, lo annullo
|
||||
if ( bOnEq != bEquivNormal)
|
||||
if ( bOnEq != bEquivNormal)
|
||||
m_vVert.clear() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user