323 lines
8.5 KiB
C++
323 lines
8.5 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;
|
|
}
|
|
}; |