#pragma once #include "AecDbBDPipeBase.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif #ifndef MAX_FENCE_LEN #define MAX_FENCE_LEN 2048 #endif //板的REGION可以在原点或真实位置都可以 //但是 ptCenPos必须是真实位置 //板的拉伸线,必须是真实位置 class AecDbX3dPart; class DLLIMPEXP AecDbXSlab : public AecDbBDPipeBase { public: ACRX_DECLARE_MEMBERS(AecDbXSlab); protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbXSlab(void); ~AecDbXSlab(void); //标准板 //矩形板,指定位置 bool SetRectSlab(double dL,double dW,double dThick,double dBomEl,const AcGePoint3d& ptCenPos); bool SetCircleSlab(double dR,double dThick,double dBomEl,const AcGePoint3d& ptCenPos,BOOL bCenptAsMove = TRUE); bool SetSectorSlab(double dR,double dThick,double dBomEl,double dStaAng,double dEndAng, const AcGePoint3d &ptCenPos, BOOL bCenptAsMove = TRUE); //类墙体的板 bool SetRectSlab(double dW,double dThick,double dBomEl,const AcGePoint3d& ptFr,const AcGePoint3d& ptTo); //以墙体的形式返回板数据 bool GetAsWallData(WallData& data) const; //设置异形板,指定位置 bool SetRegionSlab(AcGePoint2dArray& arPts,double dThick,double dBomEl,const AcGePoint3d& ptCenPos); bool SetRegionSlab(LPCTSTR pszPoint2ds,double dThick,double dBomEl,const AcGePoint3d& ptCenPos); //水池底板 //标准平底盆,设置盆边数据,默认盆中心为原点 bool SetFenceBasin(LPCTSTR pszPoint2dsTop,double dBomThick,double dWallHeight,double dWallWidth,double dCenBomEl); //矩形 bool SetRectBasin(double dL,double dW,double dBomThick,double dWallHeight,double dWallWidth,const AcGePoint3d& ptCenPos); //圆形 bool SetCircleBasin(double dR,double dBomThick,double dWallHeight,double dWallWidth,const AcGePoint3d& ptCenPos); //椭圆 x->maj y->min bool SetEllipseBasin(double dRmaj,double radiusRatio,double dBomThick,double dWallHeight,double dWallWidth,const AcGePoint3d& ptCenPos); //截面拉伸底板 bool SetExtrudeBasin(AcDbRegion* pReg,AcDbLine* pBaseLine); //提取堰墙 int PeelBasinWall(AcDbVoidPtrArray& arWallPtrs); //厚度 void SetThick(double dThick); double GetThick() const; //底部标高 bool SetElBom(double dEl); double GetElBom() const; AcDbCurve* GetBasinShapeCurve(bool bAtTruePos = true) const; ESection GetBasinShape() const; //获取板位置方向 AcGeVector3d GetBasinXDir() const; AcGePoint3d GetBasinOrg() const; //辅助方法 bool IsPointInSide(const AcGePoint3d& ptOn) const; //点映射到板中心面上 bool ClosestPointToCen(AcGePoint3d& ptOrg) const; bool GetBasinSlabData(PoolData& data) const; void DrawHatch(AcGiDraw& dc) const; public: 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 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 subList() const; virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subDeepClone( AcDbObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary = true ) const; virtual Acad::ErrorStatus subWblockClone(AcRxObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary = true) const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; virtual int ComparedTo(AecDbCurveBase* pCurOther) const; virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const; virtual bool ByJson(const SHJson::WValue &v); virtual bool GetBimInfoTip(CString& sInfoTip) const; Acad::ErrorStatus DrawXShape2d(AcGiDraw &dc) 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; virtual bool GetProperties(SimpleProperty::PropertySetByIndex &porpertys) const; virtual bool SetProperties(SimpleProperty::PropertySetByName &porpertys); protected: EPosition ExplainGripIndex(int nIndex,CString& sTip) const; Acad::ErrorStatus ImpGetGripPoints(AcGePoint3dArray& gripPoints,const int bitflags) const; Acad::ErrorStatus RectImpMoveGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset, const int bitflags); Acad::ErrorStatus CircleImpMoveGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset, const int bitflags); Acad::ErrorStatus EllispeImpMoveGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset, const int bitflags); Acad::ErrorStatus UserDefImpMoveGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset, const int bitflags); Acad::ErrorStatus ImpGetRectWallGripPoints(AcGePoint3dArray& gripPoints,const int bitflags) const; Acad::ErrorStatus ImpMoveRectWallGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset); //类墙体的板 bool SetAsWallData(double dThick,double dH,double dBomEl); Acad::ErrorStatus SubAddDimPoints(AcDbGripDataPtrArray& grips,const AcGeVector3d& curViewDir) const; public: static const CString KEY_DB_Flag; static const CString KEY_LB_Flag; static const CString KEY_GB_Flag; static const CString KEY_XDB_Flag; };