diff --git a/EGkPolyLine.h b/EGkPolyLine.h index ce31ebd..1718015 100644 --- a/EGkPolyLine.h +++ b/EGkPolyLine.h @@ -56,26 +56,31 @@ class PolyLine { return m_nRejected ; } EGK_EXPORT int GetPointNbr( void) const { return m_nCount ; } - EGK_EXPORT bool GetFirstUPoint( double* pdPar, Point3d* pptP) const ; + EGK_EXPORT bool GetFirstUPoint( double* pdPar, Point3d* pptP, bool bNotLast = false) const ; EGK_EXPORT bool GetNextUPoint( double* pdPar, Point3d* pptP, bool bNotLast = false) const ; - EGK_EXPORT bool GetFirstU( double& dPar) const - { return GetFirstUPoint( &dPar, nullptr) ; } + EGK_EXPORT bool GetFirstU( double& dPar, bool bNotLast = false) const + { return GetFirstUPoint( &dPar, nullptr, bNotLast) ; } EGK_EXPORT bool GetNextU( double& dPar, bool bNotLast = false) const { return GetNextUPoint( &dPar, nullptr, bNotLast) ; } - EGK_EXPORT bool GetFirstPoint( Point3d& ptP) const - { return GetFirstUPoint( nullptr, &ptP) ; } + EGK_EXPORT bool GetFirstPoint( Point3d& ptP, bool bNotLast = false) const + { return GetFirstUPoint( nullptr, &ptP, bNotLast) ; } EGK_EXPORT bool GetNextPoint( Point3d& ptP, bool bNotLast = false) const { return GetNextUPoint( nullptr, &ptP, bNotLast) ; } - EGK_EXPORT bool GetLastUPoint( double* pdPar, Point3d* pptP) const ; + EGK_EXPORT bool GetLastUPoint( double* pdPar, Point3d* pptP, bool bNotFirst = false) const ; EGK_EXPORT bool GetPrevUPoint( double* pdPar, Point3d* pptP, bool bNotFirst = false) const ; - EGK_EXPORT bool GetLastU( double& dPar) const - { return GetLastUPoint( &dPar, nullptr) ; } + EGK_EXPORT bool GetLastU( double& dPar, bool bNotFirst = false) const + { return GetLastUPoint( &dPar, nullptr, bNotFirst) ; } EGK_EXPORT bool GetPrevU( double& dPar, bool bNotFirst = false) const { return GetPrevUPoint( &dPar, nullptr, bNotFirst) ; } - EGK_EXPORT bool GetLastPoint( Point3d& ptP) const - { return GetLastUPoint( nullptr, &ptP) ; } + EGK_EXPORT bool GetLastPoint( Point3d& ptP, bool bNotFirst = false) const + { return GetLastUPoint( nullptr, &ptP, bNotFirst) ; } EGK_EXPORT bool GetPrevPoint( Point3d& ptP, bool bNotFirst = false) const { return GetPrevUPoint( nullptr, &ptP, bNotFirst) ; } + EGK_EXPORT bool GetCurrUPoint( double* pdPar, Point3d* pptP) const ; + EGK_EXPORT bool GetCurrU( double& dPar) const + { return GetCurrUPoint( &dPar, nullptr) ; } + EGK_EXPORT bool GetCurrPoint( Point3d& ptP) const + { return GetCurrUPoint( nullptr, &ptP) ; } EGK_EXPORT int GetLineNbr( void) const { return ( m_nCount > 1 ? ( m_nCount - 1) : 0) ; } EGK_EXPORT bool GetFirstULine( double* pdIni, Point3d* pptIni, double* pdFin, Point3d* pptFin) const ; diff --git a/EGkVector3d.h b/EGkVector3d.h index ae4f46f..8752c97 100644 --- a/EGkVector3d.h +++ b/EGkVector3d.h @@ -298,7 +298,7 @@ AreOppositeVectorApprox( const Vector3d& vtV1, const Vector3d& vtV2) } //---------------------------------------------------------------------------- -//! Verifica se due vettori sono esattamente coincidenti (Zero error -> Exact) +//! Verifica se due vettori sono esattamente opposti (Zero error -> Exact) //---------------------------------------------------------------------------- inline bool AreOppositeVectorExact( const Vector3d& vtV1, const Vector3d& vtV2) @@ -306,6 +306,24 @@ AreOppositeVectorExact( const Vector3d& vtV1, const Vector3d& vtV2) return ( ( vtV1 + vtV2).IsZero()) ; } +//---------------------------------------------------------------------------- +//! Verifica se due vettori sono quasi coincidenti o opposti (Zero error -> Exact) +//---------------------------------------------------------------------------- +inline bool +AreSameOrOppositeVectorApprox( const Vector3d& vtV1, const Vector3d& vtV2) +{ + return ( ( vtV1 - vtV2).IsSmall() || ( vtV1 + vtV2).IsSmall()) ; +} + +//---------------------------------------------------------------------------- +//! Verifica se due vettori sono esattamente coincidenti o opposti (Zero error -> Exact) +//---------------------------------------------------------------------------- +inline bool +AreSameOrOppositeVectorExact( const Vector3d& vtV1, const Vector3d& vtV2) +{ + return ( ( vtV1 - vtV2).IsZero() || ( vtV1 + vtV2).IsZero()) ; +} + //---------------------------------------------------------------------------- //! Verifica se due versori sono ortogonali (Small error -> Approx) //---------------------------------------------------------------------------- diff --git a/EgkCurve.h b/EgkCurve.h index 2f64ca6..b9e8bbb 100644 --- a/EgkCurve.h +++ b/EgkCurve.h @@ -46,6 +46,8 @@ class __declspec( novtable) ICurve : public IGeoObj virtual bool GetStartDir( Vector3d& vtDir) const = 0 ; virtual bool GetEndDir( Vector3d& vtDir) const = 0 ; virtual bool GetMidDir( Vector3d& vtDir) const = 0 ; + virtual bool GetExtrusion( Vector3d& vtExtr) const = 0 ; + virtual bool GetThickness( double& dThick) const = 0 ; virtual bool GetDomain( double& dStart, double& dEnd) const = 0 ; virtual bool IsValidParam( double dPar, Side nSide) const = 0 ; virtual bool IsStartParam( double dPar) const = 0 ; @@ -63,6 +65,8 @@ class __declspec( novtable) ICurve : public IGeoObj virtual ICurve* CopyParamRange( double dUStart, double dUEnd) const = 0 ; virtual bool Invert( void) = 0 ; virtual bool Offset( double dDist, int nSide, int nType = OFF_FILLET) = 0 ; + virtual bool SetExtrusion( const Vector3d& vtExtr) = 0 ; + virtual bool SetThickness( double dThick) = 0 ; virtual bool ModifyStart( const Point3d& ptNewStart) = 0 ; virtual bool ModifyEnd( const Point3d& ptNewEnd) = 0 ; virtual bool TrimStartAtParam( double dUTrim) = 0 ;