EgtGeomKernel 2.4h1 :
- in BBox3d aggiunti GetDimX, GetDimY e GetDimZ - corretta DistLineLine con parametri punti estremi - in creazione Stm da due curve (rigata) aggiunta gestione tipo RLT_ISOPAR_SMOOTH.
This commit is contained in:
+18
-14
@@ -1,13 +1,13 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2020-2020
|
||||
// EgalTech 2020-2022
|
||||
//----------------------------------------------------------------------------
|
||||
// File : DistLineLine.h Data : 06.11.20 Versione : 2.2k1
|
||||
// File : DistLineLine.h Data : 12.08.22 Versione : 2.4h1
|
||||
// Contenuto : Implementazione della classe distanza fra elementi lineari.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 06.11.20 LM Creazione modulo.
|
||||
//
|
||||
// 12.08.22 DS Correzioni e migliorie varie.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -25,17 +25,19 @@ DistLineLine::DistLineLine( const Point3d& ptSt1, const Point3d& ptEn1,
|
||||
const Point3d& ptSt2, const Point3d& ptEn2,
|
||||
bool bIsSegment1, bool bIsSegment2)
|
||||
{
|
||||
// reset oggetto
|
||||
m_dSqDist = - 1 ;
|
||||
m_dDist = - 1 ;
|
||||
// calcolo direzione segmenti
|
||||
Vector3d vtD1 = ptEn1 - ptSt1 ;
|
||||
double dLen1 = vtD1.Len() ;
|
||||
Vector3d vtD2 = ptEn2 - ptSt2 ;
|
||||
double dLen2 = vtD1.Len() ;
|
||||
if ( dLen1 < EPS_SMALL || dLen2 < EPS_SMALL) {
|
||||
m_dSqDist = - 1 ;
|
||||
m_dDist = - 1 ;
|
||||
double dLen2 = vtD2.Len() ;
|
||||
if ( dLen1 < EPS_SMALL || dLen2 < EPS_SMALL)
|
||||
return ;
|
||||
}
|
||||
vtD1 /= dLen1 ;
|
||||
vtD2 /= dLen2 ;
|
||||
// eseguo
|
||||
Calculate( ptSt1, vtD1, dLen1, ptSt2, vtD2, dLen2, bIsSegment1, bIsSegment2) ;
|
||||
}
|
||||
|
||||
@@ -45,11 +47,13 @@ DistLineLine::DistLineLine( const Point3d& ptSt1, const Vector3d& vtD1, double d
|
||||
const Point3d& ptSt2, const Vector3d& vtD2, double dLen2,
|
||||
bool bIsSegment1, bool bIsSegment2)
|
||||
{
|
||||
if ( dLen1 < EPS_SMALL || dLen2 < EPS_SMALL) {
|
||||
m_dSqDist = - 1 ;
|
||||
m_dDist = - 1 ;
|
||||
// reset oggetto
|
||||
m_dSqDist = - 1 ;
|
||||
m_dDist = - 1 ;
|
||||
// verifico segmenti
|
||||
if ( dLen1 < EPS_SMALL || dLen2 < EPS_SMALL)
|
||||
return ;
|
||||
}
|
||||
// eseguo
|
||||
Calculate( ptSt1, vtD1, dLen1, ptSt2, vtD2, dLen2, bIsSegment1, bIsSegment2) ;
|
||||
}
|
||||
|
||||
@@ -193,8 +197,8 @@ DistLineLine::Calculate( const Point3d& ptSt1, const Vector3d& vtD1, double dLen
|
||||
double dDist01 = vtStSt * vtD1 ;
|
||||
double dDist02 = vtStSt * vtD2 ;
|
||||
double dDotD1D2 = vtD1 * vtD2 ;
|
||||
double dT1 = dDist01 + ( ( dDist01 * dDotD1D2 - dDist02) * dDotD1D2) / ( 1 - dDotD1D2 * dDotD1D2) ;
|
||||
double dT2 = ( dDist01 * dDotD1D2 - dDist02) / ( 1 - dDotD1D2 * dDotD1D2) ;
|
||||
double dT1 = ( dDist01 - dDotD1D2 * dDist02) / ( 1 - dDotD1D2 * dDotD1D2) ;
|
||||
double dT2 = ( dDotD1D2 * dDist01 - dDist02) / ( 1 - dDotD1D2 * dDotD1D2) ;
|
||||
// Posizioni minime e massime sui segmenti
|
||||
double dMin1 = ( bIsSegment1 ? 0 : -INFINITO) ;
|
||||
double dMax1 = ( bIsSegment1 ? dLen1 : INFINITO) ;
|
||||
|
||||
Reference in New Issue
Block a user