06d5915cd0
- rinominato POCRVVECTOR in ICURVEPOVECTOR - aggiunte raccolte di puntatori a ICurveComposite.
112 lines
6.9 KiB
C++
112 lines
6.9 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2014-2014
|
|
//----------------------------------------------------------------------------
|
|
// File : EgkCurve.h Data : 06.05.14 Versione : 1.5e3
|
|
// Contenuto : Dichiarazione della interfaccia ICurve.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 22.11.13 DS Creazione modulo.
|
|
// 06.05.14 DS Agg. GetMidPoint, GetCenterPoint, GetStartDir, GetEndDir e GetMidDir.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkGeoObj.h"
|
|
#include "/EgtDev/Include/EGkPolyLine.h"
|
|
#include "/EgtDev/Include/EGkPolyArc.h"
|
|
#include "/EgtDev/Include/EGkPlane3d.h"
|
|
#include "/EgtDev/Include/EgtPointerOwner.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
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 PntPos { PP_NULL = 0, // punto non appartenente alla curva
|
|
PP_START = 1, // punto coincidente con l'inizio
|
|
PP_MID = 2, // punto appartenente all'interno della curva
|
|
PP_END = 3} ; // punto coincidente con la fine
|
|
enum ApprLineType { APL_STD = 0, // approssimazione standard
|
|
APL_SPECIAL = 10, // come STD, per composite conserva estremi di curve componenti
|
|
APL_LEFT = 1, // linee sempre a sinistra
|
|
APL_LEFT_CONVEX = 11, // linee sempre a sinistra convesse
|
|
APL_RIGHT = 2, // linee sempre a destra
|
|
APL_RIGHT_CONVEX = 12} ; // linee sempre a destra convesse
|
|
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
|
|
OFF_MEDIA_INTDZ = 4, // su angoli interni con delta Z fa media (in or con prec)
|
|
OFF_FORCE_OPEN = 8, // forza a aperto anche se chiuso (in or ...)
|
|
OFF_NO_VERTICAL = 16} ;// vieta linee perpendicolari al piano di offset (in or ...)
|
|
public : // IGeoObj
|
|
ICurve* Clone( void) const override = 0 ;
|
|
public :
|
|
virtual bool IsSimple( void) const = 0 ;
|
|
virtual bool IsClosed( void) const = 0 ;
|
|
virtual bool IsFlat( Plane3d& plPlane, double dToler = EPS_SMALL) const = 0 ;
|
|
virtual bool GetStartPoint( Point3d& ptStart) const = 0 ;
|
|
virtual bool GetEndPoint( Point3d& ptEnd) const = 0 ;
|
|
virtual bool GetMidPoint( Point3d& ptMid) const = 0 ;
|
|
virtual bool GetCenterPoint( Point3d& ptCen) const = 0 ;
|
|
virtual bool GetCentroid( Point3d& ptCen) const = 0 ;
|
|
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 ;
|
|
virtual bool IsEndParam( double dPar) const = 0 ;
|
|
virtual bool GetLength( double& dLen) const = 0 ;
|
|
virtual bool GetLengthAtParam( double dU, double& dLen) const = 0 ;
|
|
virtual bool GetParamAtLength( double dLen, double& dU) 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 IsPointOn( const Point3d& ptP, double dTol = EPS_SMALL) const = 0 ;
|
|
virtual bool GetParamAtPoint( const Point3d& ptP, double& dPar, double dTol = EPS_SMALL) const = 0 ;
|
|
virtual bool GetLengthAtPoint( const Point3d& ptP, double& dLen, double dTol = EPS_SMALL) const = 0 ;
|
|
virtual bool GetNearestExtremityToPoint( const Point3d& ptP, bool& bStart) const = 0 ;
|
|
virtual bool GetAreaXY( double& dArea) const = 0 ;
|
|
virtual bool GetArea( Plane3d& plPlane, double& dArea) const = 0 ;
|
|
virtual bool ApproxWithLines( double dLinTol, double dAngTolDeg, int nType, PolyLine& PL) const = 0 ;
|
|
virtual bool ApproxWithArcs( double dLinTol, double dAngTolDeg, PolyArc& PA) const = 0 ;
|
|
virtual bool ApproxWithArcsEx( double dLinTol, double dAngTolDeg, double dLinFea, PolyArc& PA) const = 0 ;
|
|
virtual ICurve* CopyParamRange( double dUStart, double dUEnd) const = 0 ;
|
|
virtual bool Invert( void) = 0 ;
|
|
virtual bool SimpleOffset( double dDist, 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 ;
|
|
virtual bool TrimEndAtParam( double dUTrim) = 0 ;
|
|
virtual bool TrimStartEndAtParam( double dUStartTrim, double dUEndTrim) = 0 ;
|
|
virtual bool TrimStartAtLen( double dLenTrim) = 0 ;
|
|
virtual bool TrimEndAtLen( double dLenTrim) = 0 ;
|
|
virtual bool ExtendStartByLen( double dLenExt) = 0 ;
|
|
virtual bool ExtendEndByLen( double dLenExt) = 0 ;
|
|
} ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline const ICurve* GetCurve( const IGeoObj* pGObj)
|
|
{ if ( pGObj == nullptr || ( pGObj->GetType() & GEO_CURVE) == 0)
|
|
return nullptr ;
|
|
return (static_cast<const ICurve*>(pGObj)) ; }
|
|
inline ICurve* GetCurve( IGeoObj* pGObj)
|
|
{ if ( pGObj == nullptr || ( pGObj->GetType() & GEO_CURVE) == 0)
|
|
return nullptr ;
|
|
return (static_cast<ICurve*>(pGObj)) ; }
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Raccolte di puntatori a ICurve
|
|
typedef std::vector<const ICurve*> CICURVEPVECTOR ; // vettore di puntatori a const ICurve
|
|
typedef std::vector<ICurve*> ICURVEPVECTOR ; // vettore di puntatori a ICurve
|
|
typedef std::list<ICurve*> ICURVEPLIST ; // lista di puntatori a ICurve
|
|
typedef std::vector<PtrOwner<ICurve>> ICURVEPOVECTOR ; // vettore di puntatori esclusivi a ICurve
|