diff --git a/EGkArcXxTgArc.h b/EGkArcXxTgArc.h new file mode 100644 index 0000000..35e8e14 --- /dev/null +++ b/EGkArcXxTgArc.h @@ -0,0 +1,33 @@ +//---------------------------------------------------------------------------- +// EgalTech 2014-2014 +//---------------------------------------------------------------------------- +// File : EGkArcXxTgArc.h Data : 12.06.14 Versione : 1.5f4 +// Contenuto : Dichiarazione funzioni per calcolo archi tangenti a arco. +// +// +// +// Modifiche : 12.06.14 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#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 + +//---------------------------------------------------------------------------- +EGK_EXPORT ICurveArc* GetCircleCenTgArc( const Point3d& ptCen, const ICurveArc& crvArc, const Point3d& ptNear) ; +EGK_EXPORT ICurveArc* GetArcCenTgArcPnt( const Point3d& ptCen, const ICurveArc& crvArc, + const Point3d& ptNearTg, const Point3d& ptNearEnd) ; +EGK_EXPORT ICurve* GetArc2PD( const Point3d& ptStart, const Point3d& ptEnd, double dDirStartDeg) ; +EGK_EXPORT ICurve* GetArcPntDirTgArc( const Point3d& ptP, double dDirStartDeg, + const ICurveArc& crvArc, const Point3d& ptNearTg) ; diff --git a/EGkGeoCollection.h b/EGkGeoCollection.h index c2b21c8..725dea2 100644 --- a/EGkGeoCollection.h +++ b/EGkGeoCollection.h @@ -28,6 +28,12 @@ typedef std::pair UPOINT ; // coppia parametro, punto typedef std::vector UPNTVECTOR ; // vettore di coppie parametro, punto typedef std::list UPNTLIST ; // lista di coppie parametro, punto +//---------------------------------------------------------------------------- +// Raccolte di coppie Point3d,Point3d +typedef std::pair BIPOINT ; // coppia punto1, punto2 +typedef std::vector BIPNTVECTOR ; // vettore di coppie punto1, punto2 +typedef std::list BIPNTLIST ; // lista di coppie punto1, punto2 + //---------------------------------------------------------------------------- // Raccolte di Punti di curva con loro geometria differenziale typedef std::vector CPDGVECTOR ; // vettore di CrvPointDiffGeom diff --git a/EGkGeoVector3d.h b/EGkGeoVector3d.h index 2754b45..40c1a78 100644 --- a/EGkGeoVector3d.h +++ b/EGkGeoVector3d.h @@ -1,13 +1,13 @@ //---------------------------------------------------------------------------- -// EgalTech 2013-2013 +// EgalTech 2013-2014 //---------------------------------------------------------------------------- -// File : EGkGeoVector3d.h Data : 22.11.13 Versione : 1.3a1 +// File : EGkGeoVector3d.h Data : 11.06.14 Versione : 1.5f4 // Contenuto : Dichiarazione della interfaccia IGeoVector3d. // // // // Modifiche : 22.11.13 DS Creazione modulo. -// +// 11.06.14 DS Agg. punto Base. // //---------------------------------------------------------------------------- @@ -23,8 +23,11 @@ class __declspec( novtable) IGeoVector3d : public IGeoObj public : virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ; virtual bool Set( const Vector3d& vtV) = 0 ; + virtual bool Set( const Vector3d& vtV, const Point3d& ptBase) = 0 ; virtual const Vector3d& GetVector( void) const = 0 ; - virtual bool GetDrawWithArrowHead( double dFrazLenAH, PolyLine& PL) const = 0 ; + virtual const Point3d& GetBase( void) const = 0 ; + virtual bool ChangeBase( const Point3d& ptBase) = 0 ; + virtual bool GetDrawWithArrowHead( double dFrazLenAH, double dMaxDimA, PolyLine& PL) const = 0 ; } ; //----------------------------------------------------------------------------- diff --git a/EGkLinePntTgCurve.h b/EGkLinePntTgCurve.h new file mode 100644 index 0000000..dbbdc55 --- /dev/null +++ b/EGkLinePntTgCurve.h @@ -0,0 +1,30 @@ +//---------------------------------------------------------------------------- +// EgalTech 2014-2014 +//---------------------------------------------------------------------------- +// File : EGkLinePntTgCurve.h Data : 10.06.14 Versione : 1.5f3 +// Contenuto : Dichiarazione funzioni per calcolo rette tangenti a curve. +// +// +// +// Modifiche : 10.06.14 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCurveLine.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 + +//---------------------------------------------------------------------------- +EGK_EXPORT ICurveLine* GetLinePointTgCurve( const Point3d& ptP, const ICurve& cCrv, const Point3d& ptNear) ; +EGK_EXPORT ICurveLine* GetLinePointTgArc( const Point3d& ptP, const ICurveArc& crvArc, const Point3d& ptNear) ; diff --git a/EGkLineTgTwoArcs.h b/EGkLineTgTwoArcs.h new file mode 100644 index 0000000..bb8ec0e --- /dev/null +++ b/EGkLineTgTwoArcs.h @@ -0,0 +1,30 @@ +//---------------------------------------------------------------------------- +// EgalTech 2014-2014 +//---------------------------------------------------------------------------- +// File : EGkLineTgCurve.h Data : 10.06.14 Versione : 1.5f3 +// Contenuto : Dichiarazione funzioni per calcolo rette tangenti a curve. +// +// +// +// Modifiche : 10.06.14 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCurveLine.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 + +//---------------------------------------------------------------------------- +EGK_EXPORT ICurveLine* GetLineTgTwoArcs( const ICurveArc& crvArc1, const Point3d& ptNear1, + const ICurveArc& crvArc2, const Point3d& ptNear2) ; diff --git a/EGkPoint3d.h b/EGkPoint3d.h index 03d7ed3..e681af8 100644 --- a/EGkPoint3d.h +++ b/EGkPoint3d.h @@ -179,6 +179,18 @@ SqDist( const Point3d& ptP1, const Point3d& ptP2) return ( dX * dX + dY * dY + dZ * dZ) ; } +//---------------------------------------------------------------------------- +// Quadrato della distanza tra due punti nel piano XY +//---------------------------------------------------------------------------- +inline double +SqDistXY( const Point3d& ptP1, const Point3d& ptP2) +{ + double dX = ptP1.x - ptP2.x ; + double dY = ptP1.y - ptP2.y ; + + return ( dX * dX + dY * dY) ; +} + //---------------------------------------------------------------------------- // Distanza tra due punti //---------------------------------------------------------------------------- @@ -199,6 +211,23 @@ Dist( const Point3d& ptP1, const Point3d& ptP2) return sqrt( dX * dX + dY * dY + dZ * dZ) ; } +//---------------------------------------------------------------------------- +// Distanza tra due punti nel piano XY +//---------------------------------------------------------------------------- +inline double +DistXY( const Point3d& ptP1, const Point3d& ptP2) +{ + double dX = ptP1.x - ptP2.x ; + double dY = ptP1.y - ptP2.y ; + + if ( fabs( dY) < EPS_ZERO) + return fabs( dX) ; + if ( fabs( dX) < EPS_ZERO) + return fabs( dY) ; + + return sqrt( dX * dX + dY * dY) ; +} + //---------------------------------------------------------------------------- // Direzione e distanza tra due punti //---------------------------------------------------------------------------- diff --git a/EgkCurve.h b/EgkCurve.h index ead386f..9471192 100644 --- a/EgkCurve.h +++ b/EgkCurve.h @@ -22,7 +22,11 @@ class __declspec( novtable) ICurve : public IGeoObj public : enum Side { FROM_MINUS = -1, // da valori inferiori del parametro FROM_PLUS = 1} ; // da valori superiori del parametro - + enum OffSide { OFF_RIGHT = -1, // offset a destra + OFF_LEFT = 1} ; // offset a sinistra + enum OffType { OFF_FILLET = 0, // si raccordano con arco gli spigoli esterni + OFF_CHAMFER = 1, // si raccordano con smusso gli spigoli esterni + OFF_EXTEND = 2} ; // si prolungano all'intersezione gli spigoli esterni public : virtual bool IsSimple( void) const = 0 ; virtual bool IsClosed( void) const = 0 ; @@ -39,8 +43,10 @@ class __declspec( novtable) ICurve : public IGeoObj 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 Invert( void) = 0 ; + virtual bool IsPointOn( const Point3d& ptP, double dTol = EPS_SMALL) const = 0 ; virtual bool ApproxWithLines( double dLinTol, double dAngTolDeg, PolyLine& PL) const = 0 ; + virtual bool Invert( void) = 0 ; + virtual bool Offset( double dDist, int nSide, int nType = OFF_FILLET) = 0 ; virtual bool TrimStartAtParam( double dUTrim) = 0 ; virtual bool TrimEndAtParam( double dUTrim) = 0 ; virtual bool TrimStartAtLen( double dLenTrim) = 0 ; diff --git a/EgtPointerOwner.h b/EgtPointerOwner.h index b595777..2864cdd 100644 --- a/EgtPointerOwner.h +++ b/EgtPointerOwner.h @@ -20,7 +20,9 @@ class PtrOwner { public : explicit PtrOwner( T* pT) : m_pT( pT) {} - ~PtrOwner( void) { if ( m_pT != nullptr) delete m_pT ; m_pT = nullptr ; } + ~PtrOwner( void) { Reset() ; } + void Set( T* pT) { Reset() ; m_pT = pT ; } + void Reset( void) { if ( m_pT != nullptr) delete m_pT ; m_pT = nullptr ; } T& operator*() const { return *m_pT ; } T* operator->() const { return m_pT ; }