#pragma once #include "AecDbEntityBase.h" #include "AecDbObjXDataMap.h" #include "AecMInterfaces.h" #include "AecComplexCurveDraw.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif class AcDbX3dSolid; class AecDbX3dPart; class DLLIMPEXP AecDbX3dPartEntity : public AecDbEntityBase, public AecMInterfaces { public: ACRX_DECLARE_MEMBERS(AecDbX3dPartEntity); protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbX3dPartEntity(void); ~AecDbX3dPartEntity(void); //添加单元 void AddX3dSolid(AcDbX3dSolid* pXSolid,AcDb::BoolOperType bType = AcDb::kBoolUnite,bool bSubtractForOwner = false); void RemoveAt(int nIndex,AcDb::BoolOperType bType = AcDb::kBoolUnite,bool bSubtractForOwner = false); void RemoveAll3dSolidRec(); bool Create(); //单元获取 int GetX3dSolidCount(AcDb::BoolOperType bType = AcDb::kBoolUnite,bool bSubtractForOwner = false) const; AcDbX3dSolid* GetX3dSolid(int nIndex,AcDb::BoolOperType bType = AcDb::kBoolUnite,bool bSubtractForOwner = false ) const; void SetOrgPoint(const AcGePoint3d& ptOrg); AcGePoint3d GetOrgPoint(bool bGetTrans = false) const; void SetName(LPCTSTR pszName); CString GetName() const; LPCTSTR GetGUID() const; //总安装位移,安装位置 void AddMove(const AcGeVector3d& vtMove); AcGeVector3d GetMove() const; void ResetMove(); Acad::ErrorStatus SetLabel(const TCHAR *szLab); CString GetLabel() const; void ResetLablePoint(); bool SetAxis(int nIndex, const AcGeVector3d& vtAxis); bool GetAxis(int nIndex, AcGeVector3d& vtAxis) const; void AddRotate(int nAxis,double dRotateBy); double GetRotate(int nAxis) const; void ResetRotation(int nAxis); //创建显示3dSolid AcDb3dSolid* CreateDraw3dSolid() const; // 提取为宿主减去的solid bool GetForHouseSubtract(AcDbVoidPtrArray& arSolidPtrs) const; //专业数据 和绘制设置 virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); virtual const AecDbObjXDataMap* GetSpecialtyData() const; virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const; virtual void subList() const; virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subGetTransformedCopy(const AcGeMatrix3d& xform,AcDbEntity*& ent) const; virtual Acad::ErrorStatus subWblockClone(AcRxObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary = true) const; #if ARX>16 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 subGetStretchPoints(AcGePoint3dArray& stretchPoints) const; virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset); virtual void GetGripText(int nPos, CString& sText); 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 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; virtual Acad::ErrorStatus subErase(Adesk::Boolean erasing); virtual Acad::ErrorStatus subDeepClone(AcDbObject *pOwnerObject, AcDbObject *&pClonedObject, AcDbIdMapping &idMap, Adesk::Boolean isPrimary = Adesk::kTrue) const; #endif 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 void AssertWriteEnabled(Adesk::Boolean autoUndo = true, Adesk::Boolean recordModified = true ); //剖切提取 virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const; virtual int ComparedTo(AecDbEntityBase* pCurOther) const; virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const; virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const; virtual bool ByJson(const SHJson::WValue &v); //土建接口 MINTERFACES_METHODS virtual bool GetBimInfoTip(CString& sInfoTip) const; //应用接口 //盆板添加异形偏心井结构 bool SetAsWell(LPCTSTR pszPoint2dsTop,LPCTSTR pszPoint2dsBom,double dH,double dThick,double dBomThick,double dElBom,bool bHasHole = false); //盆板添加波浪井拉伸结构 bool SetAsWell(LPCTSTR pszPoint2dsSec,double dExL,const AcGeVector3d& vtDir,bool bHasHole = false); //盆板添加圆台井结构 bool SetAsWell(const AcGePoint3d& ptCen,double dR,double dr,double dH,double dt,double dBomt,const AcGeVector2d& vtOffset,bool bHasHole = false); //盆板添加方锥井底结构 bool SetAsWell(const AcGePoint3d& ptCen,double dL,double dW,double dL1,double dW1,double dH,double dt,double dBomThick,const AcGeVector2d& vtOffset,bool bHasHole = false); //盆板添加上方下圆结构 bool SetAsWell(const AcGePoint3d& ptCen,double dL,double dW,double dr,double dH,double dt,double dBomT,double dXOffset,bool bHasHole = false); //集水坑井结构 bool SetAsWell(const AcGePoint3d& ptCen,double dL,double dW,double dH,float dSlabThick,double dBomThick,double dAng,bool bHasHole = false); //在盆板开洞矩形洞,原始定义位置 bool SetAsHole(const AcGePoint3d& ptCen,double dL,double dW,double dH,const AcGeVector3d& vtDir,BOOL bHasNozz = FALSE); //盆板圆形洞口,原始定义位置 bool SetAsHole(const AcGePoint3d& ptCen,double dRad,double dH,const AcGeVector3d& vtDir,BOOL bHasNozz = FALSE); //盆板异型洞,原始定义位置 bool SetAsHole(const AcGePoint3d& ptCen,LPCTSTR pszPoint2dsTop,double dH,const AcGeVector3d& vtDir); //设置为管子 bool SetAsPipe(const AcGePoint3d& ptCen,int nShape,double dH,double dW,double dT,double dL,BOOL bLRExt,double dEx1,double dEx2,const AcGeVector3d& vtDir); bool SetAsPipe(const AcGePoint3d &ptCen, int nShape, double dH, double dW, double dT, double dL, BOOL bLRExt, double dEx1, double dEx2, const AcGeVector3d &vtDir, const AcGeVector3d &vtWall); public: Acad::ErrorStatus SubAddDimPoints(AcDbGripDataPtrArray& grips,const AcGeVector3d& curViewDir) const; protected: Acad::ErrorStatus AddDimPoints(AcDbGripDataPtrArray& grips,const AcGeVector3d& curViewDir, const AcGePoint3d& ptSta,const AcGePoint3d& ptEnd, const AcGePoint3d& ptMid,int nDimType,double dVal = -1.0,double dt = 0.0) const; public: void SetDrawable2d(const AcDbPolyline* pPl); void SetDrawable2d(const AcGePoint3d& ptCen,double dR,const AcGeVector3d& vtZ = AcGeVector3d::kZAxis); void SetDrawable2d(const AcGePoint3d& pt1,const AcGePoint3d& pt2, BOOL bDashed = FALSE); void SetDrawable2d(const AcGePoint3d& ptCen,double dR,double dL,const AcGeVector3d& vtDir); void SetDrawable2d(const AcGePoint3d &ptCen, double dR, double dL, const AcGeVector3d &vtDir, const AcGeVector3d &vtWall); void SetDrawable2d(AcGePoint3d *pptGe, int nCount, Adesk::Int32 nGsMark); Acad::ErrorStatus DrawLabel(AcGiDraw &dc,LPCTSTR pszLab) const; Acad::ErrorStatus DrawSymbol2d(AcGiDraw &dc, AcDbVoidPtrArray& arBuffer2d) const; Acad::ErrorStatus HoleAndPipeExtend(double dThickAdd,const AcGeVector3d& vtAdd); Acad::ErrorStatus AdjustHoleAndPipe(double dThickOld,double dThickAdd,int nDir = 0); Acad::ErrorStatus AssocReCreateDraw(); virtual bool GetPositionGrip(int nIndex, AecGripData *&pGrip) const; virtual void PreprocessForHlr(const AcGePoint3d &ptPlnO , const AcGeVector3d &vtPlnN , AcArray &ar) const; virtual void ProcessHlrResult(const AcArray &ar , const std::map> &preAr , AcArray &output) const; protected: //BIM数据 AecDbX3dPart* m_pPart; //3D本体 //2D AecComplexCurveDraw m_drawable2d; //2D //不序列化 protected: AecGripData* m_pGripAppData; //夹点 };