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

417 lines
9.9 KiB
C++

#include "StdAfx.h"
#include "CISODraftDlg.h"
#include "CoreTools.h"
IMPLEMENT_DYNAMIC(CISODraftDlg, CDialog)
CISODraftDlg::CISODraftDlg(CWnd *pParent /*=NULL*/)
: CDialog(CISODraftDlg::IDD, pParent)
, m_sMaterial(_T("碳钢"))
, m_dPipeW(0.15)
, m_bElbowLine(TRUE)
, m_sCurrSys(_T("污水"))
, m_sScale(_T("1:100"))
, m_dDotWD(0.45)
{
m_pDb = NULL;
m_sODSn = _T("B");
m_dDn = 100.0;
m_dOD = 114.0;
m_dThk = 7.0;
m_nView = 0;
m_nAngle = 0;
m_dRadio = 1.0;
}
CISODraftDlg::~CISODraftDlg()
{
}
void CISODraftDlg::DoDataExchange(CDataExchange *pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PIPELIST, m_wndPipeList);
DDX_Control(pDX, IDC_COMBOMATERS, m_wndComboMaters);
DDX_CBString(pDX, IDC_COMBOMATERS, m_sMaterial);
DDX_Radio(pDX, IDC_RADIO1, m_nView);
DDX_Radio(pDX, IDC_RADIO30, m_nAngle);
DDX_Check(pDX, IDC_CHECKFITDIM2, m_bElbowLine);
DDX_Text(pDX, IDC_EDITPIPEW, m_dPipeW);
DDX_Control(pDX, IDC_COMBOSYSLAY, m_wndComboSys);
DDX_CBString(pDX, IDC_COMBOSYSLAY, m_sCurrSys);
DDX_CBString(pDX, IDC_COMBOSCALE, m_sScale);
DDX_Text(pDX, IDC_EDITDOWD, m_dDotWD);
}
BEGIN_MESSAGE_MAP(CISODraftDlg, CDialog)
ON_CBN_SELCHANGE(IDC_COMBOMATERS, &CISODraftDlg::OnCbnSelchangeCombomaters)
ON_BN_CLICKED(IDOK, &CISODraftDlg::OnBnClickedOk)
END_MESSAGE_MAP()
BOOL CISODraftDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//4K
int iWidth = GetSystemMetrics(SM_CXSCREEN);
int iHeight = GetSystemMetrics(SM_CYSCREEN);
int nAdd = 0;
if (iWidth >= 3800 && iHeight >= 2400)//4K
{
nAdd = 45;
}
//LIST
m_wndPipeList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_wndPipeList.InsertColumn(0, _T("DN"), LVCFMT_LEFT, 70 + nAdd);
m_wndPipeList.InsertColumn(1, _T("外径"), LVCFMT_LEFT, 70 + nAdd);
m_wndPipeList.InsertColumn(2, _T("壁厚"), LVCFMT_LEFT, 60 + nAdd);
m_wndPipeList.InsertColumn(3, _T("重量"), LVCFMT_LEFT, 65 + nAdd);
m_wndPipeList.InsertColumn(4, _T("表号"), LVCFMT_LEFT, 65 + nAdd);
m_wndPipeList.InsertColumn(5, _T("系列/代号"), LVCFMT_CENTER, 80 + nAdd);
m_wndPipeList.InsertColumn(6, _T("执行标准"), LVCFMT_LEFT, 300 + nAdd);
CString dbPath = FilePath::GetSysDir();
dbPath += _T("\\Plumbing.db");
m_pDb = new CUIISQLiteServer;
if (!m_pDb->InitADOServer(dbPath))
{
AfxMessageBox(_T("数据库驱动加载数据库Plumbing.db失败!"));
delete m_pDb;
return FALSE;
}
InitSys();
InitPipeList(50000, m_sODSn);
InitPipeMaterCombox();
return TRUE;
}
void CISODraftDlg::InitSys()
{
CString sSQL, sStd(CoreTools::getCurrentPipeSysTblName());
sSQL.Format(_T("select distinct system from %s"), sStd);
CStringArray arSyses;
m_pDb->GetSelData(sSQL, arSyses);
for (int i = 0; i < arSyses.GetSize(); i++)
{
m_wndComboSys.AddString(arSyses.GetAt(i));
}
int nCur = m_wndComboSys.FindString(0, m_sCurrSys);
if (nCur != -1)
{
m_wndComboSys.SetCurSel(nCur);
}
}
void CISODraftDlg::InitPipeList(int nMaxDN, CString &sODNo)
{
if (m_pDb != NULL)
{
CString sSQL, sText, sODAWhere = _T("");
m_wndPipeList.DeleteAllItems();
//公称直径系列
bool bMODSN = false;
if (sODNo.CompareNoCase(_T("A")) == 0 || sODNo.CompareNoCase(_T("B")) == 0 || sODNo.IsEmpty())
{
sODAWhere = _T("([外径系列]='A' or [外径系列]='B' or [外径系列]='S')");
bMODSN = true;
}
else
{
sODAWhere.Format(_T("[外径系列]='%s'"), sODNo);
}
if (bMODSN)
{
sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [公称直径]<=%d and %s order by [外径系列] desc"), nMaxDN, sODAWhere);
}
else
{
sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [公称直径]<=%d and %s order by [外径系列],[公称直径],[壁厚]"), nMaxDN, sODAWhere);
}
CUIIValueTable table;
m_pDb->GetSelData(sSQL, table);
if (table.GetTableLogicSize() == 0)
{
//按外径选
int nDN = nMaxDN;
if (bMODSN)
{
sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [外径]<=%d and %s order by [外径系列]"), nDN, sODAWhere);
}
else
{
sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [外径]<=%d and %s order by [外径系列],[公称直径],[壁厚]"), nDN, sODAWhere);
}
m_pDb->GetSelData(sSQL, table);
}
table.ShowToListCtrl(&m_wndPipeList);
CString sDnold, sThick, sODNo2;
sDnold.Format(_T("%d"), (int)(m_dDn + 0.5));
if (sODNo.IsEmpty()) sODNo = m_sODSn;
int iStart = -1;
bool bFind = false;
int nCount = m_wndPipeList.GetItemCount();
for (int i = 0; i < nCount; i++)
{
sText = m_wndPipeList.GetItemText(i, 0);
sThick = m_wndPipeList.GetItemText(i, 2);
sODNo2 = m_wndPipeList.GetItemText(i, 5);
if (sText.CompareNoCase(sDnold) == 0 && iStart == -1 && sODNo2.CompareNoCase(sODNo) == 0)
iStart = i;
if (sText.CompareNoCase(sDnold) == 0 && fabs(_ttof(sThick) - m_dThk) < 1.e-6 && sODNo2.CompareNoCase(sODNo) == 0)
{
iStart = i;
m_wndPipeList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
m_wndPipeList.EnsureVisible(i, TRUE);
bFind = true;
break;
}
}
if (!bFind)
{
if (iStart == -1) iStart = 0;
if (m_wndPipeList.GetItemCount() > 0)
m_wndPipeList.SetItemState(iStart, LVIS_SELECTED, LVIS_SELECTED);
m_wndPipeList.EnsureVisible(iStart, TRUE);
}
}
}
void CISODraftDlg::InitPipeMaterCombox()
{
//材质
m_wndComboMaters.ResetContent();
CString sSQL, sMat;
CStringArray arVals;
sSQL = _T("select [材质] from AecMaterial where [类型]='管道'");
m_pDb->GetSelData(sSQL, arVals);
for (int i = 0; i < arVals.GetSize(); i++)
{
sMat = arVals.GetAt(i);
m_wndComboMaters.InsertString(i, sMat);
if (m_sMaterial.CompareNoCase(sMat) == 0 ||
(m_sMaterial.Find(_T("衬塑")) != -1 && sMat.Find(_T("衬塑")) != -1))
{
m_wndComboMaters.SetCurSel(i);
}
}
}
BOOL CISODraftDlg::IsPlasticsMat(int nPos, CString &sODNo)
{
UpdateData();
const CString sPlastic = _T("UPVC CPVC PVC-C PP-H (PE) PE100 HDPE");
CStringArray arTxts;
CoreTools::SplitStrintToArray(sPlastic, arTxts, _T(' '));
for (int i = 0; i < arTxts.GetSize(); i++)
{
if (m_sMaterial.Find(arTxts.GetAt(i)) != -1)
{
sODNo = arTxts.GetAt(i);
//以下 PVC-C PP-H PE100 的国标数据 替代 PVC
if (sODNo.CompareNoCase(_T("PVC-C")) == 0)
sODNo = _T("CPVC");
if (sODNo.CompareNoCase(_T("(PE)")) == 0)
sODNo = _T("PE");
if (sODNo.CompareNoCase(_T("PE100")) == 0)
sODNo = _T("PE");
return TRUE;
}
}
return FALSE;
}
BOOL CISODraftDlg::IsGSFMaterial(CString &sODNo)
{
UpdateData();
//目前只能按照材质判断
if (m_sMaterial.Find(_T("衬塑")) != -1 ||
m_sMaterial.Find(_T("HG/T 20538")) != -1)
{
sODNo = _T("GSF");
return TRUE;
}
return FALSE;
}
BOOL CISODraftDlg::IsSRPEMaterial(CString &sODNo)
{
UpdateData();
//目前只能按照材质判断
if (m_sMaterial.Find(_T("钢骨架")) != -1 ||
m_sMaterial.Find(_T("CJ/T 123")) != -1)
{
sODNo = _T("SRPE");
return TRUE;
}
return FALSE;
}
BOOL CISODraftDlg::IsRCPMaterial(CString &sODNo)
{
UpdateData();
//目前只能按照材质判断
if (m_sMaterial.Find(_T("混凝土")) != -1)
{
sODNo = _T("RCP");
return TRUE;
}
return FALSE;
}
//管道材质
void CISODraftDlg::OnCbnSelchangeCombomaters()
{
UpdateData();
CString sODNo = m_sODSn;
UpdateData(FALSE);
int nPos = m_sMaterial.Find(_T("@"));
if (nPos != -1)
{
sODNo = m_sMaterial.Mid(nPos + 1);
InitPipeList(50000, sODNo);
return;
}
if (IsPlasticsMat(0, sODNo))
{
InitPipeList(50000, sODNo);
}
else if (IsGSFMaterial(sODNo))//衬塑
{
InitPipeList(50000, sODNo);
}
else if (IsRCPMaterial(sODNo))//水泥管
{
InitPipeList(50000, sODNo);
}
else if (IsSRPEMaterial(sODNo))
{
InitPipeList(50000, sODNo);
}
else
{
sODNo = _T("");
InitPipeList(50000, sODNo);
}
UpdateData(FALSE);
}
void CISODraftDlg::OnBnClickedOk()
{
UpdateData();
//管子规格
POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndPipeList.GetNextSelectedItem(ps);
m_dDn = _ttof(m_wndPipeList.GetItemText(nItem, 0));
m_dOD = _ttof(m_wndPipeList.GetItemText(nItem, 1));
m_dThk = _ttof(m_wndPipeList.GetItemText(nItem, 2));
m_szShtNo = m_wndPipeList.GetItemText(nItem, 4);
m_sODSn = m_wndPipeList.GetItemText(nItem, 5);
m_sStd = m_wndPipeList.GetItemText(nItem, 6);
}
else
{
AfxMessageBox(_T("请选择管子规格!"));
return;
}
m_nRadioOn = TRUE;//按国标结构长度
m_dRadio = 1.0;//最小
EndDialog(IDOK);
}
void CISODraftDlg::GetISODrawCFG(ISODrawCfg &isodrcfg, WPipe::PipeParam& param) const
{
/*
* typedef struct ISODrawCfg
{
TCHAR m_sODSn[17];
TCHAR m_sMaterial[256];
TCHAR m_sCurrSys[256];
TCHAR m_sScale[17];
double m_dDn;
double m_dOD;
double m_dThk;
double m_dRadio;
double m_dDotWD;
int m_nView;
int m_nAngle;
double m_dPipeW;
BOOL m_bElbowLine;
}ISODRAWCFG;
*/
_tcscpy(isodrcfg.m_sODSn, (LPCTSTR)m_sODSn);
_tcscpy(isodrcfg.m_sMaterial, (LPCTSTR)m_sMaterial);
_tcscpy(isodrcfg.m_sCurrSys, (LPCTSTR)m_sCurrSys);
_tcscpy(isodrcfg.m_sScale, (LPCTSTR)m_sScale);
_tcscpy(isodrcfg.m_szShtNo, (LPCTSTR)m_szShtNo);
_tcscpy(isodrcfg.m_sStd, (LPCTSTR)m_sStd);
isodrcfg.m_dDn = m_dDn;
isodrcfg.m_dOD = m_dOD;
isodrcfg.m_dThk = m_dThk;
isodrcfg.m_dRadio = m_dRadio;
isodrcfg.m_nRadioOn = m_nRadioOn;
isodrcfg.m_nView = m_nView;
isodrcfg.m_nAngle = m_nAngle;
isodrcfg.m_dPipeW = m_dPipeW;
isodrcfg.m_dDotWD = m_dDotWD;
isodrcfg.m_bElbowLine = m_bElbowLine;
param.m_dDN = m_dDn;
param.m_dOD = m_dOD;
param.m_dThick = m_dThk;
param.m_dRRatio = m_dRadio;
param.m_nRadioOn = m_nRadioOn;
param.m_nRadioOn = 1;
param.m_nConnectType = 0;
param.m_dPress = 1.0;
_tcscpy(param.szODSn, (LPCTSTR)m_sODSn);
_tcscpy(param.szMertial, (LPCTSTR)m_sMaterial);
_tcscpy(param.szMertialFit, (LPCTSTR)m_sMaterial);
_tcscpy(param.szSys, (LPCTSTR)m_sCurrSys);
_tcscpy(param.szShtNo, (LPCTSTR)m_szShtNo);
_tcscpy(param.szStdNo, (LPCTSTR)m_sStd);
}