#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 &guids); // 收集所有单体异构 void GetDTYGs(std::vector &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 m_arX3DPartPtrs;//单体异构 //关联的 AecDbX3dPartEntity 对象 AcDbObjectIdArray m_arAssocPartEntIds;//外部关联 private: mutable AcDbVoidPtrArray m_arDTYG2DBufPtrs;//单体异构 临时缓存 俯视图 };