EgtGeomKernel 1.8j4 :

- aggiunta classe Polygon3d (da EgtExchange)
- razionalizzata classe Plane3d
- corretta funzione IntersLineTria.
This commit is contained in:
Dario Sassi
2017-10-16 07:56:04 +00:00
parent 31658bb165
commit 5bcd4bb67d
26 changed files with 969 additions and 105 deletions
+20 -7
View File
@@ -46,8 +46,7 @@ IntersLineTria( const Point3d& ptL, const Vector3d& vtL, double dLen, const Tria
{
// determino il piano del triangolo
Plane3d plPlane ;
plPlane.vtN = trTria.GetN() ;
plPlane.dDist = ( trTria.GetP(0) - ORIG) * plPlane.vtN ;
plPlane.Set( trTria.GetP( 0), trTria.GetN()) ;
// calcolo l'intersezione tra il segmento di linea e il piano del triangolo
int nRes = IntersLinePlane( ptL, vtL, dLen, plPlane, ptInt) ;
// se non c'è intersezione
@@ -83,8 +82,17 @@ IntersCoplanarLineTria( const Point3d& ptL, const Vector3d& vtL, double dLen, co
ptInt2 = ptL + vtL * dLen ;
int nPTT = PointInTria( ptInt, trTria) ;
int nPTT2 = PointInTria( ptInt2, trTria) ;
if ( nPTT != PTT_OUT && nPTT2 != PTT_OUT)
if ( ( nPTT == PTT_IN && nPTT2 != PTT_OUT) || ( nPTT != PTT_OUT && nPTT2 == PTT_IN))
return ILTT_SEGM ;
if ( nPTT == PTT_VERT && nPTT2 == PTT_VERT)
return ILTT_SEGM_ON_EDGE ;
if ( ( nPTT == PTT_VERT || nPTT == PTT_EDGE) && ( nPTT2 == PTT_VERT || nPTT2 == PTT_EDGE)) {
Point3d ptMed = Media( ptInt, ptInt2, 0.5) ;
if ( PointInTria( ptMed, trTria) == PTT_IN)
return ILTT_SEGM ;
else
return ILTT_SEGM_ON_EDGE ;
}
// se segmento nullo, basta verificare la posizione del punto iniziale
if ( dLen < EPS_SMALL || vtL.IsSmall()) {
switch ( nPTT) {
@@ -140,13 +148,18 @@ IntersCoplanarLineTria( const Point3d& ptL, const Vector3d& vtL, double dLen, co
else {
// se l'inizio è nel triangolo
if ( nPTT == PTT_IN) {
ptInt2 = ptInt ;
ptInt = ptL ;
ptInt2 = ptInt ;
return ILTT_SEGM ;
}
// altrimenti è la fine nel triangolo
else
// se altrimenti è la fine nel triangolo
else if ( nPTT2 == PTT_IN) {
ptInt2 = ptL + vtL * dLen ;
return ILTT_SEGM ;
return ILTT_SEGM ;
}
// altrimenti entrambi esterni, è un vertice
else
return ILTT_VERT ;
}
}
// se 2 intersezioni