#pragma once #include "aecdbportroom.h" #include "AecDbObjXDataMap.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif class AecDbX3dPart; class DLLIMPEXP AecDbXXXDoghouse : public AecDbPortRoom { public: ACRX_DECLARE_MEMBERS(AecDbXXXDoghouse); protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbXXXDoghouse(void); virtual ~AecDbXXXDoghouse(void); public: // 0 kBoolUnite 2 kBoolSubtract 3 free void AddX3dPart(AecDbX3dPart* pPart,int nBoolOper = 0); AecDbX3dPart* GetX3dPart(LPCTSTR pszID) const; BOOL GetX3dPartNext(int& nPos,AecDbX3dPart*& pGroupNext) const; int GetX3dPartCount() const; bool RemoveX3dPart(int nIndex); bool RemoveX3dPart(LPCTSTR pszID); void RemoveAllX3dPart(bool bDelete = true); bool SaveAs(CFile* pFile) const; bool ReadFrom(LPCTSTR pszFile); bool ReadFrom(CFile* pFile); bool MergeReadFrom(LPCTSTR pszFile); bool UpdateDrawGroupAxis(LPCTSTR pszGUID); bool HidePart(LPCTSTR pszGUID,bool bHide); bool HideOrShowPart(LPCTSTR pszGUID); bool PeelOffTheSkin(LPCTSTR pszGUID,int nPos); //单元变换 void AddMove(const AcGeVector3d& vtMove,LPCTSTR pszGUID); void AddMove(const AcGeMatrix3d& xMirror,LPCTSTR pszGUID); void ResetMove(LPCTSTR pszGUID); //旋转 void AddRotate(int nAxisIndex,double dRot,LPCTSTR pszGUID); void ResetRotate(int nAxisIndex,LPCTSTR pszGUID); AcDb3dSolid* CreateDraw3dSolid() const; bool ReCreateDraw3d(); //整体变换 void SetToTranslation(const AcGeVector3d& vtMove); void setToRotation(const AcGeMatrix3d& xformR); //改变位置和方向 void Transformby(const AcGePoint3d& ptPos,const AcGeVector3d& vtDir); //仅仅改变位置 void Transformby(const AcGeVector3d &vtDir); //改变位置和方向 void Transformby(const AcGeVector3d& vt,const AcGeVector3d &vtDir); // 沿管廊方向移动 vtMove 移动方向,vtEw 管廊方向 void TransformByEwDir(const AcGeVector3d &vtMove, const AcGeVector3d &vtEw); //剖切提取 virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo,AcDbVoidPtrArray& arRegionPtrs) const; virtual Adesk::Boolean GetDraw2d(AcDbVoidPtrArray& arEntPtrs,int nSectionDrawStyle = 0) const; virtual Adesk::Boolean GetDraw3d(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo = false) const; virtual int GetKernelSolids(AcDbVoidPtrArray& arSolidPtrs) const; // 专业数据 virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); virtual const AecDbObjXDataMap* GetSpecialtyData() const; virtual bool UpdateDraw( ) const; virtual bool UpdateDraw( ) ; virtual void MakeVerSection2d(AcDb3dSolid* pSolid,int nSectionDrawStyle = 0) const; virtual void MakeVerSection2d(AcDb3dSolid* pSolid,const AcGePoint3d& ptCen,int nSectionDrawStyle = 0) const; virtual void MakeHorSection2d(AcDb3dSolid* pSolid) const; virtual void AddToSection2dDraw(AcDbEntity* pComEnt,int nSectionDrawtyle) const; virtual bool IsXXXDoghouse() const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler* pFiler); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const; virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler* pFiler); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) 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; 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); virtual Acad::ErrorStatus subGetGeomExtents(AcDbExtents& extents) const; virtual Acad::ErrorStatus subIntersectWith( const AcDbEntity* pEnt, AcDb::Intersect intType, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const; virtual Acad::ErrorStatus subIntersectWith( const AcDbEntity* pEnt, AcDb::Intersect intType, const AcGePlane& projPlane, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const; void DrawActiveXYZArrow(AcGiDraw &dc) const; bool HasGroupItem(LPCTSTR pszGUID); Acad::ErrorStatus mergedwgInFields (AcDbDwgFiler* pFiler); protected: //序列化部分 Adesk::Int32 m_nActivePart; //活动的part AcArray m_arX3DPartPtrs; //虚列化 AecDbObjXDataMap m_mapXData; //专业数据 AcGeVector3d m_vtMove; //整体移动 AcGeMatrix3d m_xformR; //整体旋转变换,非XYZ轴旋转 protected: mutable AcDb3dSolid* m_pSolidDraw; //临时绘制solid元 AecGripData* m_pGripAppData; //夹点集合 };