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:
DarioS
2022-08-17 19:17:44 +02:00
parent de99955e93
commit 6238ea1095
6 changed files with 113 additions and 24 deletions
+18 -14
View File
@@ -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) ;