280 lines
9.3 KiB
C++
280 lines
9.3 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;//端部线隐藏位
|
|
}; |