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

323 lines
9.4 KiB
C++

#pragma once
#include "StdAfx.h"
#ifdef EWDIMAPI_DLL
#define EWDIMAPI __declspec(dllexport)
#else
#define EWDIMAPI __declspec(dllimport)
#endif
class TMakeDim
{
public:
enum ETYPE
{
// 角度
eAngle = 0,
// 弦长
eChord,
// 弧长
eArc,
// 绘图单位 mm-M
emmM,
// 绘图单位 M-M
eMM,
// 箭头样式 圆点
eNoneArrow,
// 箭头样式 圆点
eCircle,
// 箭头样式 箭头
eArrow,
// 箭头样式 半箭头
eHalfArrow,
// 箭头样式 十字
eCross,
// 坐标取值 世界坐标
eWCS,
// 坐标取值 用户坐标
eUCS,
// 坐标类型 测量坐标
eXY,
// 坐标类型 施工坐标
eAB,
// 图名标注 国标样式
eGB,
// 图名标注 传统样式
eOld,
// 引出标注 始端对齐
eBeginAlign,
// 引出标注 末端对齐
eEndAlign,
// 引出标注 居中对齐
eMidAlign,
// 箭头标注 齐线端
eSideLineAlign,
// 箭头标注 齐线中
eMidLineAlign,
// 箭头标注 在线端
eEndLineAlign,
// 剖切样式 正交剖切
eZJPQ,
// 剖切样式 断面剖切
eDMPQ,
// 剖切 标注位置 两端
e2Pos,
// 剖切 标注位置 末端
eEndPos,
// 剖切 标注位置 始端
eStartPos,
// 剖切 标注方向 沿剖切位置线
ePQWZX,
// 剖切 标注方向 沿剖视方向线
ePSFXX,
};
public:
// 半径标注
static AcDbEntity* makeRadius(
const AcGePoint3d &ptCnt // 圆心
, const AcGePoint3d &ptEnd // 圆上的标注点
);
// 直径标注
static AcDbEntity* makeDiameter(
const AcGePoint3d &ptCnt // 圆心
, const AcGePoint3d &ptEnd // 圆上的标注点
);
// 角度标注
// 注意,标注方向为 起点 -> 终点 右手定则方向
static AcDbEntity* makeAngle(
const AcGePoint3d &ptCnt // 圆心
, const AcGePoint3d &ptStart // 标注起始点
, const AcGePoint3d &ptEnd // 标注终止点
);
// 弧弦标注
// 注意,标注方向为 起点 -> 终点 右手定则方向
static AcDbEntity* makeArc(
const AcGeCircArc3d &arc // 要标注的对象(圆弧对象)
, ETYPE type // 标注类型
, double toDimLine // 定位点到尺寸线的距离, 可以为负值, 图纸单位
);
// 逐点标注
static AcDbEntity* makeMPoint(
const std::vector<AcGePoint3d> &pts // 点组,数量不小于2
, double toDimLine // 定位点到尺寸线的距离, 可以为负值, 图纸单位
);
// 两点标注
static AcDbEntity* make2Point(
const AcGePoint3d &ptS // 要标注的起点
, const AcGePoint3d &ptE // 要标注的终点
, double toDimLine // 定位点到尺寸线的距离, 可以为负值, 图纸单位
);
static AcDbEntity* make2Point(
const AcGePoint3d &ptS // 要标注的起点
, const AcGePoint3d &ptE // 要标注的终点
, LPCTSTR pszDim // 标注文字
, double toDimLine // 定位点到尺寸线的距离, 可以为负值, 图纸单位
);
// 坐标标注
static AcDbEntity* makeCoordDim(const AcGePoint3d &ptLoc // 要标注的点
, const AcGePoint3d &ptSec // 转折点
,ETYPE Unit = emmM // 绘图单位
, int precision = 3 // 精度
, ETYPE arrow = eNoneArrow // 箭头样式
, ETYPE wcs = eWCS // 坐标取值
, ETYPE xy = eXY // 坐标类型
, double NorthAng = 90. // 北向角度
);
// 折断线
static AcDbEntity* makeSymbCut(const AcGePoint3d &ptS // 起点
, const AcGePoint3d &ptE // 终点
, double len // 向外延伸长度
);
// 图名标注
static AcDbEntity* makeDrawingNameSymb(
const AcGePoint3d &pt // 标注点
,LPCTSTR pszName // 标注文字
,LPCTSTR pszScale // 比例文字
,double nameheight = 7. // 标注文字字高
,double scaleheight = 5. // 比例文字字高
,LPCTSTR pszNameStyle = _T("STANDARD") // 标注文字样式
,LPCTSTR pszScaleStyle = _T("STANDARD") // 比例文字样式
,bool bShowScale = true // 是否显示比例
, ETYPE Gb = eOld // 图名标注标准
);
// 引出标注
static AcDbEntity* makeSymbLeader(
const AcGePoint3d &pt1 // 标注点
, const AcGePoint3d &pt2 // 转折点
, double baseLen // 文字基线长度
,LPCTSTR pszUp // 上标文字
, LPCTSTR pszDown // 下标文字
, LPCTSTR pszStyle = _T("STANDARD") // 文字样式
, double height = 3.5 // 字高
, ETYPE arrow = eNoneArrow // 箭头样式
, double arrowSize = 3.0 // 箭头大小
, ETYPE align = eMidAlign // 文字相对基线对齐方式
);
// 节点标注
static AcDbEntity* makeSymbNode(
const AcGePoint3d &pt1 // 标注点
, const AcGePoint3d &pt2 // 转折点
, double baseLen // 文字基线长度
, LPCTSTR pszUp // 上标文字
, LPCTSTR pszStyle = _T("STANDARD") // 文字样式
, double height = 3.5 // 字高
, ETYPE arrow = eNoneArrow // 箭头样式
, double arrowSize = 3.0 // 箭头大小
, ETYPE align = eBeginAlign // 文字相对基线对齐方式
);
// 画指北针
// 右手定则
static AcDbEntity* makeNorthThumb(
const AcGePoint3d &pt // 插入点
, double ang // 指向角度
);
// 画指北针
static AcDbEntity* makeNorthThumb(
const AcGePoint3d &pt // 插入点
, const AcGePoint3d &ptAng // 取另一个点, 用 pt 和 ptAng 来判断指向角度
);
// 箭头标注(坡度标注)
static AcDbEntity* makeSymbArrow(
const AcGePoint3d &ptS // 起点
, const AcGePoint3d &ptE // 终点
, LPCTSTR pszUp // 上标文字
, LPCTSTR pszDown // 下标文字
, LPCTSTR pszStyle = _T("STANDARD") // 文字样式
, double height = 3.5 // 字高
, double arrowSize = 3.0 // 箭头大小
, ETYPE arrow = eArrow // 箭头样式
, ETYPE align = eMidLineAlign // 对齐方式
);
// 索引符号(做法标注)
static AcDbEntity* makeSymbIndex(
const AcGePoint3d &pt1 // 起始点
, double dRadius // 范围半径
, const AcGePoint3d &pt2 // 转折点
, double baseLen // 文字基线长度
, LPCTSTR pszIdxUp // 索引编号
, LPCTSTR pszIdxDown // 索引图号
, LPCTSTR pszDimUp // 上标文字
, LPCTSTR pszDimDown // 下标文字
, LPCTSTR pszIdxStyle = _T("STANDARD") // 索引文字样式
, LPCTSTR pszDimStyle = _T("STANDARD") // 标注文字样式
, double height = 3.5 // 标注文字字高
, ETYPE align = eEndAlign // 标注对齐方式
);
// 索引图名(做法标注)
static AcDbEntity* makeSymbIndexDim(
const AcGePoint3d &pt // 插入点
, LPCTSTR pszUp // 上标文字
, LPCTSTR pszDown = NULL // 下标文字
, LPCTSTR pszScale = NULL // 比例文字
, LPCTSTR pszStyleDim = _T("STANDARD") // 标注文字样式
, LPCTSTR pszStyleScale = _T("STANDARD") // 比例文字样式
, double height = 3.5 // 字高
, double radius = 7 // 半径
, double lw = .5 // 线宽
);
// 剖切符号
static AcDbEntity* makeSymbSection(
const AcGePoint3d &pt1 // 起点
, const AcGePoint3d &pt2 // 终点
, const AcGePoint3d &ptDir // 方向点
, LPCTSTR pszLable // 编号文字
, LPCTSTR pszDrawing = NULL // 图号文字
, ETYPE sectionType = eDMPQ // 标注样式
, LPCTSTR pszStyleLable = _T("STANDARD") // 标注文字样式
, LPCTSTR pszStyleDrawing = _T("STANDARD") // 比例文字样式
, double heightLable = 5.0 // 编号字高
, double heightDrawing = 3.5 // 图号字高
, ETYPE drawingPos = e2Pos // 图号位置类型
, ETYPE drawingDir = ePQWZX // 图号方向
);
// 标高(基准标注)
static AcDbEntity* makeSymbElevation1(
const AcGePoint3d &pt // 插入点
, LPCTSTR pszText // 标注文字
, LPCTSTR pszStyle = _T("STANDARD") // 标注文字样式
, double height = 3.5 // 字高
, bool bHasBaseLine = false // 带基线?
, double baseLen = 0. // 基线长度
, bool bHasLeaderLine = false // 带引线?
, double leaderLen = 0. // 引线长度
, bool bPre2 = true // 精度为2,否为3
);
static double getElevation(AcDbEntity *pEnt);
static bool modifyElevation(AcDbEntity *pEnt, LPCTSTR sElev);
// 标高标注
static AcDbEntity* makeSymbElevation2(
const AcGePoint3d &pt // 插入点
, LPCTSTR pszText // 标注文字
, LPCTSTR pszStyle = _T("STANDARD") // 标注文字样式
, double height = 3.5 // 字高
, bool bPre2 = true // 精度为2,否为3
);
template <class T>
static bool setData2DataMap(AcDbEntity *pEnt, LPCTSTR pszKey, const T &data)
{
if (!pszKey) return false;
ATSCurveEntity *pCurveBase = ATSCurveEntity::cast(pEnt);
ATSEntity *pEntBase = ATSEntity::cast(pEnt);
if (!pCurveBase && !pEntBase) return false;
ATSXDataMap *pMap(NULL);
if (pCurveBase)
{
pMap = pCurveBase->GetSpecialtyData();
}
else if (pEntBase)
{
pMap = pEntBase->GetSpecialtyData();
}
if (!pMap) return false;
return pMap->SetAt(pszKey, data) == FALSE ? false : true;
}
template <class T>
static bool getDataByDataMap(AcDbEntity* pEnt, LPCTSTR pszKey, T & data)
{
if (!pszKey) return false;
ATSCurveEntity *pCurveBase = ATSCurveEntity::cast(pEnt);
ATSEntity *pEntBase = ATSEntity::cast(pEnt);
if (!pCurveBase && !pEntBase) return false;
ATSXDataMap *pMap(NULL);
if (pCurveBase)
{
pMap = pCurveBase->GetSpecialtyData();
}
else if (pEntBase)
{
pMap = pEntBase->GetSpecialtyData();
}
if (!pMap) return false;
return pMap->GetAt(pszKey, data) == FALSE ? false : true;
}
};