EgtGeomKernel 1.9g2 :

- migliorie varie a Collision Avoidance di Tools
- piccola miglioria a Intervals.
This commit is contained in:
Dario Sassi
2018-07-19 15:53:16 +00:00
parent d099756336
commit c393ebf1b3
5 changed files with 733 additions and 203 deletions
+679 -197
View File
File diff suppressed because it is too large Load Diff
+22 -5
View File
@@ -16,6 +16,7 @@
#include "Tool.h"
#include "/EgtDev/Include/EGkTriangle3d.h"
//-----------------------------------------------------------------------------
double CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& vtToolAx,
const Triangle3d& trTria, const Vector3d& vtMove) ;
@@ -23,7 +24,7 @@ double CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vec
// Sfera
double CAvSphereTriangle( const Point3d& ptSpheCen, double dSpheRad, const Triangle3d& trTria, const Vector3d& vtMove) ;
double SpherePlaneLeakDist( const Point3d& ptSpheCen, double dSpheRad,
double SpherePlaneLeakDist( const Point3d& ptSpheCen, double dSpheRad,
const Point3d& ptPlane, const Vector3d& vtPlaneN, const Vector3d& vtMove) ;
double SphereSegmentLeakDist( const Point3d& ptSpheCen, double dSpheRad,
const Point3d& ptSeg, const Vector3d& vtSegDir, double dSegLen,
@@ -58,17 +59,29 @@ double TrConeTriangleInteriorLeakDistOrtMot( const Point3d& ptMinBase, const Vec
double dTrConeH, const Triangle3d& trTria, const Vector3d& vtMove) ;
// Toro
double CAvTorusTriangle( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
double CAvTorusTriangle( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Triangle3d& trTria, const Vector3d& vtMove, bool bTop, bool bBot) ;
double TorusSegmentLeakDistLongMot( const Point3d& ptTorusCen, double dMaxRad, double dMinRad,
const Point3d& ptSeg, const Vector3d& vtSeg, double dSegLen, const Vector3d& vtMove) ;
double TorusTriangleInteriorLeakDistLongMot( const Point3d& ptTorusCen, double dMaxRad, double dMinRad,
const Triangle3d& trTria, const Vector3d& vtMove) ;
double TorusSegmentLeakDistOrtMot( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Point3d& ptSeg, const Vector3d& vtSeg, double dSegLen, const Vector3d& vtMove,
double TorusSegmentLeakDistOrtMot( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Point3d& ptSeg, const Vector3d& vtSeg, double dSegLen, const Vector3d& vtMove,
bool bTop, bool bBot) ;
double TorusTriangleInteriorLeakDistOrtMot( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Triangle3d& trTria, const Vector3d& vtMove) ;
const Triangle3d& trTria, const Vector3d& vtMove) ;
double CAvConcaveTorusTriangle( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Triangle3d& trTria, const Vector3d& vtMove, bool bTop, bool bBot) ;
double ConcaveTorusSegmentLeakDistLongMot( const Point3d& ptTorusCen, double dMaxRad, double dMinRad,
const Point3d& ptSeg, const Vector3d& vtSeg, double dSegLen, const Vector3d& vtMove) ;
double ConcaveTorusTriangleInteriorLeakDistLongMot( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Triangle3d& trTria, const Vector3d& vtMove) ;
double ConcaveTorusSegmentLeakDistOrtMot( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Point3d& ptSeg, const Vector3d& vtSeg, double dSegLen, const Vector3d& vtMove,
bool bTop, bool bBot) ;
double ConcaveTorusTriangleInteriorLeakDistOrtMot( const Point3d& ptTorusCen, const Vector3d& vtTorusAx, double dMaxRad, double dMinRad,
const Triangle3d& trTria, const Vector3d& vtMove) ;
// Dischi
double DiskPointLeakDistLongMot( const Point3d& ptDiskCen, double dDiskRad,
@@ -77,6 +90,9 @@ double DiskSegmentLeakDistLongMot( const Point3d& ptDiskCen, double dDiskRad,
const Point3d& ptSeg, const Vector3d& vtSeg, double dSegLen, const Vector3d& vtMove) ;
double DiskTriaInteriorLeakDistLongMot( const Point3d& ptDiskCen, double dDiskRad,
const Triangle3d& trTria, const Vector3d& vtMove) ;
double DiskPlaneLeakDistLongMot( const Point3d& ptDiskCen, double dDiskRad,
const Point3d& ptPlane, const Vector3d& vtPlane,
const Vector3d& vtMove, Point3d& ptTouch) ;
double DiskPointLeakDistOrtMot( const Point3d& ptDisc, const Vector3d& vtDiskAx, double dDiscRad,
const Point3d& ptP, const Vector3d& vtMove) ;
double DiskSegmentLeakDistOrtMot( const Point3d& ptDiskCen, const Vector3d& vtDiskAx, double dDiskRad,
@@ -95,6 +111,7 @@ double LineLineSqDist( const Point3d& ptP1, const Vector3d& vtD1, const Point3d&
double LineSegmentSqDist( const Point3d& ptPLn, const Vector3d& vtDLn,
const Point3d& ptPSg, const Vector3d& vtDSg, double dSgLen) ;
bool IsPointInsideTriangle( const Point3d& ptP, const Triangle3d& trTria) ;
bool IsPointInsideOpenTriangle( const Point3d& ptP, const Triangle3d& trTria) ;
bool CoplanarDiscTriangleInterferance( const Point3d& ptCen, double dRad, const Triangle3d& trTria) ;
bool FindLineLineMinDistPar( const Point3d& ptL1, const Vector3d& vtV1,
const Point3d& ptL2, const Vector3d& vtV2,
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -546,7 +546,7 @@ IntersLineInfiniteCylinder( const Point3d& ptPLine, const Vector3d& vtVLine,
dU1 = vdRoots[0] ;
nIntType = CC_ONE_INT_TAN ;
}
// L'equazione ha due soluzioni, bisogna valutare se sono den distinte.
// L'equazione ha due soluzioni, bisogna valutare se sono ben distinte.
else if ( nRoot == 2) {
dU1 = vdRoots[0] ;
dU2 = vdRoots[1] ;
+31
View File
@@ -140,6 +140,37 @@ Intervals::Subtract( double dMin, double dMax)
}
}
//----------------------------------------------------------------------------
void
Intervals::Intersect( double dMin, double dMax)
{
// se l'insieme è vuoto non devo fare alcunché
if ( m_vInts.empty())
return ;
// se l'insieme contiene un solo intervallo
if ( m_vInts.size() == 1) {
// verifico ordine
if ( dMin > dMax)
swap( dMin, dMax) ;
// se non si sovrappongono, il risultato è vuoto
if ( dMax < m_vInts.front().first - m_dToler || dMin > m_vInts.front().second + m_dToler) {
m_vInts.clear() ;
return ;
}
// calcolo l'intersezione
m_vInts.front().first = max( m_vInts.front().first, dMin) ;
m_vInts.front().second = min( m_vInts.front().second, dMax) ;
return ;
}
// Insieme di intervalli ausiliario ampio come il corrente
Intervals Aux ;
Aux.Set( m_vInts.front().first, m_vInts.back().second) ;
// Sottraggo Other da Aux
Aux.Subtract( dMin, dMax) ;
// Sottraggo Aux dal corrente
Subtract( Aux) ;
}
//----------------------------------------------------------------------------
void
Intervals::Add( const Intervals& Other)