//---------------------------------------------------------------------------- // EgalTech 2013-2022 //---------------------------------------------------------------------------- // File : EGkCurveComposite.h Data : 24.03.22 Versione : 2.4c2 // Contenuto : Dichiarazione della interfaccia ICurveComposite. // // // // Modifiche : 22.11.13 DS Creazione modulo. // 21.07.21 LM Aggiunto parametro opzionale a Set/GetCurveTempProp. // 23.01.22 DS Aggiunti metodi IsARectangle e IsATrapezoid. // 24.03.22 DS Aggiunto metodo AddLineTg. // //---------------------------------------------------------------------------- #pragma once #include "/EgtDev/Include/EGkCurve.h" //---------------------------------------------------------------------------- class __declspec( novtable) ICurveComposite : public ICurve { public : // IGeoObj ICurveComposite* Clone( void) const override = 0 ; public : virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ; virtual bool Clear( void) = 0 ; virtual bool AddCurve( const ICurve& cCrv, bool bEndOrStart = true, double dLinTol = EPS_SMALL) = 0 ; virtual bool AddCurve( ICurve* pCrv, bool bEndOrStart = true, double dLinTol = EPS_SMALL) = 0 ; virtual bool Close( void) = 0 ; virtual bool FromSplit( const ICurve& cCrv, int nParts) = 0 ; virtual bool FromPolyLine( const PolyLine& PL) = 0 ; virtual bool FromPolyArc( const PolyArc& PA) = 0 ; virtual bool PolygonCenterCorner( int nSides, const Point3d& ptCen, const Point3d& ptCorner, const Vector3d& vtN) = 0 ; virtual bool PolygonCenterMidSide( int nSides, const Point3d& ptCen, const Point3d& ptMidSide, const Vector3d& vtN) = 0 ; virtual bool PolygonSide( int nSides, const Point3d& ptStart, const Point3d& ptEnd, const Vector3d& vtN) = 0 ; virtual int GetCurveCount( void) const = 0 ; virtual const ICurve* GetCurve( int nCrv) const = 0 ; virtual const ICurve* GetFirstCurve( void) const = 0 ; virtual const ICurve* GetNextCurve( void) const = 0 ; virtual const ICurve* GetLastCurve( void) const = 0 ; virtual const ICurve* GetPrevCurve( void) const = 0 ; virtual bool IsParamAtJoint( double dU) const = 0 ; virtual ICurve* RemoveFirstOrLastCurve( bool bLast = true) = 0 ; virtual bool ChangeStartPoint( double dU) = 0 ; virtual bool AddPoint( const Point3d& ptStart) = 0 ; virtual bool AddLine( const Point3d& ptNew, bool bEndOrStart = true) = 0 ; virtual bool AddLineTg( double dLen, bool bEndOrStart = true) = 0 ; virtual bool AddArc2P( const Point3d& ptOther, const Point3d& ptNew, bool bEndOrStart = true) = 0 ; virtual bool AddArcTg( const Point3d& ptNew, bool bEndOrStart = true) = 0 ; virtual bool AddJoint( double dU) = 0 ; virtual bool ModifyJoint( int nU, const Point3d& ptNewJoint) = 0 ; virtual bool RemoveJoint( int nU) = 0 ; virtual bool MoveCurve( int nCrv, const Vector3d& vtMove) = 0 ; virtual bool ModifyCurveToArc( int nCrv, const Point3d& ptMid) = 0 ; virtual bool ModifyCurveToLine( int nCrv) = 0 ; virtual bool ArcsToBezierCurves( void) = 0 ; virtual bool ArcsBezierCurvesToArcsPerpExtr( double dLinTol, double dAngTolDeg) = 0 ; virtual bool MergeCurves( double dLinTol, double dAngTolDeg, bool bStartEnd = true, bool bNeedSameProp = false) = 0 ; virtual bool RemoveUndercutOnY( double dLinTol, double dAngTolDeg) = 0 ; virtual bool IsAPoint( void) const = 0 ; virtual bool IsALine( double dLinTol, Point3d& ptStart, Point3d& ptEnd) const = 0 ; virtual bool IsACircle( double dLinTol, Point3d& ptCen, Vector3d& vtN, double& dRad, bool& bCCW) const = 0 ; virtual bool IsARectangle( double dLinTol, Point3d& ptP, Vector3d& vtL1, Vector3d& vtL2) const = 0 ; virtual bool IsATrapezoid( double dLinTol, Point3d& ptP, Vector3d& vtB1, Vector3d& vtL1, Vector3d& vtB2) const = 0 ; virtual bool SetCurveTempProp( int nCrv, int nProp, int nPropInd = 0) = 0 ; virtual bool GetCurveTempProp( int nCrv, int& nProp, int nPropInd = 0) const = 0 ; } ; //----------------------------------------------------------------------------- inline ICurveComposite* CreateCurveComposite( void) { return (static_cast( CreateGeoObj( CRV_COMPO))) ; } inline ICurveComposite* CloneCurveComposite( const IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != CRV_COMPO) return nullptr ; return (static_cast(pGObj->Clone())) ; } inline const ICurveComposite* GetCurveComposite( const IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != CRV_COMPO) return nullptr ; return (static_cast(pGObj)) ; } inline ICurveComposite* GetCurveComposite( IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != CRV_COMPO) return nullptr ; return (static_cast(pGObj)) ; } //---------------------------------------------------------------------------- // Raccolte di puntatori a ICurveComposite typedef std::vector CICRVCOMPOVECTOR ; // vettore di puntatori a const ICurveComposite typedef std::vector ICRVCOMPOPVECTOR ; // vettore di puntatori a ICurveComposite typedef std::list ICRVCOMPOPLIST ; // lista di puntatori a ICurveComposite typedef std::vector> ICRVCOMPOPOVECTOR ; // vettore di puntatori esclusivi a ICurveComposite