Files
envi-code/SourceCode/Code2026/inc/AecDbWall.h
T
2026-09-28 15:28:50 +08:00

280 lines
9.1 KiB
C++

#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<AcDbEntity *> &ar
, const std::map<AcDbEntity *, AcArray<AcDbEntity *>> &preAr
, AcArray<AcDbEntity *> &output) const;
virtual void PreprocessForHlr(const AcGePoint3d &ptPlnO
, const AcGeVector3d &vtPlnN
, AcArray<AcDbEntity *> &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;//端部线隐藏位
};