164 lines
7.5 KiB
C++
164 lines
7.5 KiB
C++
#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<ObjInfoUnit> &) 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<XPoint,double> &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<WELLDIMNODE> &vecData) const;
|
||
// cet 2011.8.29 add 管内底标高是否相同
|
||
bool IsSamePipeEle(const std::vector<WELLDIMNODE> &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<WELLDIMNODE> &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<WELLDIMNODE> &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<WELLDIMNODE> &vecData) const;
|
||
// 获得管底标注时化粪池标注的文字 cet 2012.9.23 add
|
||
bool GetTextsFromPool(XStringList &lstTexts) const;
|
||
|
||
};
|
||
|