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

332 lines
9.9 KiB
C++

#pragma once
/*----------------------------------------------------------------------------------
//AecDbEwFitting :弯头,三通,四通,等Fitting通用类
//
//通过 基本体 进行基本体的拼接
//---------------------------------------------------------------------------------*/
#include "AecDbEntityBase.h"
#include "AecDbObjXDataMap.h"
#include "AecComplexCurveDraw.h"
#ifdef EARTHWORM_EXPORT
#define DLLIMPEXP __declspec(dllexport)
#else
#define DLLIMPEXP __declspec(dllimport)
#endif
#include "AecMInterfaces.h"
class DLLIMPEXP AecDbEwFitting : public AecDbEntityBase,
public AecMInterfaces
{
public:
ACRX_DECLARE_MEMBERS(AecDbEwFitting);
public:
protected:
static Adesk::UInt32 kCurrentVersionNumber;
public:
AecDbEwFitting(void);
virtual ~AecDbEwFitting(void);
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 copyFrom(const AcRxObject* pSrc);
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
#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 subGetStretchPoints(AcGePoint3dArray& stretchPoints) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags);
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;
#endif
//AEC 派生
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const;
virtual void AssertWriteEnabled(Adesk::Boolean autoUndo = true, Adesk::Boolean recordModified = true );
//绘制接口
virtual Acad::ErrorStatus DrawInfArrow(AcGiDraw &dc) const;
//剖切提取,符号法,对于管线构件
virtual bool GetSectionDraw(AcGePlane& plan,const AcGeVector3d& vtTo,AcDbVoidPtrArray& arRegionPtrs) const;
virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const;
void DrawSubAxis(AcGiDraw &dc,AcDbEntity* pEnt) const;
protected:
//2d
void DrawElbow2d(AcGiDraw &dc) const;
void DrawReduceElbow2d(AcGiDraw &dc) const;
bool DrawElbow2dPVC(AcGiDraw &dc) const;
void DrawTee2d(AcGiDraw &dc) const;
void DrawCross2d(AcGiDraw &dc) const;
void DrawWye2d(AcGiDraw &dc) const;
void DrawReduce2d(AcGiDraw &dc) const;
void DrawLateral2d(AcGiDraw &dc) const;
void DrawFlange2d(AcGiDraw &dc) const;
void DrawWcap2d(AcGiDraw &dc) const;
void DrawYNut(AcGiDraw &dc, AcGePoint3d &ptM, const AcGeVector3d& vtX, const AcGeVector3d& vtY) const;
void DrawNut3d(AcGiDraw &dc, AcGePoint3d &ptGeC, const AcGeVector3d &vtZ, double dR) const;
void DrawFlxJoin2d(AcGiDraw &dc) const;
void DrawThrough2d(AcGiDraw &dc) const;
void DrawUJoin2d(AcGiDraw &dc) const;
void DrawRJoin2d(AcGiDraw &dc) const;
void DrawOJoin2d(AcGiDraw &dc) const;
void DrawIJoin2d(AcGiDraw &dc) const;
void DrawWRP2d(AcGiDraw &dc) const;
void DrawWHP2d(AcGiDraw &dc) const;
void DrawWSPB2d(AcGiDraw &dc) const;
void DrawWGastket2d(AcGiDraw &dc) const;
//断管符号
void DrawSide2d(AcGePoint3d ptSideCen,AcGeVector3d vcDir,double dD,AecComplexCurve& cplCurve,bool bMirror) const;
//3d
void DrawElbow(AcGiDraw &dc) const;
void DrawReduceElbow(AcGiDraw &dc) const;
bool DrawElbow3dPVC(AcGiDraw &dc) const;
void DrawTee(AcGiDraw &dc) const;
void DrawCross(AcGiDraw &dc) const;
void DrawWye(AcGiDraw &dc) const;
void DrawReduce(AcGiDraw &dc) const;
void DrawLateral(AcGiDraw &dc) const;
void DrawFlange(AcGiDraw &dc) const;
void DrawWcap(AcGiDraw &dc) const;
void DrawFlxJoin(AcGiDraw &dc) const;
void DrawWRP(AcGiDraw &dc) const;
void DrawWHP(AcGiDraw &dc) const;
void DrawWSPB(AcGiDraw &dc) const;
void DrawWGastket(AcGiDraw &dc) const;
void DrawThrough(AcGiDraw &dc) const;
void DrawUJoin(AcGiDraw &dc) const;
void DrawRJoin(AcGiDraw &dc) const;
void DrawOJoin(AcGiDraw &dc) const;
void DrawIJoin(AcGiDraw &dc) const;
void DrawCLinder(AcGiDraw &mode, AcGePoint3d ptCen, AcGeVector3d vtDir, double dD) const;
public:
void DrawInfCap2d(AcGiDraw &dc) const;
void DrawInfCap3d(AcGiDraw &dc) const;
public:
//设置类型 内部存在专业数据中
EFittingType GetFittingType() const;
WPipe::PipeParam* GetPipeParam(int nInf = 0) const;
bool GetFittingName(CString &sName) const;
public:
//专业数据 和 绘制设置
AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite);
virtual const AecDbObjXDataMap* GetSpecialtyData() const;
//接口重载
virtual bool GetInterface(AcArray<AecInterface>& arInfs) const;
virtual bool GetInterface(int nIndex,AecInterface& inf) const;
virtual int GetInterfaceCount() const;
virtual int GetActiveInf() const;
virtual void SetActiveInf(int nIndex);
virtual void LockInf(int nInf);
virtual bool TransformAssocInf(int nInf,const AcGeMatrix3d& xform);
//获取唯一性标识
virtual LPCTSTR GetGUID() const;
virtual void SetActive(bool bActive);
virtual bool IsActive() const;
virtual void NewGUID();
Acad::ErrorStatus setNormal(const AcGeVector3d& vtNorm);
AcGeVector3d normal() const;
//获取二维视图显示的图形
virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const;
//获取三维显示图形
virtual int GetDraw3dables(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo = false ) const;
virtual int ComparedTo(AecDbEntityBase* pCurOther) const;
Acad::ErrorStatus TransformBy(const AcGeMatrix3d xform);
//图层和线型
void SetSingleLayer(const AcDbObjectId& idLayer);
AcDbObjectId GetSingleLayer() const;
void SetSingleLineType(const AcDbObjectId& idLt);
AcDbObjectId GetSingleLineType() const;
void SetDoubleLayer(const AcDbObjectId& idLayer);
AcDbObjectId GetDoubleLayer() const;
void SetDoubleLineType(const AcDbObjectId& idLt);
AcDbObjectId GetDoubleLineType() const;
void SetDashLayer(const AcDbObjectId& idLayer);
AcDbObjectId GetDashLayer() const;
void SetCenterLayer(const AcDbObjectId& idLayer);
AcDbObjectId GetCenterLayer() const;
AcDbArc* GetElbowArc() const;
LPCTSTR GetGripCmd() const;
// 用于管线系统变化后,更新实体
// 主要是 内外线的颜色、线形、线宽、图层
void UpdatePipeSystem(const int &outClr
, const AcDbObjectId &outLt
, const double &outWd
, const AcDbObjectId &outLy
, const int &innClr
, const AcDbObjectId &innLt
, const double &innWd
, const AcDbObjectId & innLy);
virtual void ProcessHlrResult(const AcArray<AcDbEntity *> &ar
, const std::map<AcDbEntity *, AcArray<AcDbEntity *>> &preAr
, AcArray<AcDbEntity *> &output) const;
bool IsPlasticsMat() const;
double GetGasketThick() const;
protected:
AcDbRegion* GetSection(double dD,double dt) const;
AcDbRegion* GetSection(double W, double H, double dt) const;
EPosition ExplainGripIndex(int nIndex) const;
Acad::ErrorStatus ImpGetGripPonts(AcGePoint3dArray& gripPoints,const int bitflags) const;
void DrawInfCircle(AcGiDraw &dc,AcDbArc* pArcElbow,double dR,int nStyle = 0,BOOL bDraw = TRUE) const;
void DrawInfCircle(AcGiDraw &dc, AcDbCurve *pCrv,AcGeVector3d &vt1, AcGeVector3d &vt2, double dR, int nStyle = 0, BOOL bDraw = TRUE) const;
void DrawInfCircle(AcGiDraw &dc,AcDbArc* pArcElbow, double dRs,double dRe,int nStyle = 0,BOOL bDraw = TRUE) const;
static BOOL FormatDot(AcGePoint3d& ptGeCen, double dPlotWidth,AcDbPolyline* pDot,const AcGePlane& plane,const AcGeVector3d& vtNorm,int nColor);
virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const;
virtual bool ByJson(const SHJson::WValue &v);
bool GetBimInfoTip(CString& sInfoTip) const;
Acad::ErrorStatus DrawPlotPolyline(AcGiDraw &dc
, AcDbCurve* pCurve
, int nStyle
, BOOL bDraw = TRUE
, BOOL bIsSE = FALSE
, bool bIsCenter = TRUE ) const;
void RePlineStartOrEnd(AcDbPolyline* pPl,AcDbArc* pArcElbow,double dR,int nStyle) const;
void RePlineStartOrEnd(AcDbPolyline *pPl, int nAdd, double dR, int nStyle) const;
AcDbLine *ElbowPipeStra(AcGiDraw &dc, AcDbCurve *pArcOut, AcDbCurve *pArcIn, int nStyle, double dF, int nPos, AcDbArc *pArcElbowCen = NULL) const;
//和上次上次弯头遮挡裁剪
void WipeLastLastElbow(AcGiDraw &dc,int nStyle) const;
virtual void PreprocessForHlr(const AcGePoint3d &ptPlnO
, const AcGeVector3d &vtPlnN
, AcArray<AcDbEntity *> &ar) const;
protected:
Adesk::Int16 m_nInfActive;
CString m_sGUID;
bool m_bActive;
//其他按通用图层和线型
//单线图层和线型
AcDbObjectId m_idSingleLayer;
AcDbObjectId m_idSingleLnType;
//双线图层和线型
AcDbObjectId m_idDoubleLayer;
AcDbObjectId m_idDoubleLnType;
//
AcDbObjectId m_idDashLayer;
AcDbObjectId m_idCenterLayer;
//专业数据
AecDbObjXDataMap m_mapSpecXData;
protected:
mutable AcDbVoidPtrArray m_arDrawBuffer3d1;
mutable AcDbVoidPtrArray m_arDrawBuffer3d2;
public:
AecGripData* m_pGripAppData; //夹点
};