#pragma once #include "AecDbBDPipeBase.h" #include "AecComplexCurveDraw.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif class DLLIMPEXP AecDbXWall : public AecDbBDPipeBase { public: ACRX_DECLARE_MEMBERS(AecDbXWall); protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbXWall(void); ~AecDbXWall(void); //标准墙体 厚x高x底标高 内部设置 Section bool SetWallData(double dBomEl,EAlign kAlign = kMid); bool SetWallData(double dThick,double dH,double dBomEl,EAlign kAlign = kMid); bool SetWallData(double dThick,double dH,double dThick2,double dH2,int nW2Pos,double dBomEl,EAlign kAlign = kMid); bool GetWallData(WallData& data) const; //tLeft = 0,Center = 1,Right = 2 bool SetAlign(int nAlgin); int GetAlign() const; //墙体底部坡度 : X%,切 bool SetGradient(double dGradient); double GetGradient() const; //立面墙体 BOOL IsVViewWall() const; //获取折算VView的原生基线 AcDbCurve* GetAsNativeCurveOfVView() const; //获取墙体标准区域闭合线 AcDbCurve* GetWall2dBound() const; //获取墙体融合后的闭合曲线 AcDbPolyline* GetWall2dBoundary() const; int GetNearPosition(const AcGePoint3d& ptOn) const; AcGePoint3d StartPoint() const; AcGePoint3d EndPoint() const; //获取左右线 AcDbCurve* GetLeftCurve() const; AcDbCurve* GetRightCurve() const; AcDbCurve* GetMidCurve() const; //对于异形截面墙体 bool GetInsideCurves(AcDbVoidPtrArray& arCurves) const; //标准的左右中线 不考虑开洞 AecEqui::AecCurveElement GetLeftElement(bool bRealLeft = false) const; AecEqui::AecCurveElement GetMidElement() const; AecEqui::AecCurveElement GetRightElement(bool bRealRight = false) const; //绘制的左右线(合成 AecEqui::AecCurveElement GetLeftDrawElement() const; AecEqui::AecCurveElement GetRightDrawElement() const; //生成标准的墙体2D的绘制 不考虑开洞 bool GetStandardDraw2d(); bool GetStandardDraw2d(AecComplexCurveDraw& draw2d,bool bHasEnd = true) const; bool GetStandardDraw2d(AecComplexCurve& draw2d,bool bHasEnd = true) const; bool GetStandardDraw2d(AcDbVoidPtrArray& draw2d,bool bHasEnd = true) const; bool GetStandardDraw2d(AcDbPolyline*& pPL) const; //2D的提取和融合处理设置 工艺视图 void GetDraw2dables(AecComplexCurve& draw2d) const; void SetDraw2dables(const AecComplexCurve& draw2d); //左右保温层线 bool GetInsulDraw2dables(AecComplexCurve &draw2dL, AecComplexCurve &draw2dR) const; //2D的端部提取和融合处理设置 void GetDraw2dHideTail(AecComplexCurve& draw2d) const; void SetDraw2dHideTail(const AecComplexCurve& draw2d); //外部掉用2D,布尔裁剪 void SubtractDraw2d(const AecComplexCurve& cmplSub); //并补开口线,门窗删除,移动前调用 void BoolUniteDraw2d(const AecComplexCurve& cmplUnt); //追加附属的图元 void AppendDraw2d(const AecComplexCurve& cmpl); //端线隐藏预处理设置,必须在SetDraw2dables调用之后 void RemoveTailDraw2d(const AcGePoint3d& ptPos); //移除特定的用于融合 补的附属Part bool RemoveAddtionShow3dPart(int nPos); //尾端元素 bool GetTailDraw2d(const AcGePoint3d& ptPos,AecEqui::AecCurveElement& el) const; //保温层数据 0 左 1 右 三维创建用 bool GetInsulation(int nPos, InsulData& data) const; void SetInsulation(int nPos, InsulData &data); public: //局部Line擦除 void AddLineBreakSegment(AcGePoint3d& pt1,AcGePoint3d& pt2); //局部Arc擦除 void AddArcBreakSegment(AcGePoint3d& pt1,AcGePoint3d& ptMid,AcGePoint3d& pt2); //局部Line变虚 void AddLineDashedSegment(AcGePoint3d& pt1,AcGePoint3d& pt2); //局部Arc变虚 void AddArcDashedSegment(AcGePoint3d& pt1,AcGePoint3d& ptMid,AcGePoint3d& pt2); //局部变实 void AddLineSegment(AcGePoint3d& pt1,AcGePoint3d& pt2); void AddArcSegment(AcGePoint3d& pt1,AcGePoint3d& ptMid,AcGePoint3d& pt2); protected: virtual void subList() const; virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); 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 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; public: 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 subErase(Adesk::Boolean erasing); virtual Acad::ErrorStatus ClearForDraw2dables(); virtual Acad::ErrorStatus extend(double newParam); virtual Acad::ErrorStatus extend(Adesk::Boolean extendStart, const AcGePoint3d& toPoint); virtual void ProcessHlrResult(const AcArray &ar , const std::map> &preAr , AcArray &output) const; virtual void PreprocessForHlr(const AcGePoint3d &ptPlnO , const AcGeVector3d &vtPlnN , AcArray &ar) const; virtual bool GetProperties(SimpleProperty::PropertySetByIndex &porpertys) const; virtual bool SetProperties(SimpleProperty::PropertySetByName &porpertys); //土建接口 MINTERFACES_METHODS public: virtual AcDb3dSolid* GetDraw3dSolid(bool bAttachBimInf = false,int nColor = 0,bool bSubtractHole = true) 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; virtual int GetSectionDraw(const AcGePoint3d &ptFr, const AcGePoint3d &ptTo, const AcGeVector3d &vtViewDir, const AcGeVector3d &vtTo, AcDbVoidPtrArray &arRegionPtrs) const; Acad::ErrorStatus AdjustHoleAndPipe(double dNewdThick); //合并和清理 void merge(); //实线挖空 void boolSubtract(); protected: LPCTSTR GetGripCmd() const; EPosition ExplainGripIndex(int nIndex,CString& sTip) const; int ImpMakeWwSectionPoints(const WallData& data,AcGePoint3d* ptGe,int nPts) const; Acad::ErrorStatus ImpGetGripPoints(AcGePoint3dArray& gripPoints,const int bitflags) const; Acad::ErrorStatus ImpGetRectWallGripPoints(AcGePoint3dArray& gripPoints,const WallData& data) const; Acad::ErrorStatus ImpGetWwWallGripPoints(AcGePoint3dArray& gripPoints,const WallData& data) const; Acad::ErrorStatus ImpMoveRectWallGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset); Acad::ErrorStatus ImpMoveWwWallGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset); Acad::ErrorStatus ImpGetUserDefWallGripPoints(AcGePoint3dArray& gripPoints,const WallData& data) const; Acad::ErrorStatus ImpGetXShapeSectionWallGripPoints(AcGePoint3dArray& gripPoints,const WallData& data) const; Acad::ErrorStatus ImpMoveUserDefWallGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset); Acad::ErrorStatus ImpMoveXShapeSectionWallGripPointsAt(const AcDbVoidPtrArray& gripAppData, const AcGeVector3d& offset); Acad::ErrorStatus MoveHeightStretchPoint(int nPos,const AcGeVector3d& offset); Acad::ErrorStatus PreRefreshOpeningDraw(); Acad::ErrorStatus RefreshOpeningDraw(); Acad::ErrorStatus DrawBrokenOpen(AecComplexCurveDraw& draw2d) const; Acad::ErrorStatus SubAddDimPoints(AcDbGripDataPtrArray& grips,const AcGeVector3d& curViewDir) const; void AddHoleDimPoints(AcDbGripDataPtrArray& grips,const AcGeVector3d& curViewDir) const; //只针对直线的情况 bool GetDrawable2dLeft(AecComplexCurve& cmplL) const; bool GetDrawable2dRight(AecComplexCurve& cmplR) const; bool GetTailLineElement(AcGePoint3d* pptLSE,AecComplexCurve& cmplL) const; //创建开始末尾位置连接solid AcDb3dSolid* CreateJoin3dSolid(AcDb3dSolid* pSolidAll,int nPos) const; //创建开始末尾位置连接solid AcDb3dSolid* SliceJoinPart3d(AcDb3dSolid* pSolidAll) const; public: static AcDbLine* GetOrthoProjectOnXY(AcDbRegion* pRegion); static void GetOrthoProjectOnXY(AcDbRegion* pRegion,AcGePoint3dArray& arPts); protected: Acad::ErrorStatus AdjustHoleAndPipe(double dThickOld,double dThickAdd,int nDir = 0); Acad::ErrorStatus BoolSubtractAssoc(AcDb3dSolid* pSolid) const; Acad::ErrorStatus SubDrawPlotWidth(AecComplexCurveDraw& draw2d) const; bool IsWall2DJoin(); void ExtClosesttoDraw2d(AcDbCurve *pCurve) const; void SubtractXOpeningDraw2d(AecComplexCurveDraw &draw2d) const; protected: //2D 序列化 mutable AecComplexCurveDraw m_drawable2d;//2D总线 mutable AecComplexCurveDraw m_2dHideTail;//端部线隐藏位 };