#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& arBosses,bool bRestLast = false); bool GetBosses(int nRoomIndex,AcGePoint3dArray& arBosses) const; bool GetBosses(AcArray& arBosses) const; void RemoveBoss(int nRoomIndex, double dAtLDist); //提取管线位置分段[管位处] bool GetPipeLineSegs(int nRoomIndex,AcArray& arLnSegs, bool bAllRoom = false, bool bByWholeLine = false) const; // 提取线缆位置分段[支架处] bool GetCableLineSegsForHolder(int nRoomIndex , AcArray& 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& 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> &items) const; //获取左边特定室内高度,默认总体设置 double GetLeftRoomHeight() const; //获取右边特定室内高度,默认总体设置 double GetRightRoomHeight() const; void RemoveAllPipePos(); bool GetPipePos(AcArray& arPipePos) const; bool AddPipePos(const AcArray& 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& 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& 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& 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& arFncNodes) const; bool GetFncNodeAt(LPCTSTR pszLock, EWFnctNode& fncNode) const; //获取靶区的范围,dPickBox可以输入1m 的范围 bool GetFncNodeAt(const AcGePoint3d& pt1, double dPickBox, AcArray& arFncNodes, AcGePoint3dArray& arPoses) const; // 根据范围得到范围所有节点 bool GetFncNodeAt(const AcGePoint3d& pt1, const AcGePoint3d& pt2, AcArray &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& 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 &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& 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& 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& 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& 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& arRooms, AcGePoint2d& ptThick) const; void GetSectionRooms(ESection eType, const AcGePoint2dArray& arDatas, AcArray& 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& arRooms, ESection eSecType, const AcGePoint2dArray& arDatas, AcGeLineSeg3d& ln, EWFnctNode* pNext, AcDbVoidPtrArray& arUnionSolidPtrs, AcDbVoidPtrArray& arSubSolidPtrs) const; //创建集水井 bool CreateDrainWell(const AcArray& 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& 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& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const; //交叉隆起 水电舱 bool CreateCrossUplifted(const AcArray& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const; //管廊交叉下沉 bool CreateSinkOutletRoom(const AcArray& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const; //管廊交叉上部八边形上部结构 bool CreateSinkOutletRoom20(const AcArray& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const; //管廊交叉下沉八边形下部结构 bool CreateSinkOutletRoom21(const AcArray& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const; //热力舱引出口 bool CreateHTOutLethouse(const AcArray& 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& arRooms, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, bool bHasBeam) const; //异型族 bool CreateProModel(const AcArray& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const; bool CreateRoomBroaden(const AcArray& 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& 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& arRooms, const AcGePoint2d& ptThick, EWFnctNode* pNext, AcDbVoidPtrArray& arUnion3dPtrs, AcDbVoidPtrArray& arSubtract3dPtrs, AcDbVoidPtrArray& arOther3dPtrs, AcGeLineSeg3d& ln, const AcGePoint2d& ptSize) const; bool CreateUserDoghouse(EFnctType eFnType, const AcArray& 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& 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& 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 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 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 g_arELongParams; //一条线管廊计算数据,半全局 mutable std::map 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 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; };