Files
envi-code/SourceCode/Code2026/Dimension/DbWellDim.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

164 lines
7.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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;
};