417 lines
9.7 KiB
C++
417 lines
9.7 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);
|
|
} |