244 lines
9.0 KiB
C++
244 lines
9.0 KiB
C++
#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<AcDbEntity *> &ar) const;
|
|
|
|
virtual void ProcessHlrResult(const AcArray<AcDbEntity *> &ar
|
|
, const std::map<AcDbEntity *, AcArray<AcDbEntity *>> &preAr
|
|
, AcArray<AcDbEntity *> &output) const;
|
|
|
|
protected:
|
|
|
|
//BIM数据
|
|
AecDbX3dPart* m_pPart; //3D本体
|
|
|
|
//2D
|
|
AecComplexCurveDraw m_drawable2d; //2D
|
|
|
|
//不序列化
|
|
protected:
|
|
AecGripData* m_pGripAppData; //夹点
|
|
};
|