#include "stdafx.h" #include "CoreTools.h" #include "GJSXDlg.h" #include "KTModelLayoutXData.h" extern void DLLIMPEXP PipeParamConvert2UnitMeters(WPipe::PipeParam* pParam); extern void DLLIMPEXP PipeParamConvert2UnitMmeters(WPipe::PipeParam* pParam); #define _BYGB_ _T("按执行标准") extern double g_minRadio; IMPLEMENT_DYNAMIC(CGJSXDlg, CDialog) CGJSXDlg::CGJSXDlg(CWnd* pParent /*=NULL*/) : CDialog(CGJSXDlg::IDD, pParent) { m_pDb = NULL; m_nDN = 100; m_dOD = 107; m_dt = 3.5; m_nDDir = 0; m_nRadioOn = 0; } CGJSXDlg::~CGJSXDlg(void) { } void CGJSXDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Radio(pDX, IDC_RADIODN, m_nDDir); DDX_Control(pDX, IDC_PIPELIST, m_wndPipeList); DDX_Control(pDX, IDC_LISTELBOWRAD, m_wndElbowradList); DDX_Control(pDX, IDC_LIST1, m_wndPressList); DDX_Text(pDX,IDC_EDIT1,m_nDN); DDX_Text(pDX,IDC_EDIT2,m_dOD); DDX_Text(pDX,IDC_EDIT3,m_dt); DDX_Text(pDX,IDC_EDIT4, m_sLevel); DDX_Text(pDX,IDC_EDIT5,m_dRatio); DDX_Text(pDX,IDC_EDIT6,m_sMat); DDX_Text(pDX, IDC_EDITPRESS, m_dPress); DDX_Control(pDX, IDC_COMBOMATERSFIT, m_wndComboMatersFit); DDX_CBString(pDX, IDC_COMBOMATERSFIT, m_sMertialFit); DDX_CBString(pDX, IDC_COMBOSYS, m_sSys); DDX_Control(pDX, IDC_COMBOSYS, m_wndComboSys); DDX_Radio(pDX, IDC_RADIO6, m_nRadioOn); } BEGIN_MESSAGE_MAP(CGJSXDlg, CDialog) END_MESSAGE_MAP() BOOL CGJSXDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndPipeList.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_wndPipeList.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,60); m_wndPipeList.InsertColumn(1,_T("外径"),LVCFMT_LEFT,60); m_wndPipeList.InsertColumn(2,_T("壁厚"),LVCFMT_LEFT,60); m_wndPipeList.InsertColumn(3,_T("重量"),LVCFMT_LEFT,60); m_wndPipeList.InsertColumn(4,_T("执行标准"),LVCFMT_LEFT,0); m_wndPipeList.InsertColumn(5,_T("物料描述"),LVCFMT_LEFT,0); m_wndPipeList.InsertColumn(6,_T("规格型号"),LVCFMT_LEFT,0); if (m_pDb != NULL) { InitPipeList(); InitPressFromDb(); } UpdateData(FALSE); return TRUE; } void CGJSXDlg::OnOK() { UpdateData(); POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition(); if (ps != NULL) { int nItem = m_wndPipeList.GetNextSelectedItem(ps); if (nItem != -1) { m_param.m_dDN = _ttof(m_wndPipeList.GetItemText(nItem,0)); m_param.m_dOD = _ttof(m_wndPipeList.GetItemText(nItem,1)); m_param.m_dThick = _ttof(m_wndPipeList.GetItemText(nItem,2)); } else { AfxMessageBox(_T("请选择管线规格系列!")); return; } } CString sText, sSQL; int nSel = m_wndElbowradList.GetCurSel(); if (nSel != -1) { m_wndElbowradList.GetText(nSel,sText); if (sText.CompareNoCase(_BYGB_) == 0) { m_param.m_nRadioOn = m_nRadioOn; m_param.m_dRRatio = g_minRadio;//最小 //根据ODSN查询数据库 默认曲率 sSQL.Format(_T("select distinct [弯头曲率] from [AecElbowData] where [外径系列]='%s' order by [弯头曲率]"), m_param.szODSn); CStringArray arRad; m_pDb->GetSelData(sSQL, arRad); if (arRad.GetSize() > 0) { m_param.m_dRRatio = _ttof(arRad.GetAt(0)); } } else { m_param.m_dRRatio = _ttof(sText); m_param.m_nRadioOn = m_nRadioOn; } } nSel = m_wndPressList.GetCurSel(); if (nSel != -1) { sText = _T(""); m_wndPressList.GetText(nSel,sText); _tcscpy(m_param.szLevel,(LPCTSTR)sText); } nSel = m_wndComboMatersFit.GetCurSel(); if (nSel != -1) { _tcscpy(m_param.szMertialFit,(LPCTSTR)m_sMertialFit); } _tcscpy(m_param.szSys,(LPCTSTR)m_sSys); switch(m_nDDir) { case 0: { m_param.m_dD = m_param.m_dDN; m_param.m_eD = WPipe::eDN; break; } case 1: { m_param.m_dD = m_param.m_dOD; m_param.m_eD = WPipe::eOD; break; } case 2: { m_param.m_dD = m_param.m_dOD - 2.0 * m_param.m_dThick; m_param.m_eD = WPipe::eID; break; } default: break; } EndDialog(IDOK); } void CGJSXDlg::SetDbServer(CUIISQLiteServer* pDb) { m_pDb = pDb; } void CGJSXDlg::InitPipeList() { if (m_pDb != NULL) { m_wndPipeList.DeleteAllItems(); //公称直径系列 CString sSQL,sText,sTemp; sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量] from AecOD where [公称直径]=%d order by [壁厚]"),m_nDN ); CUIIValueTable table; m_pDb->GetSelData(sSQL,table); table.ShowToListCtrl(&m_wndPipeList); CString sDnold,sODold,sDt; sDnold.Format(_T("%d"),(int)(m_param.m_dDN + 0.5) ); sODold.Format(_T("%d"),(int)(m_param.m_dOD + 0.5)); double dt; bool bFind = false; for (int i = 0;i < m_wndPipeList.GetItemCount();i++) { sText = m_wndPipeList.GetItemText(i,0); sTemp = m_wndPipeList.GetItemText(i,1); dt = _ttof( m_wndPipeList.GetItemText(i,2)); if (sText.CompareNoCase(sDnold) == 0 && sTemp.CompareNoCase(sODold) == 0 && fabs(dt - m_param.m_dThick) < 1.e-2 ) { m_wndPipeList.SetItemState(i,LVIS_SELECTED,LVIS_SELECTED); m_wndPipeList.EnsureVisible(i,TRUE); bFind = true; break; } } if (!bFind) { if (m_wndPipeList.GetItemCount() > 0) m_wndPipeList.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); } //曲率半径 sSQL = _T("select [曲率半径] from AecElbowradius order by [曲率半径]"); CString sRat; CStringArray arVals; arVals.Add(_BYGB_); int nSel = 0; m_pDb->GetSelData(sSQL,arVals); for ( i = 0;i < arVals.GetSize();i++) { m_wndElbowradList.InsertString(i,arVals.GetAt(i)); sRat = arVals.GetAt(i); if ( fabs(_ttof(sRat) - m_param.m_dRRatio) < 1.e-6) { nSel = i; if ((m_param.m_dRRatio - g_minRadio) < 1.e-3) nSel = 0; } } m_wndElbowradList.SetCurSel(nSel); //材质 arVals.RemoveAll(); sSQL = _T("select [材质] from AecMaterial where [类型]='管件'"); m_pDb->GetSelData(sSQL,arVals); for (i = 0;i < arVals.GetSize();i++) { m_wndComboMatersFit.InsertString(i,arVals.GetAt(i)); if (m_sMertialFit.CompareNoCase(arVals.GetAt(i)) == 0) { m_wndComboMatersFit.SetCurSel(i); } } //显示当前图层系统 CString sStd(CoreTools::getCurrentPipeSysTblName()); //sSQL = _T("select tablename from wpipecfg where currstd=1"); //m_pDb->GetSelData(sSQL,sStd); sSQL.Format(_T("select distinct system from %s"),sStd); CStringArray arSyses; m_pDb->GetSelData(sSQL,arSyses); int nCursel = -1; for (int i = 0;i < arSyses.GetSize();i++) { sTemp = arSyses.GetAt(i); m_wndComboSys.AddString(sTemp); if (m_sSys.CompareNoCase(sTemp) == 0) { nCursel = i; } } if (nCursel != -1) m_wndComboSys.SetCurSel(nCursel); } } void CGJSXDlg::InitPressFromDb() { //获取项目名称 AecDbObjXDataMap xDataMap; xDataMap.SetAt(DOC_TRADE, WPipe::ePetro); //应用行业,石油 xDataMap.SetAt(DOC_SCALE, _T("1:50")); //出图比例 xDataMap.SetAt(DOC_PLOTWIDTH, 0.5); //最小打印线宽 xDataMap.SetAt(DOC_DPLOTWIDTH, 0.5); //双线打印线宽 xDataMap.SetAt(DOC_WELDDIA, 1.0); //焊点直径 xDataMap.SetAt(DOC_PIPEMINDIA, 65.0); //最小管道直径 xDataMap.SetAt(DOC_PIPEMAXDIA, 200.0); //最大管线直径 xDataMap.SetAt(DOC_PERELBOWDIA, 40.0); //垂直弯头直径 xDataMap.SetAt(DOC_BREAKSPACE, 2.0); //交叉断线间距 xDataMap.SetAt(DOC_UNIT, 0); //单位 xDataMap.SetAt(DOC_DIMTERM, 0); //标注端符 xDataMap.SetAt(DOC_DIMTXTH, 2.0); //标注文字高度 xDataMap.SetAt(DOC_DIMTXTF, 0.7); //标注文字宽度系数 xDataMap.SetAt(DOC_EQPTXTH, 2.0); //设备标注文字高度 xDataMap.SetAt(DOC_EQPTXTF, 1.0); //设备标注文字宽度系数 xDataMap.SetAt(DOC_STRTXTH, 2.0); //结构标注文字高度 xDataMap.SetAt(DOC_STRTXTF, 0.7); //结构标注文字宽度系数 xDataMap.SetAt(DOC_SCRIPTT, _T("{0}{-}{1}{-}{2}{-}{3}"));//上标脚本 xDataMap.SetAt(DOC_SCRIPTB, _T("{4}{-}{5}"));//下标脚本 xDataMap.SetAt(DOC_ELTYPE, 0); //标高设置 xDataMap.SetAt(DOC_ELDESCR, _T("--")); //标高文本 if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT,xDataMap)) { acedAlert(_T("\n系统未初始化!")); return; } CString sProject; xDataMap.GetAt(DOC_PIDPROJECT,sProject); CString sSQL; sSQL.Format(_T("select [等级名称] from AecSpecname where [项目名称]='%s'"),sProject); CStringArray arValues; m_pDb->GetSelData(sSQL,arValues); m_wndPressList.ResetContent(); for (int i = 0;i < arValues.GetSize();i++) { m_wndPressList.InsertString(i,arValues.GetAt(i)); } m_wndPressList.AddString(m_sLevel); int nIndex = m_wndPressList.FindString(0,m_param.szLevel);//压力等级 if (nIndex != -1) { m_wndPressList.SetCurSel(nIndex); } else { m_wndPressList.SetCurSel(0); } } void CGJSXDlg::SetShowParam(WPipe::PipeParam* pParam) { if (pParam != NULL) { memcpy(&m_param,pParam,sizeof(WPipe::PipeParam)); PipeParamConvert2UnitMmeters(&m_param); m_nDN = (int)(m_param.m_dDN + 0.5); m_dOD = m_param.m_dOD; m_dt = m_param.m_dThick; m_dRatio = pParam->m_dRRatio; m_sLevel = pParam->szLevel; m_sMat = pParam->szMertialFit; m_sMertialFit = pParam->szMertialFit; m_sSys = pParam->szSys; m_nRadioOn = pParam->m_nRadioOn; m_dPress = pParam->m_dPress; switch(pParam->m_eD) { case WPipe::eDN: { m_nDDir = 0; break; } case WPipe::eOD: { m_nDDir = 1; break; } case WPipe::eID: { m_nDDir = 2; break; } default: break; } } } void CGJSXDlg::GetPipeParam(WPipe::PipeParam* pParam) const { if (pParam != NULL) { memcpy(pParam,&m_param,sizeof(WPipe::PipeParam)); //如果是米单位 PipeParamConvert2UnitMeters(pParam); } }