843 lines
39 KiB
C++
843 lines
39 KiB
C++
#pragma once
|
|
|
|
#include "AecDbCurveBase.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
#include "EarThwormDef.h"
|
|
|
|
#ifdef EARTHWORM_EXPORT
|
|
#define DLLIMPEXP __declspec(dllexport)
|
|
#else
|
|
#define DLLIMPEXP __declspec(dllimport)
|
|
#endif
|
|
|
|
#define GRIP_MAXNUM_FITTING 2048
|
|
bool DLLIMPEXP PickGripMessage(GripMessage& msg);
|
|
|
|
#if (ARX>16)
|
|
|
|
#include "dbgrip.h"
|
|
namespace GripCback
|
|
{
|
|
bool WorldDrawfunc( AcDbGripData *pThis,
|
|
AcGiWorldDraw *pWd,
|
|
const AcDbObjectId& entId,
|
|
AcDbGripOperations::DrawType type,
|
|
AcGePoint3d *cursor,
|
|
double dGripSize);
|
|
|
|
const TCHAR* GripToolTipFunc(AcDbGripData* pThis);
|
|
};
|
|
#endif
|
|
|
|
class DLLIMPEXP AecDbEarthWorm : public AecDbCurveBase
|
|
{
|
|
public:
|
|
ACRX_DECLARE_MEMBERS(AecDbEarthWorm);
|
|
|
|
protected:
|
|
static Adesk::UInt32 kCurrentVersionNumber;
|
|
|
|
public:
|
|
AecDbEarthWorm(void);
|
|
virtual ~AecDbEarthWorm(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 Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) 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 subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags);
|
|
|
|
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 subErase(Adesk::Boolean erasing);
|
|
|
|
Acad::ErrorStatus ImpGetGripPoints(AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const;
|
|
|
|
Acad::ErrorStatus ImpMoveGripPointsAt(GripAppData* pGripData, const AcGeVector3d& offset);
|
|
|
|
Acad::ErrorStatus ImpEraseByGripPointsAt(GripAppData* pGripData);
|
|
|
|
Acad::ErrorStatus ImpGetGripPointsTop(AcDbGripDataPtrArray& grips, int& nIndex) const;
|
|
|
|
Acad::ErrorStatus ImpGetGripPointsFrn(AcDbGripDataPtrArray& grips, int& nIndex) const;
|
|
|
|
protected:
|
|
|
|
Acad::ErrorStatus ImpMoveGripPointOnTopView(GripAppData* pGripData, const AcGeVector3d& offset);
|
|
|
|
EWFnctNode* ImpGetNodeAtLockid(LPCTSTR pszLockId);
|
|
|
|
Acad::ErrorStatus EraseAttatchPortRoomObj(EWFnctNode* pTemp);
|
|
|
|
#endif
|
|
|
|
public:
|
|
|
|
virtual AcDbCurve* GetBaseCurve(bool bOrthoProjectToXY = false,bool bUseOffset = true) const;
|
|
|
|
//AEC 派生
|
|
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
|
|
virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const;
|
|
|
|
public:
|
|
|
|
// 绘制 节点的 subdMesh 部分
|
|
void DrawSubDMeshNode(AcGiDraw &dc) const;
|
|
|
|
//提取管廊的界面脚本 //_T("RECT:3900x3600|2900x3600|400x300");
|
|
int SetCrossSectionScr(LPCTSTR pszCrossSectionScr);
|
|
void GetCrossSectionScr(CString& sCrossSectionScr) const;
|
|
|
|
//主教本解析
|
|
ESection ExtractEarthWormScr(AcGePoint2dArray& arDatas) const;
|
|
|
|
ESection GetSectionType() const;
|
|
|
|
//扩展脚本提取
|
|
int GetRoomCount() const;
|
|
int GetRoom(int nIndex, ERoom& room) const;
|
|
int GetRoom(AcGeLineSeg3d& ln,int nIndex, ERoom& room) const;
|
|
|
|
//添加排水沟,单位毫米
|
|
bool AddWaterway(float dW, float dH, CIntArray& arPoses, float dGrade);
|
|
bool GetWaterway(AcGePoint3d& pt, double& dGrade) const;
|
|
void RemoveWaterway(int nRoomIndex);
|
|
|
|
//添加凸台,凸台距离舱室内左侧定位尺寸,宽,高 毫米单位
|
|
void AddBosses(double dLDist,double dW,double dH,int nRoomIndex);
|
|
void AddBosses(EBoss& bos);
|
|
void AddBosses(const AcArray<EBoss>& arBosses,bool bRestLast = false);
|
|
bool GetBosses(int nRoomIndex,AcGePoint3dArray& arBosses) const;
|
|
bool GetBosses(AcArray<EBoss>& arBosses) const;
|
|
void RemoveBoss(int nRoomIndex, double dAtLDist);
|
|
|
|
//提取管线位置分段[管位处]
|
|
bool GetPipeLineSegs(int nRoomIndex,AcArray<LineSeg>& arLnSegs, bool bAllRoom = false, bool bByWholeLine = false) const;
|
|
|
|
// 提取线缆位置分段[支架处]
|
|
bool GetCableLineSegsForHolder(int nRoomIndex
|
|
, AcArray<LineSeg>& arLnSegs
|
|
, int idx // 编号
|
|
, int nFloor // 第几层
|
|
, int nCount // 此层画几条线缆
|
|
, double dDD // 每条线缆外径
|
|
, int nClr // 线缆颜色
|
|
, LPCTSTR ltypeString // 线缆线型
|
|
, double dSpace // 线缆间距
|
|
, bool bAllRoom = false
|
|
, bool bByWholeLine = false) const;
|
|
|
|
bool GetCableLineSegsForHanger(int nRoomIndex
|
|
, AcArray<LineSeg>& arLnSegs
|
|
, int idx // 编号
|
|
, int nFloor // 第几层
|
|
, int nCount // 此层画几条线缆
|
|
, double dDD // 每条线缆外径
|
|
, int nClr // 线缆颜色
|
|
, LPCTSTR ltypeString // 线缆线型
|
|
, double dSpace // 线缆间距
|
|
, bool bAllRoom = false
|
|
, bool bByWholeLine = false) const;
|
|
|
|
bool HasAddtions(AcRxClass* pRxClass);
|
|
bool AddAddtion(const AcDbObjectId& idAdd);
|
|
bool RemoveAddtions(AcRxClass* pRxClass);
|
|
|
|
//设置内室倒角,毫米
|
|
void SetChamferInter(float dChamferInter);
|
|
float GetChamferInter() const;
|
|
int GetChamferInterFlag(CPoint& ptFlag) const;
|
|
|
|
//获取底部厚度增加
|
|
double GetBomThickAdd() const;
|
|
double GetTopThickAdd() const;
|
|
|
|
bool StlOut(LPCTSTR pszFile) const;
|
|
bool SatOut(LPCTSTR pszFile) const;
|
|
bool SatsOut(LPCTSTR pszFile) const;
|
|
bool PureDwgOut(LPCTSTR pszFile) const;
|
|
|
|
// 解析管廊脚本中的EXT字段
|
|
bool parseExtScript(LPCTSTR field, std::vector<std::vector<CString>> &items) const;
|
|
|
|
//获取左边特定室内高度,默认总体设置
|
|
double GetLeftRoomHeight() const;
|
|
|
|
//获取右边特定室内高度,默认总体设置
|
|
double GetRightRoomHeight() const;
|
|
|
|
void RemoveAllPipePos();
|
|
bool GetPipePos(AcArray<PipePos>& arPipePos) const;
|
|
bool AddPipePos(const AcArray<PipePos>& arPipePos);
|
|
|
|
public://内部测试命令
|
|
//默认管廊数据
|
|
Acad::ErrorStatus EarthWormInit();
|
|
|
|
//-1 分化本段成多个子段,内部测试命令
|
|
Acad::ErrorStatus DivideSegmentToSubSegments(int nSegIndex, double dLen);
|
|
Acad::ErrorStatus DivideSegmentToSubSegments(int nSegIndex, int nOnFncNodeIndex, double dLenPos, double dGradient, LPCTSTR pszStack = NULL);
|
|
Acad::ErrorStatus DivideSegmentToSubSegments(EWSegment& seg, double dLen);
|
|
Acad::ErrorStatus DivideSegmentToSubSegments(int nSegIndex, const AcArray<EWSegment>& arSegs);
|
|
|
|
// 分化本段成两个独立段
|
|
bool CanBreakSegmentToEarthWorm(int nSegIndex, int nOnFncNodeIndex, double dLenPos) const;
|
|
Acad::ErrorStatus BreakSegmentToEarthWorm(int nSegIndex, int nOnFncNodeIndex, double dLenPos, double dGradient, LPCTSTR pszStack = NULL);
|
|
|
|
//拎出一个橡皮精三角
|
|
Acad::ErrorStatus PickFreeSegmentPair(int nSegindex, AecDbEarthWorm*& pWorm1, AecDbEarthWorm*& pWorm2, AcDbObjectId& idLeft, AcDbObjectId& idRight);
|
|
bool PickFreeSegmentAtTail(AecDbEarthWorm*& pWorm1);
|
|
bool PickFreeSegmentAtHead(AecDbEarthWorm*& pWorm2);
|
|
|
|
//分配桩号
|
|
Acad::ErrorStatus NameAllStakes();
|
|
|
|
public:
|
|
|
|
//一段管廊的起起始点
|
|
void SetStartPoint(const AcGePoint2d& pt);
|
|
AcGePoint2d StartPoint() const;
|
|
|
|
void SetEndPoint(const AcGePoint2d& pt);
|
|
// 如果 bReal 为 true 则返回 m_ptEnd
|
|
AcGePoint2d EndPoint(bool bReal = false) const;
|
|
|
|
//设置纵断始点
|
|
void SetVStartPoint(const AcGePoint2d& pt);
|
|
AcGePoint2d VStartPoint() const;
|
|
AcGePoint2d VEndPoint() const;
|
|
|
|
void SetLastDir(const AcGeVector3d& vtLast);
|
|
AcGeVector3d GetLastDir() const;
|
|
|
|
void SetNextDir(const AcGeVector3d& vtNext);
|
|
AcGeVector3d GetNextDir() const;
|
|
|
|
//获取首位段的向量
|
|
AcGeVector3d GetHeadDir() const;
|
|
AcGeVector3d GetTailDir() const;
|
|
|
|
//-1 end-sta 0 HeadDir 1 TailDir
|
|
AcGeVector3d GetThisDir(int nPos = 0) const;
|
|
AcGeVector2d GetThisDir2d(int nPos = 0) const;
|
|
|
|
//设置起点的标高,后续根据坡度计算高程
|
|
void SetStartElevation(float dEl,bool bUpdateRoom = true);
|
|
float StartElevation() const;
|
|
|
|
//通过末点标高计算起点标高
|
|
void SetEndElevation(float dEl,bool bUpdateRoom = true);
|
|
float EndElevation() const;
|
|
|
|
//设置某段开始标高 nPos 0 开始 1结尾 位置
|
|
double GetSegHeadElevation(int nSegIndex) const;
|
|
void SetSegHeadElevation(int nSegIndex, double dEl);
|
|
|
|
//等同 EndElevation
|
|
double GetTailElevation() const;
|
|
|
|
//设置末尾段的末尾标高,不整体修改
|
|
void SetTailElevation(double dEl);
|
|
|
|
//偏移
|
|
void SetOffset(float dOffset);
|
|
float GetOffset() const;
|
|
AcGeVector2d GetOffsetDir() const;
|
|
|
|
//获取宽高,是否纵断按比例
|
|
AcGePoint2d GetSize(bool bByVScale = false) const;
|
|
AcGePoint2d GetSize(AcGePoint2d& ptThick,bool bByVScale = false) const;
|
|
|
|
//设置设计 道路中心线,点,标高
|
|
void SetRoadCenline(const AcGePoint3dArray& arPts);
|
|
int GetRoadCenline(AcGePoint3dArray& arPts) const;
|
|
AcDbCurve* GetRoadCenline(bool b3d = false) const;
|
|
AcDbPolyline* GetRoadCenlineVerSection() const;
|
|
|
|
//设置现状 道路中心线,点,标高
|
|
void SetOldRoadCenline(const AcGePoint3dArray& arPts);
|
|
int GetOldRoadCenline(AcGePoint3dArray& arPts) const;
|
|
AcDbCurve* GetOldRoadCenline(bool b3d = false) const;
|
|
|
|
AcDbPolyline* GetOldRoadCenlineVerSection() const;
|
|
AcDbPolyline* FormatVerSectionPolyline(const AcGePoint3dArray& arPoints) const;
|
|
|
|
//纵段计算土方,高程,等节点数据
|
|
int CalEarthWork(AcArray<ELongParam>& arELongParams) const;
|
|
int CalEarthWork(AcDbObjectIdArray& arIds) const;
|
|
|
|
//获取标高 nSegIndex也是控制点的索引 nPos 0 开始 1结尾 位置
|
|
//nElType 0 顶 1中线 2 底
|
|
float GetElevation(int nSegIndex, int nPos = 0, int nElType = 1) const;
|
|
float GetElevation(LPCTSTR pszLockID, int nElType = 1) const;
|
|
float GetElevation(const AcGePoint3d& ptOn, int nElType = 1) const;
|
|
|
|
AcGePoint2d GetNodePosOfVSection(LPCTSTR pszLockID) const;
|
|
|
|
//三维剖视图
|
|
void SetDraw3DStyle(Adesk::UInt16 nDraw3DStyle);
|
|
Adesk::UInt16 GetDraw3DStyle() const;
|
|
|
|
//二维俯视图样式
|
|
void SetLookDwonDrawStyle(Adesk::UInt16 nLookDwonDrawStyle);
|
|
Adesk::UInt16 GetLookDwonDrawStyle() const;
|
|
|
|
//纵断 横断 俯视 切换
|
|
//俯视0 纵断1 横断 2
|
|
void SetSectionDrawStyle(Adesk::UInt16 nSectionDrawStyle);
|
|
Adesk::UInt16 GetSectionDrawStyle() const;
|
|
|
|
//获取二维视图显示的图形
|
|
int GetDraw2dables(Adesk::UInt16 nSectionDrawStyle, AcDbVoidPtrArray& arEntPtrs) const;
|
|
|
|
//三维提图
|
|
int GetDraw3dables(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo = false) const;
|
|
|
|
//获取二维视图显示的预制图形段
|
|
int GetDraw2dSegables(AcArray<CPoint>& arGroups, AcDbVoidPtrArray& arEntPtrs, AcDbVoidPtrArray& arSectEntPtrs) const;
|
|
|
|
//管廊混泥土体积
|
|
double GetVolume() const;
|
|
|
|
//管廊腔体体积 nRoom = 999 全部
|
|
double GetCavityVolume(int nRoom) const;
|
|
|
|
//管廊总挖土方,与道路标高先有关 0 现状 1 设计
|
|
double GetDigVolume(int nRoadType = 0) const;
|
|
|
|
//管廊填埋土方,与道路标高先有关
|
|
double GetFillVolume() const;
|
|
|
|
//管廊外表面积
|
|
double GetOutSideArea() const;
|
|
|
|
//管廊舱室内表面积
|
|
double GetInSideArea() const;
|
|
|
|
// 管廊长度
|
|
double GetLength() const;
|
|
|
|
void AddSegment(int nSegIndexAfter, double dGradient, double dXYDist, LPCTSTR pszStake);
|
|
void RemoveSegment(int nSegIndex);
|
|
|
|
bool GetSegment(int nSegIndex, EWSegment& seg) const;
|
|
bool GetSegment(int nSegIndex, AcGeLine3d& lnSeg) const;
|
|
bool UpdateSegment(int nSegIndex, const EWSegment& seg);
|
|
CPoint GetSegment(const AcGePoint3d& ptHit, EWSegment& seg, AcGeLineSeg3d& lnSeg, double* pDistFr = NULL) const;
|
|
int GetSegmentCount() const;
|
|
|
|
//添加变形缝
|
|
bool AddDeformationJoint(int nSegIndex, int nSubSegIndex, const EWFnctNode& fncNode);
|
|
bool AddDeformationJoint(EWSegment& seg, int nSubSegIndex, const EWFnctNode& fncNode);
|
|
EWFnctNode* GetDeformationJoint(int nSegIndex, int nSubSegIndex) const;
|
|
|
|
int GetDeformationJointCount(int nSegIndex) const;
|
|
bool RemoveDeformationJoint(int nSegIndex, int nSubSegIndex);
|
|
bool RemoveDeformationJoint(int nSegIndex, double dDistLen);
|
|
|
|
//关联外部房子,如通风口等
|
|
void AttachFncNode(int nSegIndex, int nFncNodeIndex, const AcDbObjectId& id);
|
|
|
|
//获取中心控制点
|
|
void GetCenControlPoints(AcGePoint3dArray& arCenPoints, AcGeIntArray& arFnctTypes, CUIntArray& arColors, bool bHasSubNode = false) const;
|
|
|
|
//获取梯度变化点
|
|
void GetCenGradientPoints(AcGePoint3dArray& arCenPoints) const;
|
|
|
|
//设置梯度点梯度 n% 不带百分号,如 0.52% ,传入值为 0.52;
|
|
bool SetGradientAt(int nSubSegIndex, double dGradient);
|
|
double GetGradientAt(int nSubSegIndex) const;
|
|
double GetGradientAt(LPCTSTR pszLockID) const;
|
|
|
|
//梯度段长度
|
|
bool SetDistLenAt(int nGradientPtIndex, double dLen);
|
|
double GetDistLenAt(int nGradientPtIndex) const;
|
|
|
|
//添加变形缝段的子功能类节点
|
|
bool DefaultStake(int nSegIndex, int nOnFncNodeIndex, EWFnctNode& fncNode,bool bReSetFnDistFrom = false);
|
|
bool AddFncNode(EWSegment& seg, int nOnFncNodeIndex, const EWFnctNode& fncNode);
|
|
bool AddFncNode(int nSegIndex, int nOnFncNodeIndex, const EWFnctNode& fncNode);
|
|
|
|
//更新节点
|
|
bool UpdateFncNode(int nSegIndex, int nOnFncNodeIndex, const EWFnctNode& fncNode);
|
|
//根据lockid,更新节点
|
|
bool UpdateFncNode(const EWFnctNode* pData, bool bUpdateAssocRoom = true);
|
|
Acad::ErrorStatus UpdateRoomDraw(bool bUpdateXXXDogEl = true);
|
|
|
|
int GetFncNodeCount(int nSegIndex, int nOnFncNodeIndex) const;
|
|
bool GetFncNodeAt(int nSegIndex, int nOnFncNodeIndex, AcArray<EWFnctNode>& arFncNodes) const;
|
|
bool GetFncNodeAt(LPCTSTR pszLock, EWFnctNode& fncNode) const;
|
|
|
|
//获取靶区的范围,dPickBox可以输入1m 的范围
|
|
bool GetFncNodeAt(const AcGePoint3d& pt1, double dPickBox, AcArray<EWFnctNode>& arFncNodes, AcGePoint3dArray& arPoses) const;
|
|
|
|
// 根据范围得到范围所有节点
|
|
bool GetFncNodeAt(const AcGePoint3d& pt1, const AcGePoint3d& pt2, AcArray<EWFnctNode> &arFncNodes) const;
|
|
|
|
//根据子分段的位置移除子节点
|
|
bool RemoveFncNodeAt(int nSegIndex, int nOnFncNodeIndex, int nRoomIndex, double dSubNodeDistLen);
|
|
//通过桩号移除
|
|
bool RemoveFncNodeAt(int nSegIndex, int nOnFncNodeIndex, int nRoomIndex, LPCTSTR pszStakeNo);
|
|
|
|
//通过LockID移除
|
|
bool RemoveFncNodeAtById(int nSegIndex, int nOnFncNodeIndex, int nRoomIndex, LPCTSTR pszLockId);
|
|
bool RemoveFncNodeAtById(LPCTSTR pszLockId);
|
|
bool RemoveFncNodeAtByLn(const AcGePoint3d& pt1, const AcGePoint3d& pt2);
|
|
|
|
//修改桩号
|
|
bool SetStakeAt(int nSegIndex, LPCTSTR pszNewStake);
|
|
bool SetStakeAt(int nSegIndex, int nOnFncNodeIndex, LPCTSTR pszNewStake);
|
|
bool SetStakeAt(int nSegIndex, int nOnFncNodeIndex, LPCTSTR pszOldStake, LPCTSTR pszNewStake);
|
|
bool SetStakeAt(LPCTSTR pszOldStake, LPCTSTR pszNewStake);
|
|
bool GetStakeAt(int nSegIndex, CString& sStacke) const;
|
|
bool GetStakeAt(int nSegIndex, int nOnFncNodeIndex, CString& sStacke) const;
|
|
bool SetEndNodeStake(int nSegIndex,LPCTSTR pszNewStake);
|
|
|
|
//调用 GetFncNodeAt(int nSegIndex,int nOnFncNodeIndex,AcArray<EWFnctNode>& arFncNodes)取桩号
|
|
bool GetStakeAt(int nSegIndex, int nOnFncNodeIndex, int nNextFnctNode, CString& sStacke) const;
|
|
|
|
//添加关联的外室
|
|
void AppendPortRoomIds(const AcDbObjectId& id);
|
|
void GetPortRoomIds(AcDbObjectIdArray& arIds) const;
|
|
bool GetPortRoomId(LPCTSTR pszLockID, AcDbObjectId& idPortRoom) const;
|
|
|
|
// 专业数据
|
|
virtual const AecDbObjXDataMap* GetSpecialtyData() const;
|
|
virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite);
|
|
|
|
// 根据舱室索引,得到舱室类型
|
|
CString GetRoomTypeByIdx(const int &idx) const;
|
|
|
|
// 根据舱室索引,修改舱室类型
|
|
bool SetRoomTypeByIdx(const int &idx, LPCTSTR pszType);
|
|
|
|
bool GetFncNodeVSection(LPCTSTR pszLock, AcGePoint2d& ptPos) const;
|
|
|
|
// 获得管廊中心线(管线和线缆功能使用)
|
|
bool getCenterLineForPipe(AcArray<LineSeg> &arLnCenSegs
|
|
, int nRoomIndex
|
|
, bool bByWholeLine) const ;
|
|
|
|
void SetHeadConnect(const AcDbObjectId& idCnt);
|
|
bool GetHeadConnect(AcDbObjectId& idCnt);
|
|
|
|
void SetTailConnect(const AcDbObjectId& idCnt);
|
|
bool GetTailConnect(AcDbObjectId& idCnt);
|
|
|
|
// 改变端线的绘制方式
|
|
// -1 前后都绘制 0 不绘制 1起始端绘制 2 结束端绘制
|
|
void SetSideDrawMode(const int &drawMode);
|
|
|
|
protected:
|
|
|
|
//绘制俯视图 0
|
|
Acad::ErrorStatus DrawBuffer(AcGiDraw &dc) const;
|
|
|
|
//显示墙体厚度的双线
|
|
Acad::ErrorStatus AddPolylineWall(AcDbVoidPtrArray& arCurPtrs,AcDbPolyline* pPL,double dW,int nPos,const AcGeVector2d& vtDirV,const AcGePoint3dArray& arCenPoints) const;
|
|
Acad::ErrorStatus DrawTopView2d(AcGiDraw &dc) const;
|
|
|
|
//绘制纵断1
|
|
Acad::ErrorStatus DrawVerSection(AcGiDraw &dc) const;
|
|
Acad::ErrorStatus DrawVerSectionNodeOldPos(AcGiDraw &dc) const;
|
|
|
|
//绘制纵断 现状和设计道路中心线
|
|
Acad::ErrorStatus DrawVerSectionRoad(AcDbPolyline* pPlCen, AcGiDraw &dc, double dHeight) const;
|
|
Acad::ErrorStatus DrawVerSectionOldRoad(AcDbPolyline* pPlCen, AcGiDraw &dc, double dHeight) const;
|
|
Acad::ErrorStatus ImpDrawVerSectionRoad(AcDbPolyline* pPlCen, AcDbCurve* pRoadCurve, AcDbCurve* pBaseCurve, AcGiDraw &dc, int nKind) const;
|
|
|
|
double ReadElXData(AcDbEntity* pPlEnt, int& nPos) const;
|
|
Acad::ErrorStatus WriteElXData(AcDbEntity* pPlEnt, double dStaEl, int nPos) const;
|
|
Acad::ErrorStatus DrawVerSectionTbl(double dHeight, AcGiDraw &dc) const;
|
|
Acad::ErrorStatus DrawVerSectionPipe(AcDbPolyline* pPlCen,AcGiDraw &dc) const;
|
|
|
|
Acad::ErrorStatus MerageGradientAndDist(AcArray<TextOnPoint>& arTxtGrLen, AcDbObjectId& idStyle, AcDbObjectId& idLayer, double dTxtH, double dAngle, AcGiDraw &dc) const;
|
|
bool FindStakeUCSXPos(LPCTSTR pszStake, double& dXPos, int nIDType) const;
|
|
|
|
//集水井纵断
|
|
AcDbPolyline* DrainWellVerSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks) const;
|
|
|
|
//各种开口和室纵断
|
|
AcDbPolyline* DoghouseSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks, AcGiDraw* pDC = NULL, AcGeVector2d* pvtDirX = NULL) const;
|
|
AcDbPolyline* ProModelSection2d(AcGiDraw &dc, const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks, bool bForPos = false) const;
|
|
|
|
//防火墙纵断
|
|
AcDbPolyline* FirwWallSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, const AcGePoint2d& ptLast) const;
|
|
|
|
//里程节点纵段绘制
|
|
AcDbPolyline* StackNodeSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, const AcGePoint2d& ptLast) const;
|
|
|
|
//变形缝节点
|
|
AcDbPolyline* SubEspJointSection2d(const EWFnctNode* pNext,double dGradient,double dDistFrom,double dHeight,const AcGePoint2d& ptLast) const;
|
|
|
|
//下沉纵断
|
|
AcDbPolyline* SinkOutletSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks) const;
|
|
AcDbPolyline* SinkOutletSection2d20(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks) const;
|
|
AcDbPolyline* SinkOutletSection2d21(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks) const;
|
|
|
|
//管廊交叉隆起 纵断
|
|
AcDbPolyline* CrossUpliftedSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks) const;
|
|
|
|
//开口纵断
|
|
AcDbPolyline* UserDoghouseSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast) const;
|
|
|
|
//热力舱引出口 纵断
|
|
AcDbPolyline* HTOutLetHouseSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks) const;
|
|
|
|
//水电管廊引出口 纵断
|
|
AcDbPolyline* EWOutLethouseSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast) const;
|
|
|
|
//消防纵断
|
|
AcDbPolyline* FireOutletSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, double dThick, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks) const;
|
|
|
|
//逃生口纵断
|
|
AcDbPolyline* EscapeHatchSection2d(const EWFnctNode* pNext, double dGradient, double dDistFrom, double dHeight, const AcGePoint2d& ptLast, AcGePoint2dArray& arBreaks, AcGiDraw* pDC = NULL, AcGeVector2d* pvtDirX = NULL) const;
|
|
|
|
Acad::ErrorStatus DrawDoghouseVSection2d(AcGiDraw* pDC, const EWFnctNode* pNext, AcGePoint2d& ptLBak, double dGradient) const;
|
|
|
|
//绘制横断2
|
|
Acad::ErrorStatus DrawHorSection(AcGiDraw &dc) const;
|
|
|
|
//绘制预制
|
|
Acad::ErrorStatus DrawPrefabricated(AcGiDraw &dc) const;
|
|
|
|
//绘制中心上的各种标记和开孔
|
|
Acad::ErrorStatus DrawCrossShapeDim(AcGiDraw &dc, const AcGePoint3dArray& arCenPoints, const AcGeIntArray& arEntypes, const CUIntArray& arColors,double dWidth) const;
|
|
|
|
//绘制二维开口
|
|
Acad::ErrorStatus Draw2dDoghouseTopView(AcGiDraw &dc, AcArray<EWFnctNodeGrip>& arInfNodes, bool bDraw = true) const;
|
|
|
|
//清理图元的特定writeenable
|
|
void AssertWriteEnabled(Adesk::Boolean autoUndo = true, Adesk::Boolean recordModified = true);
|
|
|
|
//绘制3D分段
|
|
Acad::ErrorStatus DrawSegment(int iColor, const EWSegment& seg, const AcGePoint3d& ptFr, ESection eSecType, const AcGePoint2dArray& arSizeDatas, AcGiDraw& dc) const;
|
|
Acad::ErrorStatus CalEarthWorkSeg(int idIndex, int iColor, const EWSegment& seg, const AcGePoint3d& ptFr, AcGeVector3d& vtDir3d, ESection eSecType, const AcGePoint2dArray& arDatas, AcArray<EWFnctNodePos>& arNodePos, AcGePoint2dArray& arPtPos) const;
|
|
|
|
//获取倒角点
|
|
void GetChamferPoint(AcGePoint3d& ptGe0, const AcGeVector3d& vtX, const AcGeVector3d& vtY, AcGePoint3d& ptGe1, AcGePoint3d& ptGe2) const;
|
|
|
|
//创建基本面域
|
|
AcDbRegion* CreatePolygonRegion(AcGePoint3d* pPoints, int nSize, bool bUsCham = false) const;
|
|
AcDbRegion* CreatePolygonRegion(const AcGePoint3d& ptLCen, const AcGePoint2d& ptSize, double dAngle,bool bUsCham = true) const;
|
|
|
|
public:
|
|
static AcDbRegion* CreatePolygonRegionOnly(AcGePoint3d* pPoints, int nSize);
|
|
static AcDbRegion* CreateRetangeRegion(AcGePoint3d* pPoints, int nSize);
|
|
|
|
static AcDbRegion* CreateCircleRegion(double dD, double dt);
|
|
static AcDbRegion* CreateCircleRegion(double dD, const AcGePoint3d& ptCen, const AcGeVector3d& vtNorm);
|
|
|
|
static double Cal3dSolidConvexhullVol(AcDbVoidPtrArray& arUnionSolidPtrs, AcDbVoidPtrArray& arOther3dPtrs);
|
|
static double Cal3dSolidConvexhullVol(AcDb3dSolid* pEWSolid);
|
|
|
|
static AcDb3dSolid* CreateColumn(const AcGePoint3d& ptCen, const AcGeVector3d& vtX, const AcGeVector3d& vtY, double dH, double dW);
|
|
static AcDb3dSolid* CreateBeam(const AcGePoint3d& ptBFr, const AcGePoint3d& ptBTo, double dW);
|
|
|
|
static AcDbRegion* CreateRegionByCen(AcGePoint3d* pptGeLn,int nPoints,int nFlag,double dW);
|
|
static AcDbRegion* CreateRegionByCen(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtNorm,double dW);
|
|
|
|
static AcDbRegion* CreateRegionFence(AcGePoint3d* pptGeLn,int nPoints,int nFlag,double dW,const AcGePoint3d& ptGe1OnEw);
|
|
|
|
protected:
|
|
Acad::ErrorStatus MerageOutletPort(AcDbPolyline* pPL, int nPos, const AcGePoint2dArray& arDatas,bool bOnlyFilter = false) const;
|
|
|
|
static Acad::ErrorStatus ConnectLastOrNext(AcDbPolyline* pPl, const AcGePoint3d& ptCen, const AcGeVector2d& vtThis, const AcGeVector3d& vtCn, int nPos,AcGeVector3d vtOff3d = AcGeVector3d::kIdentity);
|
|
static AcDb3dSolid* ConnectLastOrNext(AcDb3dSolid* pEWSolid, const AcGeLineSeg3d& lnSub, AcDbRegion* pRegion, const AcGeVector3d& vtCn, double dH, int nPos,AcGeVector3d vtOff3d = AcGeVector3d::kIdentity);
|
|
|
|
Acad::ErrorStatus GetSubSegNodeVolume(EWFnctNode* pNext, AcDbVoidPtrArray& arUnionSolidPtrs) const;
|
|
|
|
public:
|
|
|
|
int GetLeftOrRightThickAdd(double& dAdd) const;
|
|
|
|
//创建截面Region
|
|
AcDbRegion* CreateSectionRegion(AcGeLineSeg3d& ln, ESection eSecType, const AcGePoint2dArray& arDatas, bool bHasCutRegion = true, bool bHasBosRegion = true) const;
|
|
|
|
//创建外围Region
|
|
AcDbRegion* CreateOutSectionRegion(AcGeLineSeg3d& ln,ESection eSecType,const AcGePoint2dArray& arDatas) const;
|
|
|
|
//创建每个舱室内region
|
|
int CreateSectionRoomRegion(AcGeLineSeg3d& ln, ESection eSecType, const AcGePoint2dArray& arDatas, AcDbVoidPtrArray& arRegPtrs) const;
|
|
|
|
//创建每个舱室的断面附属物
|
|
int OffsetMapToSplitRoom(const CStringArray& arInf,ERoom& room,int nIndex) const;
|
|
//兼容盾构方法
|
|
int AlongRoomSide(AcGePoint3d& pt,int nRoomIndex,const AcGeVector3d& vtX) const;
|
|
|
|
int CreateSectionRoomAddition(AcGeLineSeg3d& ln,ESection eSecType,AcDbVoidPtrArray& arEntPtrs);
|
|
int CreateHolderSection(LPCTSTR pszScript,AcGeLineSeg3d& ln,ESection eSecType,AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateBossSection(LPCTSTR pszScript,AcGeLineSeg3d& ln,ESection eSecType,AcDbVoidPtrArray& arEntPtrs,bool bOnlyAddBoss = false);
|
|
int CreateHangerSection(LPCTSTR pszScript,AcGeLineSeg3d& ln,ESection eSecType,AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateRingsSection(LPCTSTR pszScript,AcGeLineSeg3d& ln,ESection eSecType,AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateLampsSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateFileEETSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateGutterwaySection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs);
|
|
int CreateFireDoorSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateSecuritySection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateDraFanSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateGasAlarmSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateBomAddSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs);
|
|
int CreateRoomSlabSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateRoomNameSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateSplitRoomSection(AcGeLineSeg3d& ln,ESection eSecType,AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateSmokAlarmSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateTempAlarmSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateCoAlarmSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
int CreateOxAlarmSection(LPCTSTR pszScript, AcGeLineSeg3d& ln, ESection eSecType, AcDbVoidPtrArray& arEntPtrs) const;
|
|
|
|
//剖切提取
|
|
virtual int GetSectionDraw(const AcGePoint3d& ptFr, const AcGePoint3d& ptTo, const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo,AcDbVoidPtrArray& arRegionPtrs) const;
|
|
int ImpGetSection(AcDb3dSolid* pSolidDraw, const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo,AcDbVoidPtrArray& arRegionPtrs) const;
|
|
|
|
//获取放样线
|
|
void GetLoftingLines(AcDbVoidPtrArray& arPlines) const;
|
|
|
|
protected:
|
|
|
|
//创建排水沟Region
|
|
AcDbRegion* CreateWaterwayRegion(const AcGePoint3d& ptLCen, const AcGePoint2d& ptSize, double dAngle, AcGePoint3d& ptWaterway) const;
|
|
|
|
//创建凸台 region
|
|
AcDbRegion* CreateBossRegion(const AcGePoint3d& ptLCen, const AcGePoint2d& ptSize, double dAngle, const AcGePoint3d& ptBoss,double dL) const;
|
|
int CreateBossesRegion(AcGeLineSeg3d& ln, ESection eSecType, const AcGePoint2dArray& arDatas, AcDbVoidPtrArray& arRegPtrs) const;
|
|
//支吊架
|
|
int CreateHangerRegion(AcGeLineSeg3d& ln,ESection eSecType,const AcGePoint2dArray& arDatas,AcDbVoidPtrArray& arRegPtrs) const;
|
|
int CreateHolderRegion(AcGeLineSeg3d& ln,ESection eSecType,const AcGePoint2dArray& arDatas,AcDbVoidPtrArray& arRegPtrs) const;
|
|
|
|
//创建剖视图切割region
|
|
AcDbRegion* CreateSliceRegion(double dWidth, double dHeight) const;
|
|
|
|
//创建内腔体室region
|
|
void CreateEarthWormRoomReg(ESection eType, AcGeLineSeg3d& ln, const AcGePoint2dArray& arDatas, AcDbVoidPtrArray& arRegionPtrs, bool bCutViewReg = false) const;
|
|
|
|
//变换region到以lnNormal为法向量的面上
|
|
//盾牌从水平立起的意思
|
|
public:
|
|
static bool TransformRegionPerpToLine(AcDbRegion* pRegion, AcGeLineSeg3d& lnNormal);
|
|
static bool TransformRegionPerpToLine(AcGeLineSeg3d& ln, AcDbVoidPtrArray& arRegionPtrs);
|
|
static bool TransformRegionPerpToLine(AcArray<ERoom>& arRooms, AcGeLineSeg3d& ln);
|
|
static bool TransformRegionPerpToLine(AcGePoint3d& ptOnReg, AcGeLineSeg3d& ln);
|
|
|
|
protected:
|
|
|
|
//根据ln法向量创建一段管廊
|
|
AcDb3dSolid* CreateEarthWorm3DSeg(AcGeLineSeg3d& ln, AcDbRegion*& pRegion, bool bSinkOutlet = false, double dGradient = 0.0) const;
|
|
AcDb3dSolid* CreateEarthWorm3DSubSeg(AcGeLineSeg3d& ln, AcDbRegion* pRegion) const;
|
|
AcDb3dSolid* CreateEarthWorm3DSeg(AcDbArc* pArc,AcDbRegion*& pRegion,double dGradient = 0.0,int nOnEwPos = 0) const;
|
|
AcDb3dSolid* CreateOutEarthWorm3DSeg(AcGeLineSeg3d& ln,AcDbRegion*& pRegion,double dGradient = 0.0) const;
|
|
|
|
//段是否含有交叉下沉
|
|
bool HasSinkOutletRoom(const EWSegment& seg) const;
|
|
|
|
//计算截面房间
|
|
public:
|
|
|
|
void GetSectionRoomsTo(AcGeLineSeg3d& ln, AcArray<ERoom>& arRooms, AcGePoint2d& ptThick) const;
|
|
void GetSectionRooms(ESection eType, const AcGePoint2dArray& arDatas, AcArray<ERoom>& arRooms, AcGePoint2d& ptThick, double dAngle) const;
|
|
void GetWidthAndHeight(ESection eType, const AcGePoint2dArray arDatas, const AcGeLineSeg3d& ln, AcGePoint2d& ptSize, bool bByVScale = false) const;
|
|
|
|
//序列化快速映射
|
|
bool MakeMapBufferFast(byte* pProModel,int nProModelBufLen,LPCTSTR pszLockID);
|
|
|
|
protected:
|
|
|
|
void FreeSegments();
|
|
|
|
//创建分段的子节点部件
|
|
int CreateEarthWorm3DSubSegNode(ESection eSecType, const AcGePoint2dArray& arSizeDatas, AcGeLineSeg3d& ln, EWFnctNode* pNext, AcDbVoidPtrArray& arUnionSolidPtrs, AcDbVoidPtrArray& arSubSolidPtrs, AcDbVoidPtrArray& arOther3dPtrs) const;
|
|
|
|
//创建一个室的防火墙
|
|
bool CreateFireWall(const AcArray<ERoom>& arRooms, ESection eSecType, const AcGePoint2dArray& arDatas, AcGeLineSeg3d& ln, EWFnctNode* pNext, AcDbVoidPtrArray& arUnionSolidPtrs, AcDbVoidPtrArray& arSubSolidPtrs) const;
|
|
|
|
//创建集水井
|
|
bool CreateDrainWell(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//下沉积水井
|
|
bool DrawWaterCell(const AcGePoint3d& ptPos, const AcGeVector3d& vtDirXY, float fW, float fH, float fThick, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs) const;
|
|
|
|
//消防引出口
|
|
bool CreateFireOutlet(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//管廊引出口
|
|
void CreateEWOutLethouseHole(AcGePoint3d ptGe, float* fNodeDef, int nPos, const AcGeVector3d& vtDir, const AcGeVector3d& vtDirX, double dThick, AcDbVoidPtrArray& arSubtract3dPtrs) const;
|
|
bool CreateEWOutLethouse(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//交叉隆起 水电舱
|
|
bool CreateCrossUplifted(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//管廊交叉下沉
|
|
bool CreateSinkOutletRoom(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//管廊交叉上部八边形上部结构
|
|
bool CreateSinkOutletRoom20(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//管廊交叉下沉八边形下部结构
|
|
bool CreateSinkOutletRoom21(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//热力舱引出口
|
|
bool CreateHTOutLethouse(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
bool Create8SideCross(const AcGePoint3d& ptPos, const AcGeVector3d& vtDirX, const AcGeVector3d& vtDirXY, const AcGePoint2d& ptSize,
|
|
const AcGePoint2d& ptThick, EWFnctNode* pNext, const AcArray<ERoom>& arRooms, AcDbVoidPtrArray& arUnion3dPtrs,
|
|
AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, bool bHasBeam) const;
|
|
|
|
//异型族
|
|
bool CreateProModel(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
bool CreateRoomBroaden(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
bool HeadHasArcFilet(const AcGeLineSeg3d& ln,EWFnctNode* pNext) const;
|
|
bool TailHasArcFilet(const AcGeLineSeg3d& ln,EWFnctNode* pNext) const;
|
|
bool CreateEwArcFillet(const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//各种开口
|
|
static AcDb3dSolid* NewXBox(const AcGePoint3d& ptLB, double dL, double dW, double dH, const AcGeVector3d& vtDirL, const AcGeVector3d& vtDirW);
|
|
static AcDb3dSolid* NewXCylinder(const AcGePoint3d& ptCen, double dD, double dH, const AcGeVector3d& vtDirL);
|
|
static AcDb3dSolid* NewStairWay(const AcGePoint3d& ptFr, const AcGePoint3d& ptTo, const AcGeVector3d& vtDirX, float fStepH, float fStepW, float fStairW);
|
|
|
|
bool CreatePipeDoghouse(EFnctType eFnType, const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
bool CreateUserDoghouse(EFnctType eFnType, const AcArray<ERoom>& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const;
|
|
|
|
//绘制爬梯
|
|
Acad::ErrorStatus DrawCatLadder(const AcGePoint3d& ptGe, const AcGeVector3d& vtDirX, const AcGeVector3d& vtDirXY, double dTH, AcDbVoidPtrArray& arOther3dPtrs) const;
|
|
|
|
//绘制直梯
|
|
Acad::ErrorStatus DrawCatLadderH(const AcGePoint3d& ptGe, const AcGeVector3d& vtDirX, const AcGeVector3d& vtDirXY, double dTH, AcDbVoidPtrArray& arOther3dPtrs) const;
|
|
|
|
//内部调用
|
|
void SetCalEarthWorkResult(AcArray<ELongParam>& arELongParams) const;
|
|
|
|
//内部调用
|
|
bool ImpCopySegments(AecDbEarthWorm* pEWSrc);
|
|
|
|
bool BreakPolyline(AcDbPolyline* pPl, AcGePoint2dArray& arBreakPts1, AcDbVoidPtrArray& arPlPtrs) const;
|
|
bool BreakPolyline(AcGePoint2dArray& arBreakPts1, AcDbPolyline*& pPlO1, AcDbPolyline*& pPlI1, AcGiDraw &dc) const;
|
|
|
|
bool AddVerPLineAtBreakPoint(AcGePoint2dArray& arBreakPts1, AcDbPolyline* pPlO1, AcDbPolyline* pPlI1, CMap<int, int, PVOID, PVOID>& mapIndx2NodePtr, AcGiDraw& dc) const;
|
|
|
|
Acad::ErrorStatus ReAssocPortRooms(AecDbEarthWorm* pWorm, AcDbObjectIdArray& arPortRooms, int nSegIndexFr, int nSegIndexTo);
|
|
|
|
bool MakeStake2UCSXPos() const;
|
|
|
|
bool SatsOutStep(LPCTSTR pszFile, AcDb3dSolid* pSolid, int nPos, const AcGeMatrix3d& xformMove) const;
|
|
|
|
// 内部调用,为管廊上的族节点修改标高
|
|
void ModifyElevForXXXDoghouse(const AcGeVector3d &vt, const int &segIdx = -1);
|
|
void ModifyElevForXXXDoghouse(const double &deltaElev, const int &segIdx = -1);
|
|
|
|
//舱室拓宽边线处理
|
|
Acad::ErrorStatus MerageRoomBroadenPl(AcGePoint3d* pptGe8,int nPts,AcDbPolyline* pPL,int nFlag,float fFlag,AcGePoint3d* ppGeSeg = NULL) const;
|
|
Acad::ErrorStatus MerageRoomArcFilletPl(AcDbPolyline* pPL,int i,EWFnctNode* pFncNodeNext,AcGePoint3d* ppGeSeg = NULL) const;
|
|
|
|
//需要序列化
|
|
protected:
|
|
|
|
//管廊数据 道路的一段一段设计
|
|
AcGePoint2d m_ptStart; //管廊起点,中心线起点
|
|
AcGePoint2d m_ptEnd; //管廊终点,中心线终点
|
|
|
|
AcGeVector3d m_vtLast; //上段管廊接本段开始向量
|
|
AcGeVector3d m_vtNext; //下段管廊接本段末端向量
|
|
|
|
AcGePoint2d m_ptVStart; //管廊二维纵段出图起点
|
|
|
|
float m_dOffset; //偏移,逆时针
|
|
float m_dStartEl; //起点标高,后续标高通过坡度计算,外底面标高
|
|
AcGePoint3dArray m_arRoadCenPts; //设计 道路中心线 pt.z 为标高
|
|
AcGePoint3dArray m_arOldRoadCenPtrs; //现状 道路中心线 pt.z 为标高
|
|
bool m_bShowTableHead; //是否显示表格标题
|
|
AcArray<EWSegment> m_arSegments; //管廊坡度分段
|
|
CString m_sCrossSectionScr; //截面定义,脚本
|
|
|
|
//管廊显示俯视图 2D
|
|
Adesk::UInt16 m_nSectionDrawStyle; //俯视0 纵断1 横断 2
|
|
Adesk::UInt16 m_nLookDwonDrawStyle; //俯视图,总图单线 0 舱素线(双线) 1
|
|
float m_dSingleLnWidth; //总图单线单线绘制线宽 1.5 mm
|
|
float m_dBoundaryWidth; //舱素线俯视图线宽 0.5 mm
|
|
float m_dCtrlDimLineLen; //控制线十字长度 500.0 mm
|
|
float m_dXDrawScale; //纵向出图比例;
|
|
float m_dYDrawScale; //横向出图比例;一般不用
|
|
|
|
//管廊显示 3D样式
|
|
Adesk::UInt16 m_nDraw3DStyle; // 全三维 0; 局部剖视(1/4) 1; 水平剖视(1/2) 2;垂直剖视(1/2) 3;
|
|
|
|
//管廊内部尺寸
|
|
AcGePoint3dArray m_arWaterwaySize; //排水沟尺寸位置 x 款,y高 z室位置索引 左0 右1
|
|
float m_dWaterwayGrad; //排水沟地面梯度
|
|
float m_dChamferInter; //内侧倒角尺寸
|
|
AcArray<EBoss> m_arBosses; //凸台 pt代表 x 凸台中心距离室内左边尺寸 y, z 台宽高
|
|
|
|
//外部关联
|
|
AcDbObjectIdArray m_arPortRoomIds; //接口的外部房子,可以像门窗那样删减移动
|
|
AcDbObjectId m_idHeadConnect; //首部相连的管廊连接结构
|
|
AcDbObjectId m_idTailConnect; //尾部相连的管廊连接结构
|
|
|
|
//预留数据
|
|
AcDbObjectIdArray m_arIDAddtions; //附属构件
|
|
TCHAR m_szReserved[1024]; //预留数据
|
|
AcGePoint3dArray m_arPtReserved; //预留数据
|
|
AecDbObjXDataMap m_objXDataMap; //预留数据
|
|
|
|
//以下不需要序列化
|
|
public:
|
|
static GripAppData s_gripAppData[GRIP_MAXNUM_FITTING]; //夹点
|
|
//mutable AcArray<ELongParam> g_arELongParams; //一条线管廊计算数据,半全局
|
|
mutable std::map<CString,AcGePoint3d> m_mapLockIDToPlPtr;//lock to pl 映射
|
|
|
|
// 决定着管廊前后两端是否绘制封口线
|
|
// -1 前后都绘制 0 不绘制 1起始端绘制 2 结束端绘制
|
|
int m_nSideDrawMode;
|
|
|
|
protected:
|
|
// mutable AcDbVoidPtrArray m_ar2DDrableBufPtrs; //临时缓存
|
|
// mutable AcDbVoidPtrArray m_ar3DDrableBufPtrs; //临时缓存
|
|
mutable AcDbVoidPtrArray m_ar3DOtherBufPtrs; //临时缓存,不计算体积部分
|
|
|
|
mutable AcDbVoidPtrArray m_ar2DPrefbrtBufPtrs; //预制件或纵断表格临时缓存
|
|
mutable AcArray<CPoint> m_arPrefabGroups; //预制件分段出图分组[nFr,nTo]
|
|
mutable AcDbVoidPtrArray m_ar2DDrableBufPtrs2; //总图备份,纵断时保留总图显示
|
|
mutable CMapStringToDouble m_mapStake2UCSXPos; //临时映射
|
|
|
|
// 都在draw3d中使用
|
|
mutable AcDbVoidPtrArray m_arSubDMeshBuffer2d;
|
|
mutable AcDbVoidPtrArray m_arSubDMeshBuffer3d;
|
|
|
|
//外部附属设施,房子
|
|
friend class AecDbPortRoom;
|
|
friend class AecDbVenDoghouse;
|
|
friend class AecDbPipeDoghouse;
|
|
friend class AecDbCableDoghouse;
|
|
friend class AecDbEscapeHatchHouse;
|
|
friend class AecDbEarthWormFitting;
|
|
friend class AcDbX3dSolid;
|
|
friend class AecDbXXXDoghouse;
|
|
friend class AecDbBuriedOutletDoghouse;
|
|
friend class AecDbX3dGroup;
|
|
};
|
|
|