197 lines
4.4 KiB
C++
197 lines
4.4 KiB
C++
#include "StdAfx.h"
|
|
#include <vector>
|
|
#include <map>
|
|
#include "coretools.h"
|
|
#include "shjson.h"
|
|
#include "InsertValveDlg.h"
|
|
|
|
#define JSON_PATH _T("\\valveSize.json")
|
|
|
|
namespace
|
|
{
|
|
using namespace SHJson;
|
|
|
|
struct _Data_
|
|
{
|
|
double dDN, dPN, dL, dW, dH;
|
|
};
|
|
|
|
void parseCSV(LPCTSTR pszCSV, std::vector<_Data_> &datas)
|
|
{
|
|
if (!pszCSV) return;
|
|
|
|
CStdioFile file;
|
|
CFileException e;
|
|
if (!file.Open(pszCSV, CFile::modeRead | CFile::modeNoTruncate, &e))
|
|
{
|
|
CString ss;
|
|
e.GetErrorMessage(ss.GetBuffer(1024), 1024);
|
|
ss.ReleaseBuffer();
|
|
AfxMessageBox(ss);
|
|
return;
|
|
}
|
|
|
|
_Data_ data;
|
|
CString s;
|
|
std::vector<CString> ss;
|
|
while (file.ReadString(s))
|
|
{
|
|
ss.clear();
|
|
CoreTools::SplitString(s, _T(','), ss);
|
|
if (ss.size() < 5) continue;
|
|
if (CoreTools::isDigitString<int>(ss[0])
|
|
|| CoreTools::isDigitString<double>(ss[1])
|
|
|| CoreTools::isDigitString<int>(ss[2])
|
|
|| CoreTools::isDigitString<int>(ss[3])
|
|
|| CoreTools::isDigitString<int>(ss[4]) )
|
|
{
|
|
data.dDN = (double)_ttoi(ss[0]);
|
|
data.dPN = _ttof(ss[1]);
|
|
data.dL = (double)_ttoi(ss[2]);
|
|
data.dW = (double)_ttoi(ss[3]);
|
|
data.dH = (double)_ttoi(ss[4]);
|
|
datas.push_back(data);
|
|
}
|
|
}
|
|
file.Close();
|
|
}
|
|
|
|
void addSize(WValue &wv, const std::vector<_Data_> &datas)
|
|
{
|
|
WValue v, ar;
|
|
v.SetObject();
|
|
ar.SetArray();
|
|
CString s;
|
|
for (size_t i = 0; i < datas.size(); ++i)
|
|
{
|
|
v.SetObject();
|
|
s.Format(_T("%.1f"), datas[i].dPN);
|
|
addMember(v, _T("DN"), datas[i].dDN);
|
|
addMember(v, _T("PN"), s);
|
|
addMember(v, _T("L"), datas[i].dL);
|
|
addMember(v, _T("W"), datas[i].dW);
|
|
addMember(v, _T("H"), datas[i].dH);
|
|
pushBack(ar, v);
|
|
}
|
|
addMember(wv, _T("size"), ar);
|
|
}
|
|
}
|
|
|
|
IMPLEMENT_DYNAMIC(CInsertValveDlg, CDialog)
|
|
|
|
CInsertValveDlg::CInsertValveDlg(CWnd* pParent) : CDialog(IDD_INSERT_VALVE_DLG, pParent) { }
|
|
|
|
CInsertValveDlg::~CInsertValveDlg() { }
|
|
|
|
void CInsertValveDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_COMBO_VALVE_TYPE, m_cmbValveType);
|
|
DDX_CBString(pDX, IDC_COMBO_VALVE_TYPE, m_sValveType);
|
|
DDX_Text(pDX, IDC_EDIT_SIZE_NAME, m_sSizeName);
|
|
DDX_Text(pDX, IDC_EDIT_FILE, m_sSizeFilePath);
|
|
}
|
|
|
|
BOOL CInsertValveDlg::OnInitDialog()
|
|
{
|
|
using namespace SHJson;
|
|
CDialog::OnInitDialog();
|
|
|
|
// 取出json文件中的阀门类型
|
|
|
|
WDocument doc;
|
|
if (!file2Json(FilePath::GetSysDir() + JSON_PATH, doc))
|
|
{
|
|
AfxMessageBox(_T("未找到阀门尺寸文件或尺寸文件格式错误!"));
|
|
EndDialog(0);
|
|
return TRUE;
|
|
}
|
|
|
|
for (MIt it = doc.MemberBegin(); it != doc.MemberEnd(); ++it)
|
|
{
|
|
m_cmbValveType.AddString(it->name.GetString());
|
|
}
|
|
|
|
if (m_cmbValveType.GetCount() < 0)
|
|
{
|
|
EndDialog(0);
|
|
return TRUE;
|
|
}
|
|
m_cmbValveType.SetCurSel(0);
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CInsertValveDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CInsertValveDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON_SELECT_FILE, &CInsertValveDlg::OnBnClickedSelFile)
|
|
END_MESSAGE_MAP()
|
|
|
|
void CInsertValveDlg::OnBnClickedOk()
|
|
{
|
|
if (!UpdateData(TRUE)) return;
|
|
|
|
if (m_sValveType.IsEmpty() || m_sSizeName.IsEmpty() || m_sSizeFilePath.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("\"阀门类型\"、\"尺寸名称\"、\"文件路径\" 不能为空!"));
|
|
return;
|
|
}
|
|
|
|
using namespace SHJson;
|
|
|
|
WDocument doc;
|
|
if (!file2Json(FilePath::GetSysDir() + JSON_PATH, doc))
|
|
{
|
|
AfxMessageBox(_T("未找到阀门尺寸文件或尺寸文件格式错误!"));
|
|
return;
|
|
}
|
|
|
|
MIt itValve = doc.FindMember(m_sValveType);
|
|
if (itValve == doc.MemberEnd())
|
|
{
|
|
AfxMessageBox(_T("未找到阀门类型!"));
|
|
return;
|
|
}
|
|
|
|
std::vector<_Data_> datas;
|
|
parseCSV(m_sSizeFilePath, datas);
|
|
if (datas.empty()) return;
|
|
|
|
MIt itSubObj = itValve->value.FindMember(m_sSizeName);
|
|
if (itSubObj != itValve->value.MemberEnd())
|
|
{ // 找到,提示
|
|
if (AfxMessageBox(_T("已经存在此尺寸数据,是否覆盖?"), MB_YESNO) != IDYES)
|
|
return;
|
|
itValve->value.RemoveMember(itSubObj);
|
|
}
|
|
|
|
WValue v;
|
|
v.SetObject();
|
|
addSize(v, datas);
|
|
addMember(itValve->value, m_sSizeName, v);
|
|
|
|
json2File(FilePath::GetSysDir() + JSON_PATH, doc, true);
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
|
|
void CInsertValveDlg::OnBnClickedSelFile()
|
|
{
|
|
UpdateData(TRUE);
|
|
CFileDialog dlg(TRUE, _T("*.csv"), NULL, OFN_HIDEREADONLY, _T("阀门尺寸数据 (*.csv)|*.csv||"), acedGetAcadFrame());
|
|
dlg.DoModal();
|
|
m_sSizeFilePath = dlg.GetPathName();
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CInsertValveDlg::start()
|
|
{
|
|
CAcModuleResourceOverride myResources;
|
|
CInsertValveDlg dlg;
|
|
dlg.DoModal();
|
|
}
|
|
|