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

369 lines
10 KiB
C++

#include "stdafx.h"
#include "ZDSZDlg.h"
#include "UITools.h"
#include <map>
#include <vector>
#include "zdoutput.h"
#include "KTModelLayoutXData.h"
namespace
{
#define FILE_ _T("\\zdtbsz.dat")
typedef std::vector<std::pair<CString, CString>> StateVec;
void split(LPCTSTR pszSrc, TCHAR sp, std::vector<CString> &vec)
{
if (!pszSrc) return;
vec.clear();
CString src(pszSrc);
CString oneString(_T(""));
TCHAR ch;
for (int i = 0; i < src.GetLength(); ++i)
{
ch = src[i];
if (ch == sp)
{
if (oneString.IsEmpty())
continue;
else
{
vec.push_back(oneString);
oneString.Empty();
}
}
else
oneString += ch;
}
if (!oneString.IsEmpty())
vec.push_back(oneString);
}
void writeValue(CStdioFile &file, LPCTSTR key, LPCTSTR value)
{
file.WriteString(CString(key) + _T("=") + value + _T("\n"));
}
void writeValue(CStdioFile &file, LPCTSTR key, const float &value)
{
int prec(2);
writeValue(file, key, TypeConvert::f2s(value, &prec));
}
}
IMPLEMENT_DYNAMIC(CZDSZDlg, CDialog)
CZDSZDlg::CZDSZDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_ZDSZ_DLG, pParent)
, m_iWG_GRID_Interval(2)
, m_fJD_NODE_Scale(1.f)
, m_iWG_GRID_Prec(1)
, m_fSJ_HEAD_H(0)
, m_iDimJoin(1)
, m_iByStake(1)
, m_sS2(_T("1:200"))
, m_fQT_LC_Interval(20)
{
}
CZDSZDlg::~CZDSZDlg()
{
}
void CZDSZDlg::start()
{
CAcModuleResourceOverride myResources;
CZDSZDlg dlg;
dlg.DoModal();
}
void CZDSZDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_ctrList);
DDX_Text(pDX, IDC_EDIT1, m_iWG_GRID_Interval);
DDV_MinMaxInt(pDX, m_iWG_GRID_Interval, 1, 99);
DDX_Text(pDX, IDC_EDIT3, m_fJD_NODE_Scale);
DDV_MinMaxFloat(pDX, m_fJD_NODE_Scale, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT4, m_iWG_GRID_Prec);
DDV_MinMaxInt(pDX, m_iWG_GRID_Prec, 0, 6);
DDX_Text(pDX, IDC_EDIT5, m_fSJ_HEAD_H);
DDV_MinMaxFloat(pDX, m_fSJ_HEAD_H, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT7, m_fSJ_HEAD_W);
DDV_MinMaxFloat(pDX, m_fSJ_HEAD_W, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT8, m_fSJ_DATA_H);
DDV_MinMaxFloat(pDX, m_fSJ_DATA_H, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT28, m_fSJ_DATA_W);
DDV_MinMaxFloat(pDX, m_fSJ_DATA_W, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT14, m_fWG_RATIO_H);
DDV_MinMaxFloat(pDX, m_fWG_RATIO_H, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT16, m_fWG_RATIO_W);
DDV_MinMaxFloat(pDX, m_fWG_RATIO_W, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT17, m_fWG_GRID_H);
DDV_MinMaxFloat(pDX, m_fWG_GRID_H, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT40, m_fWG_GRID_W);
DDV_MinMaxFloat(pDX, m_fWG_GRID_W, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT22, m_fWG_GRID_TEXT_Interval);
DDV_MinMaxFloat(pDX, m_fWG_GRID_TEXT_Interval, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT21, m_fWG_GRID_WH);
DDV_MinMaxFloat(pDX, m_fWG_GRID_WH, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT13, m_fWG_ARROW_W);
DDV_MinMaxFloat(pDX, m_fWG_ARROW_W, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT23, m_fBZ_H);
DDV_MinMaxFloat(pDX, m_fBZ_H, 0.1f, 99.f);
DDX_Text(pDX, IDC_EDIT43, m_sGLStartStakeNo);
DDX_Control(pDX, IDC_COMBO4, m_cmbSJ_HEAD_S);
DDX_CBString(pDX, IDC_COMBO4, m_sSJ_HEAD_S);
DDX_Control(pDX, IDC_COMBO7, m_cmbSJ_DATA_S);
DDX_CBString(pDX, IDC_COMBO7, m_sSJ_DATA_S);
DDX_Control(pDX, IDC_COMBO5, m_cmbWG_RATIO_S);
DDX_CBString(pDX, IDC_COMBO5, m_sWG_RATIO_S);
DDX_Control(pDX, IDC_COMBO8, m_cmbWG_GRID_S);
DDX_CBString(pDX, IDC_COMBO8, m_sWG_GRID_S);
DDX_Control(pDX, IDC_COMBO9, m_cmbBZ_S);
DDX_CBString(pDX, IDC_COMBO9, m_sBZ_S);
DDX_Check(pDX, IDC_CHECK1, m_iDimJoin);
DDX_Check(pDX, IDC_CHECK2, m_iByStake);
DDX_CBString(pDX, IDC_COMBO11, m_sS2);
DDX_Text(pDX, IDC_EDIT24, m_fQT_LC_Interval);
DDV_MinMaxFloat(pDX, m_fQT_LC_Interval, .001f, 99999.f);
}
BOOL CZDSZDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ctrList.SetCheckStyle(BS_AUTOCHECKBOX);
ZD_OUT::readConfiguration();
ZD_OUT::getConfiguration(m_data);
refreshCtrlList();
m_cmbSJ_HEAD_S.init();
m_cmbSJ_DATA_S.init();
m_cmbWG_RATIO_S.init();
m_cmbWG_GRID_S.init();
m_cmbBZ_S.init();
m_iWG_GRID_Interval = TypeConvert::s2i(ZD_OUT::getConfiguration(ZD_OUT::KEY_GRID_INTERVAL));
m_iWG_GRID_Prec = TypeConvert::s2i(ZD_OUT::getConfiguration(ZD_OUT::KEY_GRID_PREC));
m_fJD_NODE_Scale = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_NODE_SCALE));
m_fSJ_HEAD_H = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_HEAD_H));
m_sSJ_HEAD_S = ZD_OUT::getConfiguration(ZD_OUT::KEY_HEAD_S);
m_fSJ_HEAD_W = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_HEAD_W));
m_fSJ_DATA_H = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_DATA_H));
m_sSJ_DATA_S = ZD_OUT::getConfiguration(ZD_OUT::KEY_DATA_S);
m_fSJ_DATA_W = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_DATA_W));
m_sGLStartStakeNo = ZD_OUT::getConfiguration(ZD_OUT::KEY_DATA_GL_STAKENO);
m_fWG_RATIO_H = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_RATIO_H));
m_sWG_RATIO_S = ZD_OUT::getConfiguration(ZD_OUT::KEY_RATIO_S);
m_fWG_RATIO_W = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_RATIO_W));
m_fWG_GRID_H = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_GRID_H));
m_sWG_GRID_S = ZD_OUT::getConfiguration(ZD_OUT::KEY_GRID_S);
m_fWG_GRID_W = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_GRID_W));
m_fWG_ARROW_W = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_ARROW_W));
m_fWG_GRID_WH = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_GRID_WH));
m_fWG_GRID_TEXT_Interval = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_GRID_TEXT_INTERVAL));
m_fBZ_H = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_YCBZ_H));
m_sBZ_S = ZD_OUT::getConfiguration(ZD_OUT::KEY_YCBZ_S);
m_iDimJoin = TypeConvert::s2i(ZD_OUT::getConfiguration(ZD_OUT::KEY_BXFBZ_S));
m_iByStake = TypeConvert::s2i(ZD_OUT::getConfiguration(ZD_OUT::KEY_NODE_DIMTYPE));
m_fQT_LC_Interval = TypeConvert::s2f(ZD_OUT::getConfiguration(ZD_OUT::KEY_QTSZ_LCJG));
AecDbObjXDataMap xDataMap;
xDataMap.SetAt(_T("S2"), _T("1:200"));
KTModelLayoutXData::ReadModelXData(EW_EARTHWORMINIT, xDataMap);
xDataMap.GetAt(_T("S2"), m_sS2);
UpdateData(FALSE);
return TRUE;
}
void CZDSZDlg::refreshCtrlList()
{
// [0-9) 个数据为“纵断数据”数据
int countOfHead = sizeof(ZD_OUT::g_TableHead) / sizeof(LPCTSTR);
if (m_data.size() < countOfHead - 1) return;
m_ctrList.ResetContent();
for (size_t i = 0; i < countOfHead; ++i)
{
m_ctrList.AddString(m_data[i].first);
m_ctrList.SetCheck(i,(m_data[i].second.CompareNoCase(_T("0")) == 0) ? false : true);
}
}
BEGIN_MESSAGE_MAP(CZDSZDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CZDSZDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CZDSZDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDOK, &CZDSZDlg::OnBnClickedOk)
ON_CLBN_CHKCHANGE(IDC_LIST1, &CZDSZDlg::OnCheckchangeList)
END_MESSAGE_MAP()
void CZDSZDlg::OnBnClickedButton1()
{
int idx = m_ctrList.GetCurSel();
if (idx >= m_data.size()) return;
if (idx - 1 < 0) return;
std::pair<CString, CString> pr = m_data[idx];
StateVec::iterator itOld(m_data.begin()), itNew(m_data.begin());
std::advance(itOld, idx);
std::advance(itNew, idx - 1);
m_data.erase(itOld);
m_data.insert(itNew, pr);
refreshCtrlList();
m_ctrList.SetCurSel(idx - 1);
}
void CZDSZDlg::OnBnClickedButton4()
{
int idx = m_ctrList.GetCurSel();
if (idx >= m_data.size()) return;
if (idx + 1 >= m_data.size()) return;
std::pair<CString, CString> pr = m_data[idx];
StateVec::iterator itOld(m_data.begin()), itNew(m_data.begin());
std::advance(itOld, idx);
std::advance(itNew, idx + 1);
m_data.erase(itOld);
m_data.insert(itNew, pr);
refreshCtrlList();
m_ctrList.SetCurSel(idx + 1);
}
void CZDSZDlg::OnBnClickedOk()
{
UpdateData(TRUE);
double dDist(.0);
if (!StakeTools::analyStakeString(m_sGLStartStakeNo, dDist))
{
AfxMessageBox(_T("%s 不符合标准(例:K0+123),请重新输入!"));
return;
}
CString str(_T(""));
CStdioFile file(FilePath::getProgramDataFolder() + FILE_, CFile::modeCreate|CFile::modeReadWrite);
if (!file.m_hFile) return;
file.WriteString(CString(ZD_OUT::SECTION_ZDSJ) + _T("\n"));
for (int i = 0; i < m_ctrList.GetCount(); ++i)
{
m_ctrList.GetText(i, str);
str += _T("=");
str += m_ctrList.GetCheck(i) == 1 ? _T("1") : _T("0");
str += _T("\n");
file.WriteString(str);
}
writeValue(file, ZD_OUT::KEY_HEAD_H, m_fSJ_HEAD_H);
writeValue(file, ZD_OUT::KEY_HEAD_S, m_sSJ_HEAD_S);
writeValue(file, ZD_OUT::KEY_HEAD_W, m_fSJ_HEAD_W);
writeValue(file, ZD_OUT::KEY_DATA_H, m_fSJ_DATA_H);
writeValue(file, ZD_OUT::KEY_DATA_S, m_sSJ_DATA_S);
writeValue(file, ZD_OUT::KEY_DATA_W, m_fSJ_DATA_W);
writeValue(file, ZD_OUT::KEY_DATA_GL_STAKENO, m_sGLStartStakeNo);
file.WriteString(CString(ZD_OUT::SECTION_ZDWG) + _T("\n"));
writeValue(file, ZD_OUT::KEY_GRID_INTERVAL, m_iWG_GRID_Interval);
writeValue(file, ZD_OUT::KEY_GRID_PREC, m_iWG_GRID_Prec);
writeValue(file, ZD_OUT::KEY_RATIO_H, m_fWG_RATIO_H);
writeValue(file, ZD_OUT::KEY_RATIO_S, m_sWG_RATIO_S);
writeValue(file, ZD_OUT::KEY_RATIO_W, m_fWG_RATIO_W);
writeValue(file, ZD_OUT::KEY_GRID_H, m_fWG_GRID_H);
writeValue(file, ZD_OUT::KEY_GRID_S, m_sWG_GRID_S);
writeValue(file, ZD_OUT::KEY_GRID_W, m_fWG_GRID_W);
writeValue(file, ZD_OUT::KEY_ARROW_W, m_fWG_ARROW_W);
writeValue(file, ZD_OUT::KEY_GRID_WH, m_fWG_GRID_WH);
writeValue(file, ZD_OUT::KEY_GRID_TEXT_INTERVAL, m_fWG_GRID_TEXT_Interval);
file.WriteString(CString(ZD_OUT::SECTION_ZDJD) + _T("\n"));
writeValue(file, ZD_OUT::KEY_NODE_SCALE, m_fJD_NODE_Scale);
writeValue(file, ZD_OUT::KEY_BXFBZ_S, m_iDimJoin);
writeValue(file, ZD_OUT::KEY_NODE_DIMTYPE, m_iByStake);
file.WriteString(CString(ZD_OUT::SECTION_YCBZ) + _T("\n"));
writeValue(file, ZD_OUT::KEY_YCBZ_H, m_fBZ_H);
writeValue(file, ZD_OUT::KEY_YCBZ_S, m_sBZ_S);
file.WriteString(CString(ZD_OUT::SECTION_QTSZ) + _T("\n"));
writeValue(file, ZD_OUT::KEY_QTSZ_LCJG, m_fQT_LC_Interval);
file.Close();
ZD_OUT::readConfiguration();
AecDbObjXDataMap xDataMap;
KTModelLayoutXData::ReadModelXData(EW_EARTHWORMINIT, xDataMap);
xDataMap.SetAt(_T("S2"), m_sS2);
KTModelLayoutXData::WriteModelXData(EW_EARTHWORMINIT, xDataMap);
CDialog::OnOK();
}
void CZDSZDlg::OnCheckchangeList()
{
int idx = m_ctrList.GetCurSel();
if (idx >= m_data.size()) return;
std::pair<CString, CString> &pr = m_data[idx];
if (pr.second.Compare(_T("0")) == 0)
pr.second = _T("1");
else
pr.second = _T("0");
return;
}