281 lines
7.1 KiB
C++
281 lines
7.1 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include <set>
|
|
#include <map>
|
|
|
|
class CStakeRecord
|
|
{
|
|
public:
|
|
struct _Data_
|
|
{
|
|
// 桩号
|
|
CString stake;
|
|
|
|
// 插入点
|
|
AcGePoint3d pt;
|
|
|
|
// 字符串数据
|
|
CString sData;
|
|
|
|
// 功能节点
|
|
std::set<CString> features;
|
|
|
|
void clear() { sData.Empty(); features.clear(); stake.Empty(); pt = AcGePoint3d::kOrigin; }
|
|
};
|
|
|
|
typedef std::map<CString, AcGePoint3d> StakeInsPts;
|
|
|
|
struct compare
|
|
{
|
|
compare(LPCTSTR psz) : shead(psz) {}
|
|
bool operator () (const CStakeRecord &d) const { return d.m_sHead == shead; }
|
|
CString shead;
|
|
};
|
|
|
|
enum ERecType
|
|
{
|
|
// 坡度与距离记录
|
|
eGradRec = 0,
|
|
// 普通数据记录
|
|
eStringRec,
|
|
// 功能节点记录
|
|
eFeatureRec,
|
|
// 里程节点记录
|
|
eMilestoneRec,
|
|
};
|
|
|
|
public:
|
|
CStakeRecord(): m_datas(0){}
|
|
|
|
CStakeRecord(LPCTSTR head, const std::vector<CString> &stakes, const std::vector<CString> &data);
|
|
|
|
CStakeRecord(LPCTSTR head, const std::vector<CString> &data);
|
|
|
|
~CStakeRecord() {}
|
|
|
|
public:
|
|
// 将数据输出,最后画一根线。返回线的Y
|
|
// ptMax,ptMin为图框最大最小值
|
|
// preY 上一条记录的Y值
|
|
double draw(AcDbObjectId &id
|
|
, const double &preY
|
|
, const double &headW
|
|
, const double &dLeft
|
|
, const double &dMid
|
|
, const double &dRight
|
|
, const AcGeMatrix3d mat
|
|
);
|
|
|
|
// 初始化文字插入点
|
|
void init(const StakeInsPts &dataSet);
|
|
|
|
void setHeadString(LPCTSTR psz) { m_sHead = psz; }
|
|
|
|
void setRecType(const ERecType &type) { m_type = type; }
|
|
|
|
void addData(const _Data_ &data) { m_datas.push_back(data); }
|
|
|
|
bool findData(const CString &stake, _Data_ *&data);
|
|
|
|
static void setStaticValue(const double &dScale);
|
|
|
|
// 生成表头文字
|
|
AcDbText* generateHeadText();
|
|
|
|
// 得到此行最大高度
|
|
double getMaxHeight();
|
|
|
|
private:
|
|
// 生成垂直文字
|
|
AcDbText* generateText_V(LPCTSTR str, const float &dH, const float &dF, LPCTSTR style);
|
|
|
|
// 生成水平文字
|
|
AcDbText* generateText_H(LPCTSTR str, const float &dH, const float &dF, LPCTSTR style);
|
|
|
|
// 得到文字外围框
|
|
AcDbExtents getTextExtent(AcDbText *p);
|
|
|
|
// 得到X方向上的最大宽度
|
|
double getHeadStringExtentX();
|
|
|
|
// 得到Y方向上的最大宽度
|
|
double getHeadStringExtentY();
|
|
|
|
|
|
// 计算正行数据的插入点
|
|
// y 为上一行数据的插入点Y值
|
|
void calcInsertPointY(const double &y, double &rowMaxH);
|
|
|
|
public:
|
|
// 数据 按列
|
|
std::vector<_Data_> m_datas;
|
|
|
|
private:
|
|
// 行头文字
|
|
CString m_sHead;
|
|
|
|
// 行头文字的插入点
|
|
AcGePoint3d m_ptHead;
|
|
|
|
// 记录类型
|
|
ERecType m_type;
|
|
|
|
// 数据字高
|
|
static float m_dataTextHeight;
|
|
|
|
// 数据宽度比例
|
|
static float m_dataTextFactor;
|
|
|
|
// 数据文字样式
|
|
static CString m_dataTextStyle;
|
|
|
|
// 行头字高
|
|
static float m_headTextHeight;
|
|
|
|
// 行头宽度比例
|
|
static float m_headTextFactor;
|
|
|
|
// 行头文字样式
|
|
static CString m_headTextStyle;
|
|
|
|
public:
|
|
// 文字与表格线间距
|
|
static double m_dTxtSpace;
|
|
// 表头中文字与表格的间距
|
|
static double m_dHeadTblTxtSpace;
|
|
};
|
|
|
|
namespace ZD_OUT
|
|
{
|
|
// 纵断数据
|
|
static CString SECTION_ZDSJ(_T("[zdsj]"));
|
|
// 桩号
|
|
static CString KEY_STAKENO(_T("路中线桩号"));
|
|
// 覆土
|
|
static CString KEY_SOIL(_T("管廊覆土"));
|
|
// 外顶标高
|
|
static CString KEY_TOP_ELEV(_T("管廊外顶高程"));
|
|
// 现状地面高程
|
|
static CString KEY_CURRENT_GROUND_ELEV(_T("现状地面高程"));
|
|
// 设计地面高程
|
|
static CString KEY_DESIGN_GROUND_ELEV(_T("设计地面高程"));
|
|
// 设计坡度与距离
|
|
static CString KEY_GRADE_DISTANCE(_T("设计坡度与距离"));
|
|
// 所在管廊坡度
|
|
static CString KEY_GRADE(_T("所在管廊坡度"));
|
|
// 所在管廊距离
|
|
static CString KEY_DISTANCE(_T("所在管廊距离"));
|
|
// 功能节点
|
|
static CString KEY_FEATURE(_T("功能布置"));
|
|
// 里程节点
|
|
static CString KEY_MILESTONE(_T("里程节点"));
|
|
// 内底高程
|
|
static CString KEY_BOTTOM_INNER_ELEV(_T("管廊内底高程"));
|
|
// 管廊桩号
|
|
static CString KEY_GL_STAKENO(_T("管廊里程"));
|
|
// 覆土高度
|
|
static CString KEY_SOIL_ELEV(_T("覆土高度"));
|
|
// 盾构体积
|
|
static CString KEY_SH_EW_VOL(_T("盾构体积"));
|
|
// 节点GUID
|
|
static CString KEY_NODE_GUID(_T("GUID"));
|
|
|
|
// 表头
|
|
static LPCTSTR g_TableHead[] = {
|
|
(LPCTSTR)ZD_OUT::KEY_STAKENO
|
|
, (LPCTSTR)ZD_OUT::KEY_SOIL
|
|
, (LPCTSTR)ZD_OUT::KEY_TOP_ELEV
|
|
, (LPCTSTR)ZD_OUT::KEY_CURRENT_GROUND_ELEV
|
|
, (LPCTSTR)ZD_OUT::KEY_DESIGN_GROUND_ELEV
|
|
, (LPCTSTR)ZD_OUT::KEY_GRADE_DISTANCE
|
|
, (LPCTSTR)ZD_OUT::KEY_FEATURE
|
|
, (LPCTSTR)ZD_OUT::KEY_MILESTONE
|
|
, (LPCTSTR)ZD_OUT::KEY_BOTTOM_INNER_ELEV
|
|
, (LPCTSTR)ZD_OUT::KEY_GL_STAKENO
|
|
, (LPCTSTR)ZD_OUT::KEY_SOIL_ELEV
|
|
, (LPCTSTR)ZD_OUT::KEY_SH_EW_VOL
|
|
};
|
|
|
|
// 表头文字高
|
|
static CString KEY_HEAD_H(_T("表头文字高"));
|
|
// 表头文字样式
|
|
static CString KEY_HEAD_S(_T("表头文字样式"));
|
|
// 表头文字宽度比例
|
|
static CString KEY_HEAD_W(_T("表头文字宽度比例"));
|
|
// 数据文字高
|
|
static CString KEY_DATA_H(_T("数据文字高"));
|
|
// 数据文字样式
|
|
static CString KEY_DATA_S(_T("数据文字样式"));
|
|
// 数据文字宽度比例
|
|
static CString KEY_DATA_W(_T("数据文字宽度比例"));
|
|
// 管廊桩号的起始桩号
|
|
static CString KEY_DATA_GL_STAKENO(_T("管廊桩号的起始桩号"));
|
|
|
|
// 纵断网格
|
|
static CString SECTION_ZDWG(_T("[zdwg]"));
|
|
// 标尺间距
|
|
static CString KEY_GRID_INTERVAL(_T("标尺间距"));
|
|
// 刻度精度
|
|
static CString KEY_GRID_PREC(_T("刻度精度"));
|
|
//刻度文字高
|
|
static CString KEY_GRID_H(_T("刻度文字高"));
|
|
//刻度文字样式
|
|
static CString KEY_GRID_S(_T("刻度文字样式"));
|
|
//刻度文字宽度比例
|
|
static CString KEY_GRID_W(_T("刻度文字宽度比例"));
|
|
//比例文字高
|
|
static CString KEY_RATIO_W(_T("比例文字高"));
|
|
//比例文字样式
|
|
static CString KEY_RATIO_S(_T("比例文字样式"));
|
|
//比例文字宽度比例
|
|
static CString KEY_RATIO_H(_T("比例文字宽度比例"));
|
|
//箭头宽度
|
|
static CString KEY_ARROW_W(_T("箭头宽度"));
|
|
// 标尺宽度
|
|
static CString KEY_GRID_WH(_T("标尺宽度"));
|
|
// 刻度与标尺间距
|
|
static CString KEY_GRID_TEXT_INTERVAL(_T("刻度与标尺间距"));
|
|
|
|
// 纵断节点
|
|
static CString SECTION_ZDJD(_T("[zdjd]"));
|
|
// 节点比例
|
|
static CString KEY_NODE_SCALE(_T("节点比例"));
|
|
// 节点标注类型 桩号或管廊长度
|
|
static CString KEY_NODE_DIMTYPE(_T("节点标注类型"));
|
|
// 是否标注变形缝
|
|
static CString KEY_BXFBZ_S(_T("标注变形缝"));
|
|
|
|
// 引出标注
|
|
static CString SECTION_YCBZ(_T("[ycbz]"));
|
|
// 引出字高
|
|
static CString KEY_YCBZ_H(_T("引出字高"));
|
|
// 引出文字样式
|
|
static CString KEY_YCBZ_S(_T("引出文字样式"));
|
|
|
|
// 其它设置
|
|
static CString SECTION_QTSZ(_T("[qtsz]"));
|
|
// 里程/中心线 桩号间隔
|
|
static CString KEY_QTSZ_LCJG(_T("桩号间隔"));
|
|
|
|
void getDataRecords(AcDbObjectIdArray &arrIDs
|
|
, std::vector<CStakeRecord> &records);
|
|
|
|
void insertZDTable(AcDbObjectId &recId
|
|
, AcDbObjectIdArray &arrIDs
|
|
, std::vector<CStakeRecord> &records
|
|
, const AcGePoint3d &ptMin
|
|
, const AcGePoint3d &ptMax
|
|
, const bool &bEnd);
|
|
|
|
void insertDimension(AcDbObjectId &recId);
|
|
|
|
bool readConfiguration();
|
|
|
|
double getGridLeftPointDist();
|
|
|
|
CString getConfiguration(LPCTSTR key);
|
|
|
|
void getConfiguration(std::vector<std::pair<CString, CString>> &v);
|
|
}
|