Files
envi-code/SourceCode/Code2026/inc/AecDbBDPipeBase.h
T
2026-09-28 15:28:50 +08:00

143 lines
4.7 KiB
C++

#pragma once
#include "aecdbewpipebase.h"
#ifdef EARTHWORM_EXPORT
#define DLLIMPEXP __declspec(dllexport)
#else
#define DLLIMPEXP __declspec(dllimport)
#endif
//需要异构的类的基类
class AecDbX3dPart;
class DLLIMPEXP AecDbBDPipeBase : public AecDbEwPipeBase
{
public:
ACRX_DECLARE_MEMBERS(AecDbBDPipeBase);
protected:
static Adesk::UInt32 kCurrentVersionNumber;
public:
AecDbBDPipeBase(void);
virtual ~AecDbBDPipeBase(void);
//总安装角度,位置
void SetPosition(const AcGePoint3d&);
AcGePoint3d GetPosition() const;
void SetRotation(int nAxisIndex,double dRotate);
double GetRotation(int nAxisIndex) const;
void ResetRotation(int nAxisIndex = -1);
//单体异构
void AddX3dPart(AecDbX3dPart* pPart,int nBoolOper = AcDb::kBoolUnite);
AecDbX3dPart* GetX3dPart(LPCTSTR pszID) const;
//内部部件
int GetX3dPartCount() const;
AecDbX3dPart* GetX3dPart(int nIndex) const;
//移除部件
bool RemoveX3dPart(int nIndex);
bool RemoveX3dPart(LPCTSTR pszID);
void RemoveAllX3dPart(bool bDelete = true);
//部件安装位移,安装位置
void AddMove(LPCTSTR pszID, AcGeVector3d& vtMove);
void ResetMove(LPCTSTR pszID);
void SetRotation(LPCTSTR pszID,int nAxis,double dRotateByX);
void ResetRotation(LPCTSTR pszID,int nAxis);
//关联部件
bool AppendAssocPart(const AcDbObjectId& id);
bool RemoveAssocPart(int nIndex);
bool RemoveAssocPart(const AcDbObjectId& id);
int GetAssocPartCount() const;
bool GetAssocPart(int nIndex,AcDbObjectId& id) const;
bool GetAssocPartIds(AcDbObjectIdArray& arIds) const;
void DrawDTYG2D(AcGiDraw &dc) const;
Acad::ErrorStatus HoleAndPipeExtend(double dThickAdd,const AcGeVector3d& vtAdd);
virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc);
virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;
Acad::ErrorStatus _dwgInFields_for_DBWeir(AcDbDwgFiler* pFiler);
Acad::ErrorStatus _dwgOutFields_for_DBWeir(AcDbDwgFiler* pFiler) const;
virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler);
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const;
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
virtual void AssertWriteEnabled(Adesk::Boolean autoUndo = true, Adesk::Boolean recordModified = true );
virtual Acad::ErrorStatus subErase(Adesk::Boolean erasing);
virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
// Notification for persistent reactors.
virtual void erased(const AcDbObject* dbObj,Adesk::Boolean pErasing = true);
virtual void modified(const AcDbObject* dbObj);
virtual void modifyUndone(const AcDbObject* dbObj);
virtual void subList() const;
//获取二维视图显示的图形
virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const;
virtual AcDb3dSolid* GetDraw3dSolid(bool bAttachBimInf = false, int nColor = 0,bool bSubtractHole = true) const;
virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const;
virtual bool ByJson(const SHJson::WValue &v);
void RemovePartForSlice();
virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const;
protected:
//传入的pSolid 和part合并处理
AcDb3dSolid* GetBooleanPart3D(AcDb3dSolid* pSolid) const;
Acad::ErrorStatus BoolSubtractAssoc(AcDb3dSolid* pSolidDraw) const;
public: //外部修改板时需要调用
Acad::ErrorStatus TransformAssocPartEnt(const AcGeMatrix3d& xform);
bool TransformDTYGPartEnt(const AcGeMatrix3d& xform);
protected:
// 收集 单体异构 只要名字中出现 pszName
void GetDTYGsByName(LPCTSTR pszName, std::vector<CString> &guids);
// 收集所有单体异构
void GetDTYGs(std::vector<AecDbX3dPart*> &xparts);
virtual Acad::ErrorStatus GetAllHolesSolid(AcDbVoidPtrArray& arSolidPtrs,AcDbVoidPtrArray& arCenLnPtrs,const AcGeMatrix3d& xform, AcGeBoundBlock3d *pExt3d = NULL) const;
void AddTPipeDim(const AcGeVector3d& vtNorm,AcDbLine* pLnCen,AecDbObjXDataMap* pxDataT,AcDbVoidPtrArray& arEntPtrs,const AcGeMatrix3d& xform) const;
protected:
Adesk::Int32 m_nActivePart; //活动的part
double m_dRotate[3]; //X,Y,Z 轴旋转
AcArray<AecDbX3dPart*> m_arX3DPartPtrs;//单体异构
//关联的 AecDbX3dPartEntity 对象
AcDbObjectIdArray m_arAssocPartEntIds;//外部关联
private:
mutable AcDbVoidPtrArray m_arDTYG2DBufPtrs;//单体异构 临时缓存 俯视图
};