143 lines
4.7 KiB
C++
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;//单体异构 临时缓存 俯视图
|
|
};
|