现象:开图期间 AecDbEwPipeBase::RegionAcisoutDwgOutFields 被调用 1140 次、耗时 2.38 s, 把截面写成临时 SAT 文件。用 AEC_WRITEBACK_TRACE 抓栈 + tools/resolve_rva.ps1 解符号, 定位到 AecDbZLineStair::DrawGuarBar3d 里的 pipe.clone(): clone 走 AcDbObject → AecDbEwPipeBase::copyFrom → CopyObject(整实体 dwgOutFields/dwgInFields 往返),于是截面被写成临时文件再读回。 这些 clone 的唯一用途是存进 m_pipes,供 ToJson() 导出 __pipes__,而截面参数在 SetSection 时已经写进 spec XData(KEY_SECSHAPE / KEY_SIZE1 / KEY_SIZE2 / PIPE_THICK / KEY_SECCEN),完全可以按参数重建。因此把"建几何"推迟到导出时: - AecDbEwPipeBase::BuildSectionFromXData():按 XData 参数重建截面(圆形/矩形; 自定义截面返回 NULL,那种只能存在于 SAT 里) - AecDbEwPipeBase::CloneParamsOnly():生成只带参数(XData、放样线、实体属性、GUID、 Breaks)、不含截面几何的副本,不触发任何序列化 - AecDbEwPipeBase::ToJson():GetSection() 为空时回退到 BuildSectionFromXData(), 保证 __section__ / __section2__ 仍然导出 - 30 处 m_pipes.push_back((AecDbEwPipe*)pipe.clone()) 改为 pipe.CloneParamsOnly(): ClimbStair(10)、ZLineStair(6)、BossHolder(4)、MRPLineStair(4)、Hanger(3)、Holder(3) 过程:先只改楼梯两个文件,回写从 1140 降到 960;再抓栈解析出剩余 960 全部来自 AecDbClimbStair::DrawLadderH3d,于是把其余 20 处一并改掉,最终归零。 实测(big1.dwg / AutoCAD 2020 / R230 Debug): 开图墙钟 初始 108~113 s -> 缓存后 98 s -> 本次 93 s 开图期回写 1140 次/2.38 s -> 1140 次 -> 0 RegionAcisIn 3082 次 -> 3082 次 -> 1942 次 临时文件 6773/9.34MB -> 2694/3.34MB -> 1733/2.34MB 截面恢复总耗时 22.4 s -> 9.87 s -> 9.4 s 另外把 SectionPerf::TraceCallStack 的输出改写到独立的 aec_writeback_trace.txt, 不再写进 ENVIPERFDUMP 的报告文件(否则脚本会把"栈写出来了"误判成"开图完成")。 验证:R230 Debug 编译通过并部署;用 tools/run_acad_perf.ps1 自动开图取数。 待验证:JSON 导出。m_pipes 里现在是不含几何的参数副本,ToJson 靠 BuildSectionFromXData() 重建,需要实际触发一次导出,确认 __pipes__ 里每条仍有 __section__ / __section2__ 且与改动前一致。
454 lines
14 KiB
C++
454 lines
14 KiB
C++
#pragma once
|
|
|
|
#include "AecDbCurveBase.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
#include "AecComplexCurveDraw.h"
|
|
#include "AecDbX3dPart.h"
|
|
|
|
#ifndef MAX_AXISROTATS
|
|
#define MAX_AXISROTATS 16
|
|
#endif
|
|
|
|
#ifdef EARTHWORM_EXPORT
|
|
#define DLLIMPEXP __declspec(dllexport)
|
|
#else
|
|
#define DLLIMPEXP __declspec(dllimport)
|
|
#endif
|
|
|
|
#include "AecMInterfaces.h"
|
|
|
|
typedef struct PipeHatch
|
|
{
|
|
TCHAR szPattern[65];
|
|
double dScale;
|
|
double dAngle;
|
|
}PipeHatch;
|
|
|
|
typedef struct DrawContext
|
|
{
|
|
double dD;
|
|
AcGeVector3d vtDrawPlanNorm;
|
|
AcGeVector3d vtDir;
|
|
double dSingleW;
|
|
double dDbLineW;
|
|
int nShape;
|
|
int nDrawGradient;
|
|
int nColor;
|
|
AcDbObjectId idCurLay;
|
|
AcDbObjectId idCurLty;
|
|
int nCrBk;
|
|
AcDbCurve* pBaseCurXY;
|
|
}DRAWCONTEXT;
|
|
|
|
class DLLIMPEXP AecDbEwPipeBase : public AecDbCurveBase,
|
|
public AecMInterfaces
|
|
{
|
|
public:
|
|
ACRX_DECLARE_MEMBERS(AecDbEwPipeBase);
|
|
|
|
protected:
|
|
static Adesk::UInt32 kCurrentVersionNumber;
|
|
|
|
public:
|
|
AecDbEwPipeBase(void);
|
|
virtual ~AecDbEwPipeBase(void);
|
|
|
|
AcGePoint3d StartPoint() const;
|
|
AcGePoint3d EndPoint() const;
|
|
|
|
virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);
|
|
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;
|
|
virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler);
|
|
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
|
|
|
|
virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc);
|
|
|
|
//清除后续特化的二维图形数据
|
|
virtual Acad::ErrorStatus ClearForDraw2dables();
|
|
|
|
#if ARX>16
|
|
virtual void subList() const;
|
|
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
|
|
|
|
virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray& grips,
|
|
const double curViewUnitSize,
|
|
const int gripSize,
|
|
const AcGeVector3d& curViewDir,
|
|
const int bitflags) const;
|
|
|
|
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags);
|
|
|
|
virtual Acad::ErrorStatus subGetGripPoints (AcGePoint3dArray& gripPoints,AcDbIntArray& osnapModes,AcDbIntArray& geomIds) const;
|
|
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
|
|
|
|
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;
|
|
#endif
|
|
|
|
public:
|
|
|
|
virtual AcDbCurve* GetBaseCurve(bool bOrthoProjectToXY = false) const;
|
|
virtual AcDbCurve* GetNativeCurve() const;
|
|
|
|
virtual Acad::ErrorStatus subErase(Adesk::Boolean erasing);
|
|
|
|
//AEC 派生
|
|
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
|
|
virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const;
|
|
|
|
//绘制分段
|
|
virtual Acad::ErrorStatus Draw2dSingleSegment(AcGiDraw &dc,AcDbPolyline* pPl) const;
|
|
|
|
//绘制接口
|
|
virtual Acad::ErrorStatus DrawInfArrow(AcGiDraw &dc) const;
|
|
|
|
virtual LPCTSTR GetGripCmd() const;
|
|
|
|
bool IsArcBaseCurve() const;
|
|
|
|
void DrawSubAxis(AcGiDraw &dc,AcDbEntity* pEnt) const;
|
|
|
|
void DrawGradient(AcGiDraw &dc,AcDbCurve* pBaseCur) const;
|
|
|
|
void DrawHatch(AcGiDraw& dc) const;
|
|
void DrawHatch(AcGiDraw& dc,AcDbPolyline* pPl) const;
|
|
|
|
protected:
|
|
|
|
AcDbCurve* BaseCurveDwgInFields(AcDbDwgFiler* pFiler,int nVer = 5);//5 默认兼容之前
|
|
|
|
AcDbRegion* RegionAcisInDwgInFields(AcDbDwgFiler* pFiler);
|
|
AcDbRegion* RegionFromCurvesDwgInFields(AcDbDwgFiler* pFiler,Adesk::UInt32 nLen);
|
|
AcDbRegion* SectionRegionDwgInFields(AcDbDwgFiler* pFiler,int nVer);
|
|
|
|
Acad::ErrorStatus BaseCurveDwgOutFields(AcDbCurve* pBaseCurve,AcDbDwgFiler* pFiler) const;
|
|
|
|
Acad::ErrorStatus RegionAcisoutDwgOutFields(AcDbDwgFiler* pFiler) const;
|
|
Acad::ErrorStatus SectionRegionDwgOutFields(AcDbDwgFiler* pFiler,int nVer) const;
|
|
|
|
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:
|
|
|
|
virtual void AssertWriteEnabled(Adesk::Boolean autoUndo = true, Adesk::Boolean recordModified = true );
|
|
|
|
//设置中心路径,几种方式
|
|
virtual Acad::ErrorStatus SetBaseCurve(const AcArray<EWStackPoint>& arStackPts);
|
|
virtual Acad::ErrorStatus SetBaseCurve(const AcGePoint3dArray& arPts);
|
|
virtual Acad::ErrorStatus SetBaseCurve(const AcDbCurve* pCurve);
|
|
virtual Acad::ErrorStatus SetBaseCurve(const AcGePoint3d& ptSta,const AcGePoint3d& ptEnd);
|
|
virtual Acad::ErrorStatus SetBaseCurve(const AcGePoint3d& ptSta,const AcGeVector3d& vtDir);
|
|
|
|
/*
|
|
_ pt3 _ pt2
|
|
| | | |
|
|
| | | |
|
|
| | | |
|
|
| |__________| |
|
|
|______________|
|
|
pt0 O pt1
|
|
O - 原点
|
|
pt0->pt1 w
|
|
pt1->pt2 h
|
|
pt2->pt3 t
|
|
*/
|
|
Acad::ErrorStatus SetSection1(const double &w, const double &h, const double &t,bool bCenOrg = false);
|
|
|
|
/*
|
|
| | O | |
|
|
\ \ / /
|
|
\ \ / /
|
|
\ \ / /
|
|
\ \_pt1_/ /
|
|
\______/
|
|
pt0
|
|
O - 原点
|
|
pt0->pt1 r 内径
|
|
O->pt1 厚度
|
|
*/
|
|
Acad::ErrorStatus SetSection2(const double &r, const double &t,bool bCenOrg = false);
|
|
|
|
//通用设置截面
|
|
Acad::ErrorStatus SetSection(AcDbPolyline* pPl,const AcGePoint3d& ptCen);
|
|
|
|
//设置截面为管道外径和壁厚
|
|
Acad::ErrorStatus SetSection(double dD,double dt);
|
|
|
|
//设置为方管 长x宽x厚 水平面为长,Z向为宽
|
|
Acad::ErrorStatus SetSection(double dL,double dW,double dt);
|
|
|
|
//设置为墙体 长(dThick)x宽(dH) 水平面为长,Z向为宽 YEL为Y偏移量
|
|
Acad::ErrorStatus SetSection(double dThick,double dH,double dYOff,EAlign kAlign);
|
|
|
|
//通用截面
|
|
Acad::ErrorStatus SetSection(AcDbRegion* pReg,const AcGePoint3d& ptCen);
|
|
|
|
//设置角钢截面
|
|
Acad::ErrorStatus SetSection3(double dL,double dt);
|
|
|
|
//设置为直角三角截面
|
|
Acad::ErrorStatus SetSection3(double dLx,double dLy,double dt);
|
|
|
|
//设置正多边形
|
|
Acad::ErrorStatus SetSectionN(double dR, int nSides);
|
|
|
|
//通用获取外径和壁厚
|
|
Acad::ErrorStatus GetODAndThick(AcGePoint2d& ptODt) const;
|
|
|
|
//获取垂直切外径和厚度
|
|
Acad::ErrorStatus GetODAndID(AcGePoint2d& ptrODtTop,AcGePoint2d& ptrODtBom) const;
|
|
|
|
//获取断面面积
|
|
double GetSectionArea(bool bHasInside = false) const;
|
|
|
|
//获取最大reg面积
|
|
double CalBigRegionArea() const;
|
|
|
|
//获取最大region
|
|
AcDbRegion* GetBigRegion() const;
|
|
|
|
//获取腔体region
|
|
AcDbRegion* GeCavityRegion() const;
|
|
|
|
//获取截面的复制
|
|
AcDbRegion* GetSection() const;
|
|
// 按 XData 里存的截面参数(SECS HAP/SIZE1/SIZE2/THICK)重建截面,调用方负责释放。
|
|
// 用于"延迟导出":绘制期只留参数副本,导出 JSON 时再建几何。
|
|
AcDbRegion* BuildSectionFromXData() const;
|
|
|
|
// 生成一个只带参数(不含截面几何)的副本,供 m_pipes 之类"延迟导出"的容器使用。
|
|
// 与 clone() 的区别:不触发 dwgOutFields 序列化,因此不会把截面写成临时 SAT 文件。
|
|
AecDbEwPipeBase* CloneParamsOnly() const;
|
|
|
|
|
|
//设置界面绕轴旋转,以X 方向为基准
|
|
Acad::ErrorStatus SetSectionRotation(double dAngle);
|
|
double GetSectionRotation() const;
|
|
|
|
//获取路径总长,是否包括省略长度
|
|
double GetLength(bool bHasBreakOpenLen = false) const;
|
|
|
|
//添加截断
|
|
Acad::ErrorStatus AddBrokenOpen(double dOffFrSta,double dSize,double dTrueSize);
|
|
Acad::ErrorStatus RemoveBrokenOpen(double dOffFrSta);
|
|
Acad::ErrorStatus RemoveBrokenOpen(int nIndex);
|
|
Acad::ErrorStatus GetBrokenOpenPnts(AcGePoint3dArray& arPnts) const;
|
|
|
|
//获取首尾切线方向[接口方向]
|
|
virtual AcGeVector3d GetHeadDir() const;
|
|
virtual AcGeVector3d GetTailDir() const;
|
|
|
|
//设置起点的标高,后续根据坡度计算高程
|
|
virtual void SetStartElevation(float dEl);
|
|
virtual float StartElevation() const;
|
|
|
|
//通过末点标高计算起点标高
|
|
virtual void SetEndElevation(float dEl);
|
|
virtual float EndElevation() const;
|
|
|
|
//获取位置标高0 中心 1顶部 2内底部 3 外底部 4内顶部
|
|
virtual float GetElevation(int nPos) const;
|
|
|
|
//节点标高
|
|
virtual void SetVertexElevation(int nGripIndex,float dEl);
|
|
virtual float GetVertexElevation(int nGripIndex) const;
|
|
|
|
//设置坡度
|
|
virtual bool SetGradientAt(int nPos, double dGradient);
|
|
virtual double GetGradientAt(int nPos) const;
|
|
|
|
//专业数据 和绘制设置 特别说明,在实体的 draw2/3d 中使用 GetSpecialtyData,必须AcDb::kForRead!!! 否则图不能保存
|
|
AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite);
|
|
const AecDbObjXDataMap* GetSpecialtyData() const;
|
|
|
|
//获取二维视图显示的图形
|
|
virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const;
|
|
|
|
//获取三维显示图形
|
|
virtual int GetDraw3dables(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo = false) const;
|
|
|
|
//剖切提取,符号法,对于管线构件
|
|
virtual bool GetSectionDraw(AcGePlane& plan,const AcGeVector3d& vtTo,AcDbVoidPtrArray& arRegionPtrs) const;
|
|
|
|
//剖切提取,范围面剖切Slice切割法,对于土建构件
|
|
virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const;
|
|
|
|
//如下对于盾构巷道对象有意义
|
|
//整体体积
|
|
virtual double GetVolume(bool bIsBody = false) const;
|
|
|
|
//腔体体积 nRoom = -1 全部
|
|
double GetCavityVolume(int nRoom) const;
|
|
|
|
//外表面积
|
|
double GetOutSideArea() const;
|
|
|
|
//内表面积
|
|
double GetInSideArea() const;
|
|
|
|
//壁厚 0 上壁厚 1下壁厚 2水平壁厚
|
|
bool GetThick(int nPos,double& dThick) const;
|
|
|
|
//接口方法重载
|
|
MINTERFACES_METHODS
|
|
|
|
//获取唯一性标识
|
|
virtual LPCTSTR GetGUID() const;
|
|
virtual void SetActive(bool bActive);
|
|
virtual bool IsActive() const;
|
|
virtual void NewGUID();
|
|
|
|
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;
|
|
|
|
AcDb3dSolid* GetCreatPipe3dSolid() const;
|
|
virtual int GetCreatPipe3dSolid(AcDbVoidPtrArray& ar3DSolidPtrs) const;
|
|
|
|
bool ReadDandRatio(AcGePoint2d& ptDRatio) const;
|
|
|
|
void SetHatch(LPCTSTR pszPatternName,double dAngle,double dScale);
|
|
bool GetHatch(PipeHatch& sHatch) const;
|
|
|
|
//断管符号的绘制,仅仅适用管线
|
|
void DrawBrokenOpen(AcGiDraw &dc,AcGePoint3d& ptFr,AcGePoint3d& ptTo,double dD,AecComplexCurve& cplCurve) const;
|
|
void DrawDashSegment(AcGiDraw &dc,AcGePoint3d& ptFr,AcGePoint3d& ptTo,double dD,AecComplexCurve& cplCurve) const;
|
|
|
|
void DrawSide(AcGiDraw &dc,AcGePoint3d ptSideCen,AcGeVector3d vcDir,double dD,AecComplexCurve& cplCurve,bool bMirror) const;
|
|
|
|
//设置剖切图层
|
|
void SetSectionLayer(int nIndexFr,AcDbVoidPtrArray& arRegionPtrs,const AcDbObjectId& idLayer) const;
|
|
|
|
//后续的法兰管子
|
|
virtual Acad::ErrorStatus DrawFlangInf2d(AcGiDraw &dc) const;
|
|
virtual Acad::ErrorStatus DrawFlangInf3d(AcGiDraw &dc) const;
|
|
|
|
virtual Acad::ErrorStatus DrawUserInf(AcGiDraw &dc) const;
|
|
virtual Acad::ErrorStatus DrawUserInf3d(AcGiDraw &dc) const;
|
|
Acad::ErrorStatus BoolSubtractUserInf3d(AecDbX3dPart &part) const;
|
|
|
|
Acad::ErrorStatus DrawSingle2d(AcGiDraw &dc,DrawContext& dcCon) const;
|
|
Acad::ErrorStatus DrawDouble2d(AcGiDraw &dc,DrawContext& dcCon) const;
|
|
|
|
virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const;
|
|
virtual bool ByJson(const SHJson::WValue &v);
|
|
|
|
//获取墙体的所有的洞Solid
|
|
virtual Acad::ErrorStatus GetAllHolesSolid(AcDbVoidPtrArray& arSolidPtrs,AcDbVoidPtrArray& arCenLnPtrs,const AcGeMatrix3d& xform) const;
|
|
|
|
Acad::ErrorStatus DefaultNo();
|
|
|
|
void SetPlotWidth(double dW);
|
|
|
|
void GetAssocHandleObjs(AcDbObjectIdArray& arIds);
|
|
|
|
static bool hasHatch(const AcDbEntity *pEnt, const int &var);
|
|
|
|
virtual bool GetPositionGrip(int nIndex, AecGripData *&pGrip) const;
|
|
|
|
//用户接口
|
|
void AddUserInterface(const AecUserInterface& inf);
|
|
|
|
bool RemoveUserInterface(const TCHAR* pszNo);
|
|
bool RemoveUserInterface(int nIndex);
|
|
|
|
int GetUserInterfaceCount() const;
|
|
bool GetUserInterface(int nIndex, AecUserInterface &inf) const;
|
|
bool GetUserInterface(const AcGePoint3d &ptHit, AecUserInterface &inf) const;
|
|
|
|
double GetGasketThick() const;
|
|
|
|
protected:
|
|
|
|
bool ReadUserInterface(AcDbDwgFiler *pFiler);
|
|
void WriteUserInterface(AcDbDwgFiler *pFiler) const;
|
|
protected:
|
|
|
|
//轨迹数据
|
|
mutable AcDbCurve* m_pBaseCurve;
|
|
|
|
//截面数据
|
|
mutable AcDbRegion* m_pRegion;
|
|
|
|
//打断间隙段[作废]->改为预留使用
|
|
AcArray<BreakPos> m_arBreaks;
|
|
|
|
//活动接口
|
|
Adesk::Int16 m_nInfActive;
|
|
CString m_sGUID;
|
|
bool m_bActive;
|
|
bool m_bShowFlowDir;
|
|
bool m_bIsMainLock;
|
|
bool m_bIsMinLock;
|
|
|
|
//专业数据
|
|
AecDbObjXDataMap m_mapSpecXData;
|
|
|
|
//新版本
|
|
AcArray< AecUserInterface> m_arUserInfs; //用户自定义接口带管长
|
|
|
|
//其他按通用图层和线型
|
|
AcDbSoftPointerId m_idSingleLayer;
|
|
AcDbSoftPointerId m_idSingleLnType;
|
|
|
|
//双线图层和线型
|
|
AcDbSoftPointerId m_idDoubleLayer;
|
|
AcDbSoftPointerId m_idDoubleLnType;
|
|
|
|
//遮挡图层
|
|
AcDbSoftPointerId m_idDashLayer;
|
|
|
|
//中心线图层
|
|
AcDbSoftPointerId m_idCenterLayer;
|
|
|
|
protected:
|
|
mutable AcDbVoidPtrArray m_arDrawBuffer3d1; //子类附临时附加的图元集合
|
|
mutable AcDbVoidPtrArray m_arDrawBuffer3d2; //子类附临时附加的图元集合
|
|
mutable AcDbVoidPtrArray m_ar2DDrableBufPtrs2; //总图备份,纵断时保留总图显示
|
|
AecGripData* m_pGripAppData;
|
|
};
|