Files
envi-code/SourceCode/Code2026/inc/AecDbCurveBase.h
T

208 lines
8.2 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
#pragma once
2026-09-28 15:28:50 +08:00
#include "dbcurve.h"
#include "AcGiDraw.h"
#include "AecSubDef.h"
#include "shJson.h"
#include "EarThwormDef.h"
2026-10-19 09:19:05 +08:00
#include "AecDbEntityCommon.h"
2026-09-28 15:28:50 +08:00
#pragma warning(disable: 4275 4251)
#ifdef AECRXBASE_EXPORT
#define AECDLLIMPEXP __declspec(dllexport)
#else
#define AECDLLIMPEXP __declspec(dllimport)
#endif
#if ARX > 25
#include "AecDbObjXDataMap.h"
#else
class AecDbObjXDataMap;
#endif
class AcGiViewDraw;
class AcGiExplodeDraw;
2026-10-19 09:19:05 +08:00
class AECDLLIMPEXP AecDbCurveBase : public AcDbCurve, public AecDbEntityCommon
2026-09-28 15:28:50 +08:00
{
public:
2026-10-19 09:19:05 +08:00
ACRX_DECLARE_MEMBERS(AecDbCurveBase);
2026-09-28 15:28:50 +08:00
public:
2026-10-19 09:19:05 +08:00
virtual AcDbEntity *GetMe() { return this; }
virtual const AcDbEntity *GetMe() const { return this; }
virtual bool IsThisMe(const AcDbEntity *pEnt) const { return AecDbCurveBase::cast(pEnt) != NULL; }
2026-09-28 15:28:50 +08:00
protected:
AecDbCurveBase(void);
virtual ~AecDbCurveBase(void);
public:
//AcDbEntity
virtual Adesk::Boolean isPlanar () const;
virtual Acad::ErrorStatus getPlane (AcGePlane&, AcDb::Planarity&) const;
virtual void getEcs (AcGeMatrix3d& retVal) const;
virtual Adesk::UInt32 subViewportDrawLogicalFlags(AcGiViewportDraw * vd);
virtual Adesk::UInt32 subSetAttributes(AcGiDrawableTraits * traits);
virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *pWd);
virtual void subViewportDraw(AcGiViewportDraw* pMode);
virtual void saveAs(AcGiWorldDraw *pWd,AcDb::SaveType saveType);
virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const;
virtual Acad::ErrorStatus subGetGeomExtents(AcDbExtents& extents) const;
virtual void subList() const;
virtual Acad::ErrorStatus setColorIndex(Adesk::UInt16 color,Adesk::Boolean doSubents = true);
virtual Acad::ErrorStatus subIntersectWith( const AcDbEntity* ent,
2026-10-19 09:19:05 +08:00
AcDb::Intersect intType,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const;
2026-09-28 15:28:50 +08:00
virtual Acad::ErrorStatus subIntersectWith( const AcDbEntity* ent,
2026-10-19 09:19:05 +08:00
AcDb::Intersect intType,
const AcGePlane& projPlane,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const;
2026-09-28 15:28:50 +08:00
virtual Acad::ErrorStatus subSetPropertiesFrom( const AcDbEntity* pEntity, Adesk::Boolean doSubents = Adesk::kTrue);
#if (ARX > 15)
virtual Acad::ErrorStatus subGetOsnapPoints( AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subGetOsnapPoints( AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds,
const AcGeMatrix3d& insertionMat) const;
#endif
#if ARX>15
virtual void subGripStatus(const AcDb::GripStat status);
virtual Acad::ErrorStatus subGetGripPoints ( AcDbGripDataPtrArray& grips,
const double curViewUnitSize,
const int gripSize,
const AcGeVector3d& curViewDir,
const int bitflags) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData,const AcGeVector3d& offset,const int bitflags);
#endif
virtual Acad::ErrorStatus subGetGripPoints (AcGePoint3dArray& gripPoints,AcDbIntArray& osnapModes,AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const;
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
virtual Acad::ErrorStatus subGetTransformedCopy(const AcGeMatrix3d& xform,AcDbEntity*& ent) const;
//AcDbCurve
virtual Adesk::Boolean isClosed () const;
virtual Adesk::Boolean isPeriodic () const;
virtual Acad::ErrorStatus getStartParam (double&) const;
virtual Acad::ErrorStatus getEndParam (double&) const;
virtual Acad::ErrorStatus getStartPoint (AcGePoint3d&) const;
virtual Acad::ErrorStatus getEndPoint (AcGePoint3d&) const;
virtual Acad::ErrorStatus getPointAtParam (double, AcGePoint3d&) const;
virtual Acad::ErrorStatus getParamAtPoint (const AcGePoint3d&, double&)const;
virtual Acad::ErrorStatus getDistAtParam (double param, double& dist) const;
virtual Acad::ErrorStatus getParamAtDist (double dist, double& param) const;
virtual Acad::ErrorStatus getDistAtPoint (const AcGePoint3d&, double&)const;
virtual Acad::ErrorStatus getPointAtDist (double, AcGePoint3d&) const;
virtual Acad::ErrorStatus getFirstDeriv (double param,AcGeVector3d& firstDeriv) const;
virtual Acad::ErrorStatus getFirstDeriv (const AcGePoint3d&,AcGeVector3d& firstDeriv) const;
virtual Acad::ErrorStatus getSecondDeriv (double param,AcGeVector3d& secDeriv) const;
virtual Acad::ErrorStatus getSecondDeriv (const AcGePoint3d&,AcGeVector3d& secDeriv) const;
virtual Acad::ErrorStatus getClosestPointTo(const AcGePoint3d& givenPnt,AcGePoint3d& pointOnCurve,Adesk::Boolean extend = Adesk::kFalse) const;
virtual Acad::ErrorStatus getClosestPointTo(const AcGePoint3d& givenPnt,const AcGeVector3d& direction,AcGePoint3d& pointOnCurve,Adesk::Boolean extend = Adesk::kFalse) const;
virtual Acad::ErrorStatus getSplitCurves (const AcGeDoubleArray& params, AcDbVoidPtrArray& curveSegments) const;
virtual Acad::ErrorStatus getSplitCurves (const AcGePoint3dArray& points, AcDbVoidPtrArray& curveSegments) const;
virtual Acad::ErrorStatus extend (double newParam);
virtual Acad::ErrorStatus extend (Adesk::Boolean extendStart, const AcGePoint3d& toPoint);
virtual Acad::ErrorStatus getSpline (AcDbSpline*& spline) const;
virtual Acad::ErrorStatus getArea (double&) const;
virtual Acad::ErrorStatus getOffsetCurves (double offsetDist, AcDbVoidPtrArray& offsetCurves) const;
virtual Acad::ErrorStatus getProjectedCurve(const AcGePlane&, const AcGeVector3d& projDir, AcDbCurve*& projCrv) const;
virtual Acad::ErrorStatus getOrthoProjectedCurve(const AcGePlane&, AcDbCurve*& projCrv) const;
virtual Acad::ErrorStatus getOffsetCurvesGivenPlaneNormal(const AcGeVector3d& normal,double offsetDist,AcDbVoidPtrArray& offsetCurves) const;
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*);
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const;
virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*);
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const;
virtual Acad::ErrorStatus subDeepClone( AcDbObject* pOwnerObject,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary = Adesk::kTrue) const;
virtual Acad::ErrorStatus subWblockClone( AcRxObject* pOwnerObject,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary = Adesk::kTrue) const;
2026-10-19 09:19:05 +08:00
protected:
virtual Acad::ErrorStatus CallAcDbWblockClone(AcRxObject* pOwnerObject,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;
// 桥:回到具体实体自己的 subWorldDraw(子类可能重写,saveAs 的代理分支要用)。
// subWorldDraw 在 AcGiDrawable 里是 protected,本类取不到,由两个根转调。
virtual Adesk::Boolean CallWorldDraw(AcGiWorldDraw* pWd);
public:
2026-09-28 15:28:50 +08:00
virtual Acad::ErrorStatus setTransparency(const AcCmTransparency &trans,
Adesk::Boolean doSubents = true);
public:
virtual int ComparedTo(AecDbCurveBase* pCurOther) const;
double GetArea() const;
protected:
virtual Acad::ErrorStatus SetBaseCurve(const AcDbCurve* pDbCurve);
virtual AcDbCurve* GetBaseCurve(bool bOrthoProjectToXY = false) const;
2026-10-04 00:04:20 +08:00
//返回原生Curve,不可以删除
2026-09-28 15:28:50 +08:00
virtual AcDbCurve* GetNativeCurve() const;
public:
2026-10-19 09:19:05 +08:00
// 曲线族特有:绘制时按宿主图层/颜色设置缓存实体(Common 里声明为 virtual)
virtual bool Draw2DBuffers(AcGiDraw &dc)const;
2026-09-28 15:28:50 +08:00
};