Files
envi-code/SourceCode/Code2026/inc/AecDbCurveBase.h
T
gjm c84bc78869 重构底层
重构AecDbEntityBase,AecDbCurveBase
2026-10-19 09:19:05 +08:00

209 lines
8.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
#include "dbcurve.h"
#include "AcGiDraw.h"
#include "AecSubDef.h"
#include "shJson.h"
#include "EarThwormDef.h"
#include "AecDbEntityCommon.h"
#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;
class AECDLLIMPEXP AecDbCurveBase : public AcDbCurve, public AecDbEntityCommon
{
public:
ACRX_DECLARE_MEMBERS(AecDbCurveBase);
public:
virtual AcDbEntity *GetMe() { return this; }
virtual const AcDbEntity *GetMe() const { return this; }
virtual bool IsThisMe(const AcDbEntity *pEnt) const { return AecDbCurveBase::cast(pEnt) != NULL; }
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,
AcDb::Intersect intType,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const;
virtual Acad::ErrorStatus subIntersectWith( const AcDbEntity* ent,
AcDb::Intersect intType,
const AcGePlane& projPlane,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const;
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;
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:
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;
//返回原生Curve,不可以删除
virtual AcDbCurve* GetNativeCurve() const;
public:
// 曲线族特有:绘制时按宿主图层/颜色设置缓存实体(Common 里声明为 virtual)
virtual bool Draw2DBuffers(AcGiDraw &dc)const;
};