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

208 lines
6.8 KiB
C++

#pragma once
#include "aecDbText.h"
#include "PipePrototype.h"
// 文字样式应当有全局的设定
class CLabelStyle
{
private:
const static Adesk::UInt8 g_nVersion;
public:
CLabelStyle();
protected:
AcDbHardPointerId m_idTextStyle;// 文字样式
double m_dTextHeight; // 文字高度
double m_dTextRotation; // 旋转角度
public:// Properties
AcDbObjectId GetTextStyleId() const { return m_idTextStyle; }
double GetTextHeight() const { return m_dTextHeight; }
void SetTextStyleId(AcDbObjectId id) { m_idTextStyle = id; }
void SetTextHeight(double dHeight) { m_dTextHeight = dHeight; }
void SetTextRotation(double dRot) { m_dTextRotation = dRot; }
public:
virtual double GetTextRotation() const { return m_dTextRotation; }
virtual BOOL IsTextRotated() const { return (fabs(m_dTextRotation)>g_DimOption::instance()._angSnap); }
public:
virtual BOOL IsValid() const;
virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag);
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 subTransformBy(const AcGeMatrix3d& xform);
};
// 管线标注
class CDbPipeLabel : public CDbPipeAttachment
, public CLabelStyle
{
public:
ACRX_DECLARE_MEMBERS(CDbPipeLabel);
private:
static const Adesk::UInt8 g_nVersion;
public:
CDbPipeLabel();
// 管线标注类别: 0、普通管 1、风管
enum PipeType
{
kCommon=0,
kDuct=1,
kPipeDnDim, // cet 2014.6.3 add 管径标注
};
protected:
PipeType m_typePipe; // 管线类别,默认kCommon
XString m_sLeftText; // 文字左边内容
double m_dDistToPipe; // 距管线距离,左为正
double m_dPipeWidth; // 管的宽度或者直径
double m_dPipeHeight; // 管的高度
public:
PipeType GetPipeType() const {
return m_typePipe;
}
void SetPipeType(PipeType type) {
assertWriteEnabled();
m_typePipe = type;
}
double GetDistToPipe() const {
return m_dDistToPipe;
}
void SetDistToPipe(double dDist) {
assertWriteEnabled();
m_dDistToPipe=dDist;
}
const TCHAR* GetLeftText() const {
return (const TCHAR*)m_sLeftText;
}
void SetLeftText(const TCHAR* sText) {
assertWriteEnabled();
m_sLeftText = sText;
}
double GetPipeDiameter() const { // 标注中的管径
return GetPipeWidth();
}
void SetPipeDiameter(double dDiameter) {
SetPipeWidth(dDiameter);
}
double GetPipeWidth() const { // 标注中的宽度(用于风管)
return m_dPipeWidth;
}
void SetPipeWidth(double dWidth) {
assertWriteEnabled();
m_dPipeWidth = dWidth;
}
double GetPipeHeight() const { // 标注中的高度(用于风管)
return m_dPipeHeight;
}
void SetPipeHeight(double dHeight) {
assertWriteEnabled();
m_dPipeHeight = dHeight;
}
double GetMinLabelTextLen() const;
public:
XPoint GetLabelLocation() const;// 文字的坐标
XString GetLabelText() const;//标注
public:
virtual BOOL IsValid() const;
virtual BOOL IsSureSingle() const { return FALSE; } //sr Modify to FALSE 1管可以多标注
virtual BOOL IsSingle(const CDbPipePrototype *pipe) const;
virtual BOOL IsCheckSysType() const { return FALSE;}
virtual double GetTextRotation() const;
virtual long GetSubTextNum()const{return 1;} // cet 2014.6.3 add 支持双击修改
virtual void SetSubText(long i,CString sText); // cet 2014.6.3 add 支持双击修改
virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag);
virtual void GetTips(DList<ObjInfoUnit> &) const;
//virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
virtual Acad::ErrorStatus GetGripText(int idx, CString &cs) const;
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
virtual Acad::ErrorStatus GetExtents(XPoint &ptLow,XPoint &ptUp) const;
virtual int GetFirstVersion()const{return 6;}
public: // Override AcDbEntity
Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& ptPick,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subClose();
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);
private:
Acad::ErrorStatus MoveGSPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
};
// 管线文字
class CDbPipeText : public CDbPipeAttachment
, public CLabelStyle
{
public:
ACRX_DECLARE_MEMBERS(CDbPipeText);
private:
static const Adesk::UInt8 g_nVersion;
public:
CDbPipeText();
// cet 2014.6.3 add 标注文字类型 -1 未知 0 管径标注文字 1 管线文字
int DimTextType();
void DimTextType(Adesk::Int8 nDimTextType);
protected:
XString m_sText; //文字内容
public:
const TCHAR* GetText() const {
return (const TCHAR*)m_sText;
}
void SetText(const TCHAR* sText, bool bUpdatePipe = false) {
assertWriteEnabled();
// cet 2014.7.7 add 更新管线中标注信息, 更新失败时不修改标注内容
if (bUpdatePipe && !UpdateLinkedPipe(sText))
{
return;
}
m_sText = sText;
}
public:
virtual BOOL IsValid() const;
virtual BOOL IsCheckSysType() const { return FALSE;}
virtual double GetTextRotation() const;
virtual double GetWidth() const ;
virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag);
virtual void GetTips(DList<ObjInfoUnit> &) const;
//virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
virtual Acad::ErrorStatus GetGripText(int idx, CString &cs) const;
virtual long GetSubTextNum()const{return 1;}//ok
virtual void SetSubText(long i,CString sText);
virtual int GetFirstVersion()const{return 6;}
public: // Override AcDbEntity
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*);
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const;
virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*);
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const;
private:
// cet 2014.7.7 add 更新管线关联的标注信息
bool UpdateLinkedPipe(const CString &sDimText);
};