EgtGeomKernel 1.9g2 :
- migliorie varie a Collision Avoidance di Tools - piccola miglioria a Intervals.
This commit is contained in:
+679
-197
File diff suppressed because it is too large
Load Diff
+22
-5
@@ -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,
|
||||
|
||||
Binary file not shown.
@@ -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] ;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user