Include : Aggiunta distanza punto-arco.

This commit is contained in:
Dario Sassi
2014-01-02 07:55:21 +00:00
parent 2932f2837b
commit 82c0b316b4
10 changed files with 137 additions and 43 deletions
+51
View File
@@ -0,0 +1,51 @@
//----------------------------------------------------------------------------
// EgalTech 2013-2013
//----------------------------------------------------------------------------
// File : EGkDistPointArc.h Data : 28.12.13 Versione : 1.4l5
// Contenuto : Dichiarazione della classe distanza punto da circonferenza/arco.
//
//
//
// Modifiche : 28.12.13 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "/EgtDev/Include/EGkPoint3d.h"
#include "/EgtDev/Include/EGkCurveArc.h"
//----------------------- Macro per import/export ----------------------------
#undef EGK_EXPORT
#if defined( I_AM_EGK) // da definirsi solo nella DLL
#define EGK_EXPORT __declspec( dllexport)
#else
#define EGK_EXPORT __declspec( dllimport)
#endif
//-----------------------------------------------------------------------------
class DistPointArc
{
public :
EGK_EXPORT DistPointArc( const Point3d& ptP, const ICurveArc& arArc) ;
public :
EGK_EXPORT bool GetSqDist( double& dSqDist) ;
EGK_EXPORT bool GetDist( double& dDist) ;
EGK_EXPORT bool GetPointMinDist( Point3d& ptMinDist, bool* pbDet = nullptr) ;
EGK_EXPORT bool GetParamAtPointMinDist( double& dParam, bool* pbDet = nullptr) ;
private :
DistPointArc( void) ;
void DistPointCircle( const Point3d& ptP, const ICurveArc& arArc) ;
void DistPointFlatArc( const Point3d& ptP, const ICurveArc& arArc) ;
private :
bool m_bDet ;
double m_dDist ;
double m_dParam ;
Point3d m_ptMinDist ;
} ;
+19 -16
View File
@@ -14,6 +14,7 @@
#pragma once
#include "/EgtDev/Include/EGkPoint3d.h"
#include "/EgtDev/Include/EGkCurveLine.h"
//----------------------- Macro per import/export ----------------------------
#undef EGK_EXPORT
@@ -28,27 +29,29 @@
class DistPointLine
{
public :
EGK_EXPORT DistPointLine( void) ;
EGK_EXPORT DistPointLine( const Point3d& ptP,
const ICurveLine& crvLine, bool bIsSegment = true) ;
EGK_EXPORT DistPointLine( const Point3d& ptP,
const Point3d& ptIni, const Point3d& ptFin, bool bIsSegment = true) ;
EGK_EXPORT DistPointLine( const Point3d& ptP,
const Point3d& ptIni, const Vector3d& vtDir, double dLen, bool bIsSegment = true)
{ Calculate( ptP, ptIni, vtDir, dLen, bIsSegment) ; }
public :
EGK_EXPORT bool Set( const Point3d& ptP, const Point3d& ptIni, const Point3d& ptFin, bool bIsSegment) ;
EGK_EXPORT bool SetPoint( const Point3d& ptP) ;
EGK_EXPORT bool SetLine( const Point3d& ptIni, const Point3d& ptFin, bool bIsSegment) ;
EGK_EXPORT double GetSqDist( void) ;
EGK_EXPORT double GetDist( void) ;
EGK_EXPORT const Point3d& GetPointMinDist( void) ;
EGK_EXPORT bool GetSqDist( double& dSqDist) ;
EGK_EXPORT bool GetDist( double& dDist) ;
EGK_EXPORT bool GetPointMinDist( Point3d& ptMinDist) ;
EGK_EXPORT bool GetParamAtPointMinDist( double& dParam) ;
private :
bool Calculate( void) ;
DistPointLine( void) ;
void Calculate( const Point3d& ptP,
const Point3d& ptIni, const Vector3d& vtDir, double dLen, bool bIsSegment) ;
private :
Point3d m_ptP ;
Point3d m_ptIni ;
Vector3d m_vtDir ;
double m_dLen ;
bool m_bIsSegment ;
double m_dSqDist ;
double m_dDist ;
Point3d m_ptMinDist ;
double m_dSqDist ;
double m_dDist ;
double m_dParam ;
Point3d m_ptMinDist ;
} ;
+2 -2
View File
@@ -43,8 +43,8 @@ class EGK_EXPORT Frame3d
// Mirror non possibile (cambia il senso destrorso in sinistrorso)
bool ToGlob( const Frame3d& frRef) ;
bool ToLoc( const Frame3d& frRef) ;
const Frame3d operator*=( const Frame3d& frRef) { this->ToGlob( frRef) ; return *this ;}
const Frame3d operator/=( const Frame3d& frRef) { this->ToLoc( frRef) ; return *this ;}
const Frame3d& operator*=( const Frame3d& frRef) { this->ToGlob( frRef) ; return *this ;}
const Frame3d& operator/=( const Frame3d& frRef) { this->ToLoc( frRef) ; return *this ;}
int GetType( void) const { return m_nType ;}
int GetZType( void) const { return m_nZType ;}
const Point3d& Orig( void) const { return m_ptOrig ;}
+1
View File
@@ -41,6 +41,7 @@ class __declspec( novtable) IGdbIterator
virtual bool GetGroupGlobFrame( Frame3d& frGlob) = 0 ;
virtual int GetId( void) = 0 ;
virtual int GetParentId( void) = 0 ;
virtual bool GetGlobFrame( Frame3d& frGlob) = 0 ;
} ;
//-----------------------------------------------------------------------------
+1
View File
@@ -43,6 +43,7 @@ class __declspec( novtable) IGeomDB
virtual Frame3d* GetGroupFrame( int nId) = 0 ;
virtual bool GetGroupGlobFrame( int nId, Frame3d& frGlob) = 0 ;
virtual int GetParentId( int nId) = 0 ;
virtual bool GetGlobFrame( int nId, Frame3d& frGlob) = 0 ;
virtual int Copy( int nIdSou, int nIdDest, int nParentIdDest) = 0 ;
virtual bool Erase( int nId) = 0 ;
virtual bool Translate( int nId, const Vector3d& vtMove) = 0 ;
+33 -3
View File
@@ -30,9 +30,9 @@ class Frame3d ;
class EGK_EXPORT Point3d
{
public :
Point3d( double dX, double dY, double dZ) { x = dX ; y = dY ; z = dZ ;}
Point3d( double dX, double dY) { x = dX ; y = dY ; z = 0 ;}
Point3d( void) { x = 0 ; y = 0 ; z = 0 ;}
Point3d( double dX, double dY, double dZ) : x( dX), y( dY), z( dZ) {}
Point3d( double dX, double dY) : x( dX), y( dY), z( 0) {}
Point3d( void) : x( 0), y( 0), z( 0) {}
void Set( double dX, double dY, double dZ) { x = dX ; y = dY ; z = dZ ;}
const Point3d& operator =( const Point3d& ptSrc)
{ if ( &ptSrc != this) {
@@ -40,6 +40,15 @@ class EGK_EXPORT Point3d
return *this ; }
public :
const Point3d& operator +=( const Vector3d& vtV)
{ this->x += vtV.x ; this->y += vtV.y ; this->z += vtV.z ; return *this ; }
// questa somma è valida solo se equivalente ad una combinazione baricentrica
const Point3d& operator +=( const Point3d& ptP)
{ this->x += ptP.x ; this->y += ptP.y ; this->z += ptP.z ; return *this ; }
const Point3d& operator *=( double dMul)
{ this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; }
const Point3d& operator /=( double dDiv)
{ double dMul = 1 / dDiv ; this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; }
void Translate( const Vector3d& vtMove) ;
bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad) ;
bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) ;
@@ -47,6 +56,8 @@ class EGK_EXPORT Point3d
bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) ;
bool ToGlob( const Frame3d& frRef) ;
bool ToLoc( const Frame3d& frRef) ;
bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
{ return ( ToGlob( frOri) && ToLoc( frDest)) ; }
public :
double x ;
@@ -165,6 +176,25 @@ Dist( const Point3d& ptP1, const Point3d& ptP2)
return sqrt( dX * dX + dY * dY + dZ * dZ) ;
}
//----------------------------------------------------------------------------
// Direzione e distanza tra due punti
//----------------------------------------------------------------------------
inline bool
DirDist( const Point3d& ptP1, const Point3d& ptP2, Vector3d& vtDir, double& dDist)
{
dDist = Dist( ptP1, ptP2) ;
// se distanza significativa
if ( dDist > EPS_SMALL) {
vtDir = ( ptP2 - ptP1) / dDist ;
return true ;
}
// punti praticamente coincidenti
vtDir.Set( 0, 0, 0) ;
return false ;
}
//----------------------------------------------------------------------------
// Verifica che due punti sono quasi coincidenti (Small error -> Near)
//----------------------------------------------------------------------------
+1 -1
View File
@@ -1,7 +1,7 @@
//----------------------------------------------------------------------------
// EgalTech 2013-2013
//----------------------------------------------------------------------------
// File : DistPointLine.cpp Data : 22.12.13 Versione : 1.4l3
// File : EGkPolyLine.cpp Data : 22.12.13 Versione : 1.4l3
// Contenuto : Dichiarazione della classe PolyLine.
//
//
+24 -18
View File
@@ -30,9 +30,9 @@ class Frame3d ;
class EGK_EXPORT Vector3d
{
public :
Vector3d( double dX, double dY, double dZ) { x = dX ; y = dY ; z = dZ ;}
Vector3d( double dX, double dY) { x = dX ; y = dY ; z = 0 ;}
Vector3d( void) { x = 0 ; y = 0 ; z = 0 ;}
Vector3d( double dX, double dY, double dZ) : x( dX), y( dY), z( dZ) {}
Vector3d( double dX, double dY) : x( dX), y( dY), z( 0) {}
Vector3d( void) : x( 0), y( 0), z( 0) {}
void Set( double dX, double dY, double dZ) { x = dX ; y = dY ; z = dZ ;}
const Vector3d& operator =( const Vector3d& vtSrc)
{ if ( &vtSrc != this) {
@@ -54,16 +54,26 @@ class EGK_EXPORT Vector3d
{ return ( fabs( x) < EPS_ZERO && fabs( y) < EPS_ZERO && z > EPS_ZERO) ; }
bool IsZminus( void) const
{ return ( fabs( x) < EPS_ZERO && fabs( y) < EPS_ZERO && z < - EPS_ZERO) ; }
const Vector3d& operator +=( const Vector3d& vtV)
{ this->x += vtV.x ; this->y += vtV.y ; this->z += vtV.z ; return *this ; }
const Vector3d& operator -=( const Vector3d& vtV)
{ this->x -= vtV.x ; this->y -= vtV.y ; this->z -= vtV.z ; return *this ; }
const Vector3d& operator *=( double dMul)
{ this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; }
const Vector3d& operator /=( double dDiv)
{ double dMul = 1 / dDiv ; this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; }
void ToSpherical( double* pdLen, double* pdAngVertDeg, double* pdAngOrizzDeg) const ;
bool Normalize( void) ;
bool Rotate( const Vector3d& vtAx, double dAngRad) ;
bool Rotate( const Vector3d& vtAx, double dCosAng, double dSinAng) ;
bool Scale( double dCoeffX, double dCoeffY, double dCoeffZ) ;
bool Mirror( const Vector3d& vtNorm) ;
bool ToGlob( const Frame3d& frRef) ;
bool ToLoc( const Frame3d& frRef) ;
bool GetAngle( const Vector3d& vtEnd, double& dAngDeg) ;
bool GetRotation( const Vector3d& vtEnd, const Vector3d& vtAx, double& dAngDeg, bool& bDet) ;
bool Normalize( void) ;
bool Rotate( const Vector3d& vtAx, double dAngRad) ;
bool Rotate( const Vector3d& vtAx, double dCosAng, double dSinAng) ;
bool Scale( double dCoeffX, double dCoeffY, double dCoeffZ) ;
bool Mirror( const Vector3d& vtNorm) ;
bool ToGlob( const Frame3d& frRef) ;
bool ToLoc( const Frame3d& frRef) ;
bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
{ return ( ToGlob( frOri) && ToLoc( frDest)) ; }
bool GetAngle( const Vector3d& vtEnd, double& dAngDeg) const ;
bool GetRotation( const Vector3d& vtEnd, const Vector3d& vtAx, double& dAngDeg, bool& bDet) const ;
public :
double x ;
@@ -170,9 +180,7 @@ Media( const Vector3d& vtV1, const Vector3d& vtV2, double dCoeff)
inline bool
AreSameVectorNear( const Vector3d& vtV1, const Vector3d& vtV2)
{
return ( fabs( vtV1.x - vtV2.x) < EPS_SMALL &&
fabs( vtV1.y - vtV2.y) < EPS_SMALL &&
fabs( vtV1.z - vtV2.z) < EPS_SMALL) ;
return ( ( vtV1 - vtV2).IsSmall()) ;
}
//----------------------------------------------------------------------------
@@ -181,9 +189,7 @@ AreSameVectorNear( const Vector3d& vtV1, const Vector3d& vtV2)
inline bool
AreSameVectorExact( const Vector3d& vtV1, const Vector3d& vtV2)
{
return ( fabs( vtV1.x - vtV2.x) < EPS_ZERO &&
fabs( vtV1.y - vtV2.y) < EPS_ZERO &&
fabs( vtV1.z - vtV2.z) < EPS_ZERO) ;
return ( ( vtV1 - vtV2).IsZero()) ;
}
//----------------------------------------------------------------------------
+3 -3
View File
@@ -30,11 +30,11 @@ class __declspec( novtable) ICurve : public IGeoObj
virtual bool GetEndPoint( Point3d& ptEnd) const = 0 ;
virtual bool GetDomain( double& dStart, double& dEnd) const = 0 ;
virtual bool GetLength( double& dLen) const = 0 ;
virtual bool GetPointD1D2( double dU, Side nS, Point3d& ptPos, Vector3d& vtDer1, Vector3d& vtDer2) const = 0 ;
virtual bool GetPoint( double dU, Side nS, Point3d& ptPos) const = 0 ;
virtual bool GetPointD1D2( double dU, Side nS, Point3d& ptPos,
Vector3d* pvtDer1 = nullptr, Vector3d* pvtDer2 = nullptr) const = 0 ;
virtual bool GetPointTang( double dU, Side nS, Point3d& ptPos, Vector3d& vtTang) const = 0 ;
virtual bool GetPointDiffGeom( double dU, Side nS, CrvPointDiffGeom& oDiffG) const = 0 ;
virtual bool Reverse( void) = 0 ;
virtual bool Invert( void) = 0 ;
virtual bool ApproxWithLines( double dLinTol, double dAngTolDeg, PolyLine& PL) const = 0 ;
virtual bool TrimStartAtParam( double dUTrim) = 0 ;
virtual bool TrimEndAtParam( double dUTrim) = 0 ;
+2
View File
@@ -23,6 +23,8 @@ class __declspec( novtable) ICurveArc : public ICurve
const Vector3d& vtS, double dAngCenDeg, double dDeltaN) = 0 ;
virtual bool Set( const Point3d& ptCen, double dRad, double dAngIniDeg, double dAngCenDeg, double dDeltaZ) = 0 ;
virtual bool Set( const Point3d& ptCen, double dRad) = 0 ;
virtual bool IsFlat( void) const = 0 ;
virtual bool IsACircle( void) const = 0 ;
virtual bool IsInPlaneXY( void) const = 0 ;
virtual const Point3d& GetCenter( void) const = 0 ;
virtual const Vector3d& GetNormVersor( void) const = 0 ;