Files
Dario Sassi d580b3dacb Include :
- aggiornamento prototipi.
2025-11-06 18:47:08 +01:00

113 lines
7.1 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_SPECIAL_INT = 20, // come SPECIAL, per composite anche almeno un interno di componenti non rettilinei
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, bool bUseExtrusion = true, 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, double dMaxAngExt = ANG_RIGHT) = 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