#pragma once #include "aecdbsymbwithtext.h" #include "ObjInfoUnit.h" // 管底标注辅助结构 cet 2011.8.29 add typedef struct { CString sDimText; // 标注文字 XPoint ptTurn; // 拐点 XPoint ptEnd; // 终点 double dAngle; // 角度 AcDbObjectId id; // 管id bool bFlowOut; // 是否为下游管 }WELLDIMNODE; class CDbWellDim : public AecXDbSymbWithText { public: ACRX_DECLARE_MEMBERS(CDbWellDim); private: const static Adesk::UInt8 g_nVersion; protected: //m_iDrawMode值对应的标注样式----- 0:上(井面标高) 下(井底标高); 2:上(井面标高) //下(井底标高) 右(井编号); 3:上(井编号); 4:上(井编号) 下(井底标高); //1:管底标注(文字在上方);5管底标注(文字在下方); 6: 上(井底标高) //7:管底标注(上:管内底标高 下:井面标高) 8:管底标注(上:井面标高 下:管内底标高) Adesk::UInt16 m_iDrawMode; XPoint m_ptStart, m_ptTurn; double m_nTextBaseLen; //左右由正负控制 AcDbSoftPointerId m_idWell; public: CDbWellDim(); virtual BOOL IsValid() const; void SetStartPoint(XPoint pt) { assertWriteEnabled(); m_ptStart = pt; }; void SetTurnPoint(XPoint pt) { assertWriteEnabled(); m_ptTurn = pt; }; void SetDrawMode(int iMode) { assertWriteEnabled(); m_iDrawMode = iMode; }; void SetTextBaseLen(double nVal) { assertWriteEnabled(); m_nTextBaseLen = nVal; }; void AttachWell(AcDbObjectId id) { assertWriteEnabled(); m_idWell = id; }; int GetDrawMode() const { return m_iDrawMode; }; XPoint GetStartPoint() const { return m_ptStart; }; XPoint GetTurnPoint() const { return m_ptTurn; }; double GetTextBaseLen() const { return m_nTextBaseLen; }; AcDbObjectId GetWellId() const { return m_idWell; }; void GetTexts(XStringList &lstTexts) const; bool IsOnlyDim() const; // cet 2011.8.29 add 当管内底标高相同时,是否单侧标注管底标高 void SetOnlyDim(bool bOnly); // cet 2011.8.29 add bool GetAlignType(int &nType) const; // cet 2012.7.5 add 获得对齐方式 0:居中 1:外侧 void SetAlignType(int nType); // cet 2012.7.5 add 设置对齐方式 // 单个管底标注形式存对应的管线 zxl 2013.06.07 add AcDbObjectId GetPipeId() const { const EntityFields &fd = GetFields(); AcDbSoftPointerId idPipe; fd.GFD(_T("PIPE_ID"), idPipe); return (AcDbObjectId)idPipe; } // 设置单个管底标注形式存对应的管线 zxl 2013.06.07 add void SetPipeId(AcDbObjectId idPipe) { assertWriteEnabled(); EntityFields &fd = Fields(); fd.SFD(_T("PIPE_ID"), (AcDbSoftPointerId)idPipe); } // 设置为单个管底标注样式:0 否, 1 是 zxl 2013.06.07 add void SetIsNewDim(Adesk::UInt16 nType) { assertWriteEnabled(); EntityFields &fd = Fields(); bool bRet = fd.SFD(_T("ISNEWDIM"), nType); } // 获取是否为单个管底标注样式:0 否, 1 是 zxl 2013.06.07 add Adesk::UInt16 GetIsNewDim() const { const EntityFields &fd = GetFields(); Adesk::UInt16 nDrawType = 0; bool bRet = fd.GFD(_T("ISNEWDIM"), nDrawType); return nDrawType; } // 设置基线角度:0 随支管, 1 水平 zxl 2013.06.07 add void SetBaseLineType(Adesk::UInt16 nType) { assertWriteEnabled(); EntityFields &fd = Fields(); bool bRet = fd.SFD(_T("BASELINETYPE"), nType); } // 获取基线角度 zxl 2013.06.07 add Adesk::UInt16 GetBaseLineType() const { const EntityFields &fd = GetFields(); Adesk::UInt16 nDrawType = 0; bool bRet = fd.GFD(_T("BASELINETYPE"), nDrawType); return nDrawType; } // cet 2018.1.11 add 文字距线距离 double GetText2BaseRatio() const; void SetText2BaseRatio(double dVal); public: virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); //virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const; virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler*); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler*); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); // drived from TDbEntity virtual void GetTips(DList &) const; //取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual SubText* HitTestText(XPoint pt)const { return NULL; }; virtual int GetFirstVersion()const { return 7; } //Helper Method double GetDefaultTextBaseLen() const; double GetMinTextBaseLen() const; private: Acad::ErrorStatus DrawWellEle(AcGiDraw &dc) const; Acad::ErrorStatus DrawPipeEle(AcGiDraw &dc) const; // Acad::ErrorStatus DrawWellEleUp(AcGiDraw &dc, std::map &mapData) const; // cet 2011.3.16 add 井面标高 cet 2011.8.29 del // bool IsSatisfy() const; // cet 2011.3.16 add 当井连接着两根管子时是否同管径、不跌水、管内底标高相同 cet 2011.5.3 del 更改样式7的显示 // Acad::ErrorStatus DrawPipeEle2(AcGiDraw &dc) const; // 当IsSatify()为真时 标注绘制方式 cet 2011.5.3 del 更改样式7的显示 // Acad::ErrorStatus DrawPipeEleFor7(AcGiDraw &dc)const; // 绘制管底标注样式7 cet 2011.5.3 add cet 2011.8.29 del // Acad::ErrorStatus DrawPipeEleFor8(AcGiDraw &dc)const; // 绘制管底标注样式8 cet 2011.6.16 add cet 2011.8.29 del // cet 2011.8.29.add 获取管底标注信息 void GetPipeEleData(std::vector &vecData) const; // cet 2011.8.29 add 管内底标高是否相同 bool IsSamePipeEle(const std::vector &vecData) const; // cet 2011.8.29 add nPos 表示标注方向:1 下方 0 上方 Acad::ErrorStatus DrawDimText(AcGiDraw &dc, int nDrawPos, const WELLDIMNODE &node, bool bDrawLine = true) const; // cet 2011.8.29 add 单侧标注时获取标注线, bflow表示按流向定标注线 void GetDimLine(WELLDIMNODE &node, const std::vector &vecData, bool bflow = true) const; // cet 2011.8.29 add 井面标高 CString GetWellEleUp() const; // cet 2011.11.11 add 根据规范调整管底标注标注线角度在[90,120] {270,300]内的标注位置 Acad::ErrorStatus DrawDimText2(AcGiDraw &dc, int nDrawPos, const WELLDIMNODE &node, bool bDrawLine = true) const; // cet 2011.11.11 add 判断管底标注标注线是否在[90,120] {270,300]内 bool IsInAngleRange(const WELLDIMNODE &node) const; // 是否存在唯一输出管 bool IsExistOnlyEfferent(AcDbObjectId &idPipe) const; // 删除与参数id不同但标高相同的管 void DeleteUnnecessariesNode(const AcDbObjectId &idPipe, std::vector &vecData) const; // 根据对齐方式获取对齐点 cet 2012.7.5 add void GetAlignPoint(AcGiDraw::TextAlignment &align, XPoint &ptLoc) const; // 根据对齐方式获取对齐点 cet 2012.7.6 add void GetAlignPoint(AcGiDraw::TextAlignment &align, XPoint &ptLoc, double dAngle, int nTextPos, const AcGeVector3d &vtDir, bool bRotateText = false) const; // 获取标注管线信息 cet 2012.10.19 add bool GetPipeDataFromPool(std::vector &vecData) const; // 获得管底标注时化粪池标注的文字 cet 2012.9.23 add bool GetTextsFromPool(XStringList &lstTexts) const; };