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

1179 lines
27 KiB
C++

#include "stdafx.h"
#include "DJGXDlg.h"
#include "uiiado.h"
#include "PipelineTools.h"
#include "KTInsulateMainDlg.h"
#include "AecPipeSupport.h"
#include "CoreTools.h"
#include "KTModelLayoutXData.h"
#include "SpecIndexDlg.h"
const LPCTSTR g_pszAecSpecPipe[] = {_T("公称直径"),_T("外径"),_T("壁厚"),_T("类型"),_T("端面"),_T("材质"),_T("表号"),_T("标准号"),_T("外径系列"),_T("描述"),_T("制造类型"),_T("元件代码"),NULL};
const int g_nColWidths[] = { 90, 60, 60, 120, 60, 180, 80, 180, 80, 180, 80, 140, 0};
const LPCTSTR g_pszAecPipeSpecIndex[] = {_T("介质"),_T("介质代号"),_T("最大口径"),_T("设计温度"),_T("设计压力"),_T("法兰等级"),_T("材质"),_T("腐蚀裕度"),NULL};
const int g_nColWidths2[] = { 200, 80, 80, 80, 80, 80, 140, 80, 0};
extern void DLLIMPEXP XDataMapToPipeParam(const AecDbObjXDataMap *pXDataMapSrc, WPipe::PipeParam *pParamL);
extern void DLLIMPEXP PipeParamConvert2UnitMeters(WPipe::PipeParam *pParam);
extern void DLLIMPEXP PipeParamConvert2UnitMmeters(WPipe::PipeParam *pParam);
double g_minRadio = 1.0;
IMPLEMENT_DYNAMIC(CDJGXDlg, CDialog)
CDJGXDlg::CDJGXDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDJGXDlg::IDD, pParent)
, m_nElSel(0)
, m_dEl(1000)
, m_nDDir(0)
, m_sSerNo(_T("1000"))
, m_sZoneNo(_T("A"))
, m_sPipeNo(_T(""))
, m_dFPLen(10000)
, m_sParamSetting(_T(""))
, m_sUnit(_T("00"))
{
m_nConnectType = 0;
m_pDb = NULL;
m_sCurrSys = _T("");
m_bLockEl = FALSE;
m_bFilled = false;
memset(&m_pipeParam,0,sizeof(WPipe::PipeParam));
}
CDJGXDlg::~CDJGXDlg()
{
}
void CDJGXDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO2, m_wndProCombo);
DDX_Control(pDX, IDC_COMBO1, m_wndSpecCombo);
DDX_Control(pDX, IDC_COMBO4, m_wndRadioCombo);
DDX_Control(pDX, IDC_LIST2, m_wndPipeSpecList);
DDX_Control(pDX, IDC_LIST1, m_wndPipeSpecIdxList);
DDX_Radio(pDX, IDC_RADIO3, m_nElSel);
DDX_Text(pDX, IDC_EDIT5, m_dEl);
DDX_Radio(pDX, IDC_RADIO1, m_nDDir);
DDX_Text(pDX, IDC_EDIT1, m_sSerNo);
DDX_Text(pDX, IDC_EDIT2, m_sZoneNo);
DDX_Text(pDX, IDC_EDIT3, m_sPipeNo);
DDX_Text(pDX, IDC_EDIT4, m_dFPLen);
DDX_Control(pDX, IDC_COMBO3, m_wndComboSys);
DDX_Text(pDX, IDC_EDIT6, m_sParamSetting);
DDX_Text(pDX, IDC_EDIT7, m_sUnit);
DDX_Control(pDX, IDC_EDIT5, m_wndEditEl);
}
BEGIN_MESSAGE_MAP(CDJGXDlg, CDialog)
ON_BN_CLICKED(IDOK, &CDJGXDlg::OnBnClickedOk)
ON_CBN_SELCHANGE(IDC_COMBO2, &CDJGXDlg::OnCbnSelchangeCombo2)
ON_CBN_SELCHANGE(IDC_COMBO1, &CDJGXDlg::OnCbnSelchangeCombo1)
ON_BN_CLICKED(IDC_BUTTON2, &CDJGXDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CDJGXDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BTADDSPECIDX,&CDJGXDlg::OnBnClickedAddSpecIdx)
ON_EN_CHANGE(IDC_EDIT2, &CDJGXDlg::OnEnChangeEdit2)
ON_EN_CHANGE(IDC_EDIT7, &CDJGXDlg::OnEnChangeEdit2)
ON_CBN_SELCHANGE(IDC_COMBOSYSLAY, &CDJGXDlg::OnCbnSelchangeComboSys)
ON_NOTIFY(NM_CLICK, IDC_LIST1, &CDJGXDlg::OnNMClickList1)
END_MESSAGE_MAP()
BOOL CDJGXDlg::OnInitDialog()
{
CDialog::OnInitDialog();
InitListCtrlStyle();
ShowProSpec();
ShowRadio();
InitLayerSys();
return TRUE;
}
BOOL CDJGXDlg::InitListCtrlStyle()
{
CBitmap bmp;
if (!bmp.LoadBitmap(IDB_BMPSPEC))
{
AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BMPSPEC);
ASSERT(FALSE);
return FALSE;
}
BITMAP bmpObj;
bmp.GetBitmap(&bmpObj);
UINT nFlags = ILC_COLOR24 | ILC_MASK;
m_imageList.Create(16, bmpObj.bmHeight, nFlags, 0, 0);
m_imageList.Add(&bmp, RGB(255, 0, 0));
m_wndPipeSpecList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
m_wndPipeSpecList.SetImageList(&m_imageList, LVSIL_SMALL);
m_wndPipeSpecIdxList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
m_wndPipeSpecIdxList.SetImageList(&m_imageList, LVSIL_SMALL);
int n = 0;
while(g_nColWidths[n] > 0)
{
m_wndPipeSpecList.InsertColumn(n,g_pszAecSpecPipe[n],LVCFMT_LEFT,g_nColWidths[n]);
n++;
}
n = 0;
while(g_nColWidths2[n] > 0)
{
m_wndPipeSpecIdxList.InsertColumn(n,g_pszAecPipeSpecIndex[n],LVCFMT_LEFT,g_nColWidths2[n]);
n++;
}
m_wndEditEl.EnableWindow(!m_bLockEl);
return TRUE;
}
void CDJGXDlg::SetOnlyByDN(int nDN)
{
}
bool CDJGXDlg::ShowProSpec()
{
AecDbObjXDataMap xDataMap;
if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap))
{
acedAlert(_T("\n系统未初始化!请执行设置带单下初始设置!"));
return false;
}
CString sPro;
xDataMap.GetAt(DOC_PIDPROJECT, sPro);
CString sSQL;
sSQL.Format(_T("select distinct [项目名称] from [AecSpecname]"));
CStringArray arVals;
m_pDb->GetSelData(sSQL,arVals);
for(int i = 0;i < arVals.GetSize();i++)
{
m_wndProCombo.AddString(arVals.GetAt(i));
}
int nSel = 0;
if ((nSel = m_wndProCombo.FindString(0, sPro)) != -1)
{
m_wndProCombo.SetCurSel(nSel);
}
else
{
m_wndProCombo.SetCurSel(0);
sPro = arVals.GetAt(0);
}
arVals.RemoveAll();
sSQL.Format(_T("select distinct [等级名称] from [AecSpecname] where [项目名称]='%s'"),sPro);
m_pDb->GetSelData(sSQL,arVals);
for(int n = 0;n < arVals.GetSize();n++)
{
m_wndSpecCombo.AddString(arVals.GetAt(n));
}
nSel = -1;
if (m_bFilled)
{
if ((nSel = m_wndSpecCombo.FindString(0, m_pipeParam.szLevel)) == -1)
{
}
}
CString sSpec;
if (nSel != -1)
{
m_wndSpecCombo.SetCurSel(nSel);
sSpec = arVals.GetAt(nSel);
}
else
{
sSQL.Format(_T("select [项目名称],[等级名称] from [AecSpecname] where [等级名称]='%s'"), m_pipeParam.szLevel);
arVals.RemoveAll();
m_pDb->GetSelData(sSQL, arVals);
if (arVals.GetSize() >= 2)
{
sPro = arVals.GetAt(0);
sSpec = arVals.GetAt(1);
int nPro = m_wndProCombo.FindString(0, sPro);
if (nPro != -1)
{
m_wndProCombo.SetCurSel(nPro);
OnCbnSelchangeCombo2();
return true;
}
}
}
if (nSel == -1 && m_wndSpecCombo.GetCount() > 0)
{
m_wndSpecCombo.SetCurSel(0);
m_wndSpecCombo.GetLBText(0, sSpec);
}
ShowPipeSpecList(sPro,sSpec);
return true;
}
bool CDJGXDlg::InitLayerSys()
{
//显示当前图层系统
CStringArray arSyses;
for (int i = 0;i < m_wndPipeSpecIdxList.GetItemCount();i++)
{
//介质
arSyses.Add(m_wndPipeSpecIdxList.GetItemText(i, 0));
if (i == 0)
{
m_sCurrSys = m_wndPipeSpecIdxList.GetItemText(i, 0);
}
}
m_wndComboSys.ResetContent();
CString sTemp;
int nCursel = 0;
for (int i = 0;i < arSyses.GetSize();i++)
{
sTemp = arSyses.GetAt(i);
m_wndComboSys.AddString(sTemp);
if (m_sCurrSys.CompareNoCase(sTemp) == 0)
{
nCursel = i;
}
}
m_wndComboSys.SetCurSel(nCursel);
//获取分系统信息
//select layname,pipesys,color,linetype,linewidth
//LAYKEY LAYNAME PIPESYS SYSTEM COLOR LINETYPE LINEWIDTH
//11 废水管线中心线 管线中心线 废水 4 Continuous:________ 0
CStringArray arVals;
PipelineTools::getPipeSysRecord(m_pDb,m_sCurrSys,arVals);
if (arVals.GetSize() >= 5)
{
m_pipeParam.m_nPipeColor = _ttoi(arVals.GetAt(2));
}
m_idCurSys = CoreTools::getLyForPipe(m_sCurrSys);
OnCbnSelchangeComboSys();
return true;
}
void CDJGXDlg::OnCbnSelchangeComboSys()
{
UpdateData();
FormatParamSettingAndSpec();
UpdateData(FALSE);
}
void CDJGXDlg::OnCbnSelchangeCombo2()
{
int nCur = m_wndProCombo.GetCurSel();
if (nCur != -1)
{
CString sPro;
m_wndProCombo.GetLBText(nCur,sPro);
m_wndSpecCombo.ResetContent();
CStringArray arVals;
CString sSQL;
sSQL.Format(_T("select distinct [等级名称] from [AecSpecname] where [项目名称]='%s'"),sPro);
m_pDb->GetSelData(sSQL,arVals);
for(int n = 0;n < arVals.GetSize();n++)
{
m_wndSpecCombo.AddString(arVals.GetAt(n));
}
m_wndSpecCombo.SetCurSel(0);
CString sSpec = arVals.GetAt(0);
ShowPipeSpecList(sPro,sSpec);
}
}
void CDJGXDlg::OnCbnSelchangeCombo1()
{
int nCur = m_wndProCombo.GetCurSel();
if (nCur != -1)
{
CString sPro;
m_wndProCombo.GetLBText(nCur,sPro);
nCur = m_wndSpecCombo.GetCurSel();
if (nCur != -1)
{
CString sSpec;
m_wndSpecCombo.GetLBText(nCur,sSpec);
ShowPipeSpecList(sPro,sSpec);
}
}
}
bool CDJGXDlg::ShowPipeSpecList(CString& sPro,CString& sSpec)
{
m_wndPipeSpecList.DeleteAllItems();
m_wndPipeSpecIdxList.DeleteAllItems();
CString sFields = _T("");
int n = 0;
while(g_nColWidths[n] > 0)
{
sFields += _T("[");
sFields += g_pszAecSpecPipe[n];
sFields += _T("],");
n++;
}
sFields.TrimRight(_T(','));
CString sSQL,sDN;
sSQL.Format(_T("select %s from [AecSpecPipe] where [项目名称]='%s' and [等级名称]='%s' and [短代码]='PIP' order by [公称直径]"),sFields,sPro,sSpec);
CUIIValueTable valueTable;
m_pDb->GetSelData(sSQL,valueTable);
int nSel = 0;
CStringArray arVals;
for(int i = 0;i < valueTable.GetTableLogicSize();i++)
{
arVals.RemoveAll();
valueTable.GetValueRecord(i,arVals);
//DN
sDN = arVals.GetAt(0);
m_wndPipeSpecList.InsertItem(i,sDN,0);
if (m_bFilled)
{
if (_ttoi(sDN) == m_pipeParam.m_dDN)
nSel = i;
}
for(int n = 1;n < arVals.GetSize();n++)
{
m_wndPipeSpecList.SetItemText(i,n,arVals.GetAt(n));
}
}
m_wndPipeSpecList.SetItemState(nSel,LVIS_SELECTED,LVIS_SELECTED);
n = 0;
sFields = _T("");
while(g_nColWidths2[n] > 0)
{
sFields += _T("[");
sFields += g_pszAecPipeSpecIndex[n];
sFields += _T("],");
n++;
}
sFields.TrimRight(_T(','));
/*
[等级号] VARCHAR(50),
[介质] VARCHAR(256),
[介质代号] VARCHAR(256),
[最大口径] INTEGER,
[设计温度] INTEGER,
[设计压力] FLOAT,
[法兰等级] VARCHAR(50),
[材质] varchar(256),
[腐蚀裕度] float);
*/
sSQL.Format(_T("select %s from [AecPipeSpecIndex] where [等级号]='%s'"),sFields,sSpec);
valueTable.RemoveAll(TRUE);
m_pDb->GetSelData(sSQL,valueTable);
CString sMedia;
nSel = 0;
for(int i = 0;i < valueTable.GetTableLogicSize();i++)
{
arVals.RemoveAll();
valueTable.GetValueRecord(i,arVals);
sMedia = arVals.GetAt(0);
m_wndPipeSpecIdxList.InsertItem(i,sMedia,0);
if (m_bFilled)
{
if (sMedia.CompareNoCase(m_pipeParam.szSys) == 0)
nSel = i;
}
for(int n = 1;n < arVals.GetSize();n++)
{
m_wndPipeSpecIdxList.SetItemText(i,n,arVals.GetAt(n));
}
}
m_wndPipeSpecIdxList.SetItemState(nSel,LVIS_SELECTED,LVIS_SELECTED);
ShowPipeSpecLayer();
InitLayerSys();
return true;
}
//8-200 之间
int randint_range(int n, int m) {//产生n~m间的随机数(包括m和n)
double base = ((double)rand()) / RAND_MAX;
int res = n + (base * (double)(m - n + 1));
return res;
}
void CDJGXDlg::ShowPipeSpecLayer()
{
int nColor = -1;
CString sName,sLayer,sDimTxt,sSQL,sFields,sSys;
/*
[LAYKEY] varchar(50),
[LAYNAME] varchar(50),
[PIPESYS] varchar(50),
[SYSTEM] varchar(50),
[COLOR] varchar(50),
[LINETYPE] varchar(50),
[LINEWIDTH] varchar(50),
[DIMKEY] varchar(50),
[MATERIAL] varchar(50));
*/
sFields = _T("LAYKEY,LAYNAME,PIPESYS,[SYSTEM],COLOR,LINETYPE,LINEWIDTH,DIMKEY,MATERIAL");
int nRes = 0;
for (int i = 0;i < m_wndPipeSpecIdxList.GetItemCount();i++)
{
/*
[介质] VARCHAR(256),
[介质代号] VARCHAR(256),
[最大口径] INTEGER,
[设计温度] INTEGER,
[设计压力] FLOAT,
[法兰等级] VARCHAR(50),
[材质] varchar(256),
[腐蚀裕度] float);
*/
sName = m_wndPipeSpecIdxList.GetItemText(i, 0); //[介质]
sDimTxt = m_wndPipeSpecIdxList.GetItemText(i, 1);//[介质代号]
if (i == 0)
m_sCurrSys = sSys;
sLayer.Format(_T("%s边线"),sName);
sSQL.Format(_T("select * from [WConfig_CN] where [LAYNAME]='%s'"),sLayer);
if ( m_pDb->IsSelEmpty(sSQL))
{
/*
[LAYKEY] varchar(50),
[LAYNAME] varchar(50),
[PIPESYS] varchar(50),
[SYSTEM] varchar(50),
[COLOR] varchar(50),
[LINETYPE] varchar(50),
[LINEWIDTH] varchar(50),
[DIMKEY] varchar(50),
[MATERIAL] varchar(50));
*/
nColor = randint_range(8, 200);
//边线
sSys = _T("管线外边线");
sSQL.Format(_T("insert into [WConfig_CN] (%s) values ('%d','%s','%s','%s','%d','%s','%s','%s','%s' )"),
sFields,nColor, sLayer, sSys, sName,nColor,_T("Continuous"),_T("0.0"), sDimTxt,sDimTxt);
nRes = m_pDb->ExecuteSQL(sSQL);
//中心线
nColor = randint_range(1, 7);
sLayer.Format(_T("%s中心线"), sName);
sSys = _T("管线中心线");
sSQL.Format(_T("insert into [WConfig_CN] (%s) values ('%d','%s','%s','%s','%d','%s','%s','%s','%s' )"),
sFields,nColor, sLayer, sSys, sName, nColor, _T("CENTER2"), _T("0.0"), sDimTxt, sDimTxt);
nRes = m_pDb->ExecuteSQL(sSQL);
}
}
}
bool CDJGXDlg::ShowRadio()
{
CString sSQL;
sSQL.Format(_T("select [曲率半径] from [AecElbowradius] order by [曲率半径]"));
CStringArray arVals;
m_pDb->GetSelData(sSQL,arVals);
for(int i = 0;i < arVals.GetSize();i++)
{
m_wndRadioCombo.AddString(arVals.GetAt(i));
}
m_wndRadioCombo.SetCurSel(2);
return true;
}
static void TextToApp(WPipe::PipeParam& pparam, const CString& sText)
{
//BE 坡口焊
//BW 对焊
//MNPT
//MGE
//SW 承插
//PE 平端
//SCRD 螺纹
//SAWH 螺旋埋弧焊
//TE 螺纹端
//ISNS 内螺纹,暗杆
//ISRS 内螺纹, 明杆
//FLGD 法兰型
pparam.m_app = WPipe::eButtweld;
pparam.m_nConnectType = 0;//焊接
if (sText.CompareNoCase(_T("SW") ) == 0)
{
pparam.m_app = WPipe::eSanitary;
pparam.m_nConnectType = 1;//承插
}
else if(sText.CompareNoCase(_T("SCRD") ) == 0 ||
sText.CompareNoCase(_T("SAWH")) == 0 ||
sText.CompareNoCase(_T("TE")) == 0 ||
sText.CompareNoCase(_T("ISNS")) == 0 ||
sText.CompareNoCase(_T("ISRS")) == 0)
{
pparam.m_app = WPipe::eVictaulic;
pparam.m_nConnectType = 2;//螺纹
}
else if(sText.CompareNoCase(_T("FLGD") ) == 0 ||
sText.CompareNoCase(_T("FG")) == 0)
{
pparam.m_app = WPipe::eFlange;
pparam.m_nConnectType = 3;//法兰
}
}
static BOOL IsGSFMaterial(CString& sMaterial,CString &sODNo)
{
//目前只能按照材质判断
if (sMaterial.Find(_T("衬塑")) != -1 ||
sMaterial.Find(_T("HG/T 20538")) != -1)
{
sODNo = _T("GSF");
return TRUE;
}
return FALSE;
}
static bool IsPlasticsMat(CString &sMaterial, CString &sODNo)
{
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 (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;
}
static BOOL IsSRPEMaterial(CString &sMaterial, CString &sODNo)
{
//目前只能按照材质判断
if (sMaterial.Find(_T("钢骨架")) != -1 ||
sMaterial.Find(_T("CJ/T 123")) != -1)
{
sODNo = _T("SRPE");
return TRUE;
}
return FALSE;
}
void CDJGXDlg::QueryFlangOnPipe()
{
if (m_pipeParam.m_nConnectType == 3 ||
m_pipeParam.m_nConnectType == 5)
{
double dWD = 0, dWh = 0, dThk = 0, dN = 0;
if (TDbPipeSupport::QueryFlangData(m_pDb
, m_pipeParam.m_dDN
, m_pipeParam.m_dPress
, dWD
, dWh
, dThk
, dN
, CoreTools::GetCurrentProject()
, m_pipeParam.szLevel))
{
m_pipeParam.m_dInterfaceL = dWh;
m_pipeParam.m_dInterfaceD = dWD;
}
}
else if (m_pipeParam.m_nConnectType == 1)//承插
{
//
}
else if (m_pipeParam.m_nConnectType == 2)//螺纹
{
//
}
}
void CDJGXDlg::OnBnClickedOk()
{
UpdateData();
m_bFilled = false;
FillPipeParam();
CDialog::OnOK();
}
void CDJGXDlg::FillPipeParam()
{
memset(&m_pipeParam,0,sizeof(WPipe::PipeParam));
CStringArray arVals;
int nItem = -1;
POSITION ps = m_wndPipeSpecList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
nItem = m_wndPipeSpecList.GetNextSelectedItem(ps);
if (nItem == -1)
{
AfxMessageBox(_T("请选择公称直径行!"));
return;
}
}
//SQL查询条件
//[公称直径]=%d and [等级名称]='%s' and [项目]='%s'
CString sWhere,sPro;
int nSel = m_wndProCombo.GetCurSel();
if (nSel != -1)
{
m_wndProCombo.GetLBText(nSel, sPro);
}
//等级
CString sSpec;
int nCur = m_wndSpecCombo.GetCurSel();
if (nCur != -1)
{
m_wndSpecCombo.GetLBText(nCur,sSpec);
_tcscpy(m_pipeParam.szLevel,sSpec);
}
//公称
CString sText,sSQL;
sText = m_wndPipeSpecList.GetItemText(nItem,0);
m_pipeParam.m_dDN = _ttof(sText);
m_pipeParam.m_dD = m_pipeParam.m_dDN;
sWhere.Format(_T("[公称直径]=%d and [等级名称]='%s' and [项目名称]='%s'"),(int)(m_pipeParam.m_dDN+0.5),m_pipeParam.szLevel,sPro);
//外径
sText = m_wndPipeSpecList.GetItemText(nItem,1);
m_pipeParam.m_dOD = _ttof(sText);
//壁厚
sText = m_wndPipeSpecList.GetItemText(nItem,2);
m_pipeParam.m_dThick = _ttof(sText);
switch(m_nDDir)
{
case 0:
{
m_pipeParam.m_dD = m_pipeParam.m_dDN;
m_pipeParam.m_eD = WPipe::eDN;
break;
}
case 1:
{
m_pipeParam.m_dD = m_pipeParam.m_dOD;
m_pipeParam.m_eD = WPipe::eOD;
break;
}
case 2:
{
m_pipeParam.m_dD = m_pipeParam.m_dOD - 2.0 * m_pipeParam.m_dThick;
m_pipeParam.m_eD = WPipe::eID;
break;
}
default:
break;
}
//标高
switch(m_nElSel)
{
case 0://中心线
{
break;
}
case 1: //顶参考基准
{
m_dEl -= m_pipeParam.m_dOD / 2.0;
break;
}
case 2://底参考基准
{
m_dEl += m_pipeParam.m_dOD / 2.0;
break;
}
}
m_pipeParam.m_dEl = m_dEl;
//曲率半径
m_pipeParam.m_dRRatio = 3.0;//默认
m_pipeParam.m_nRadioOn = 0;//按曲率
nSel = m_wndRadioCombo.GetCurSel();
if (nSel != -1)
{
m_wndRadioCombo.GetLBText(nSel, sText);
m_pipeParam.m_dRRatio = _ttof(sText);
}
//管道类型
//根据端面确定 焊接 承插 螺纹 法兰 卡箍
m_pipeParam.m_app = WPipe::eButtweld;
TextToApp(m_pipeParam, m_wndPipeSpecList.GetItemText(nItem, 4));
//法兰端面
_tcscpy(m_pipeParam.m_szEndF, _T("PE"));
sSQL.Format(_T("select distinct [端面] from [AecSpecFlange] where %s"), sWhere);
arVals.RemoveAll();
m_pDb->GetSelData(sSQL, arVals);
if (arVals.GetSize() > 0)
{
_tcscpy(m_pipeParam.m_szEndF, arVals.GetAt(0));
}
//垫片信息 --> //[材质],[压力],[垫片厚度],[描述]
sSQL.Format(_T("select distinct [材质],[压力],[垫片厚度],[描述] from [AecSpecGasket] where %s"), sWhere);
arVals.RemoveAll();
m_pDb->GetSelData(sSQL, arVals);
if (arVals.GetSize() >= 4)
{
CString sGaskets;
for (int ii = 0; ii < arVals.GetSize(); ii++)
{
sGaskets += arVals.GetAt(ii);
if (ii < arVals.GetSize() - 1)
sGaskets += _T('/');
}
_tcscpy(m_pipeParam.m_szGastInf, sGaskets);
m_pipeParam.m_dPress = _ttof(arVals.GetAt(1));//取垫片压力
}
//法兰管分段长度
m_pipeParam.m_dInterfaceL3 = m_dFPLen;
//查询变径 由使用过程查询
//管号
_tcscpy(m_pipeParam.szPipeno, m_sPipeNo);
//管道材质
sText = m_wndPipeSpecList.GetItemText(nItem, 5);
_tcscpy(m_pipeParam.szMertial, (LPCTSTR)sText);
//管件材质
sSQL.Format(_T("select distinct [材质] from [AecSpecFit] where [公称直径]=%d and [类别]='管件' and [等级名称]='%s'"), (int)(m_pipeParam.m_dDN + 0.5), m_pipeParam.szLevel);
arVals.RemoveAll();
m_pDb->GetSelData(sSQL, arVals);
if (arVals.GetSize() > 0)
{
_tcscpy(m_pipeParam.szMertialFit, arVals.GetAt(0));
}
CString sODNo = _T("");
sODNo = m_wndPipeSpecList.GetItemText(nItem,8);
//确认是衬塑管,衬塑管法兰连接
if (IsGSFMaterial(sText,sODNo))
{
//sODNo = _T("GSF");
m_pipeParam.m_nRadioOn = 1;//必须按结构长度
m_pipeParam.m_eD = WPipe::eDN;//DN
m_pipeParam.m_nConnectType = 3;//必须法兰
m_pipeParam.m_dRRatio = 1.5;//默认
}
else if (IsPlasticsMat(sText, sODNo))
{
m_pipeParam.m_nRadioOn = 1;//必须按结构长度
m_pipeParam.m_eD = WPipe::eOD;//DN
m_pipeParam.m_nConnectType = 1;//必须承插
}
else if (IsSRPEMaterial(sText, sODNo))
{
}
_tcscpy(m_pipeParam.szODSn, sODNo);
//区号
_tcscpy(m_pipeParam.szZoneNo, m_sZoneNo);
_tcscpy(m_pipeParam.szUnitNo, m_sUnit);
int nItem2 = 0;
ps = m_wndPipeSpecIdxList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
nItem2 = m_wndPipeSpecIdxList.GetNextSelectedItem(ps);
if (nItem2 == -1)
{
AfxMessageBox(_T("请选择管道等级索引!"));
return;
}
}
//表号
sText = m_wndPipeSpecList.GetItemText(nItem, 6);
_tcscpy(m_pipeParam.szShtNo, sText);
//描述
sText = m_wndPipeSpecList.GetItemText(nItem, 9);
_tcscpy(m_pipeParam.szDescr, sText);
//介质 代号
sText = m_wndPipeSpecIdxList.GetItemText(nItem2, 1);
_tcscpy(m_pipeParam.szMedia, sText);
//上面已经取了垫片压了,
//再次确认转为法兰压力,
if (m_pipeParam.m_dPress < 1.e-2)
{
sSQL.Format(_T("select distinct [压力] from [AecSpecFlange] where %s"), sWhere);
arVals.RemoveAll();
m_pDb->GetSelData(sSQL,arVals);
if (arVals.GetSize() > 0)
{
m_pipeParam.m_dPress = _ttof(arVals.GetAt(0));
}
}
//压力
if (m_pipeParam.m_dPress < 1.e-3)
{
sText = m_wndPipeSpecIdxList.GetItemText(nItem2, 5);
sText.TrimLeft(_T("PN"));
m_pipeParam.m_dPress = _ttof(sText);
}
//系统
//确认创建图层
int nCursel = m_wndComboSys.GetCurSel();
if (nCursel == -1)
{
AfxMessageBox(_T("请选择绘制管线的系统!"));
return;
}
m_wndComboSys.GetLBText(nCursel,m_sCurrSys);
//创建图层 外,中
CoreTools::getLyByPipeSys(m_sCurrSys, true);
CoreTools::getLyByPipeSys(m_sCurrSys, false);
CoreTools::getLyForPipe(m_sCurrSys);
//获取分系统信息
//select layname,pipesys,color,linetype,linewidth
//LAYKEY LAYNAME PIPESYS SYSTEM COLOR LINETYPE LINEWIDTH
//11 废水管线中心线 管线中心线 废水 4 Continuous:________ 0
arVals.RemoveAll();
PipelineTools::getPipeSysRecord(m_pDb, m_sCurrSys, arVals);
if (arVals.GetSize() >= 5)
{
m_pipeParam.m_nPipeColor = _ttoi(arVals.GetAt(2));
}
_tcscpy(m_pipeParam.szSys,m_sCurrSys);
m_idCurSys = CoreTools::getLyForPipe(m_sCurrSys);
//保温伴热
//查询接口 信息
QueryFlangOnPipe();
m_bFilled = true;
}
//保温伴热
void CDJGXDlg::OnBnClickedButton2()
{
UpdateData();
KTInsulateMainDlg dlg;
dlg.SetADOServer(m_pDb);
WPipe::PipeParam param;
memset(&param,0,sizeof(WPipe::PipeParam));
FillPipeParam();
GetPipeParam(&param);
dlg.SetPipeParam(&param);
if (IDOK == dlg.DoModal())
{
_tcscpy(m_pipeParam.szInsMtr,param.szInsMtr);
m_pipeParam.m_dInsThk = param.m_dInsThk;
m_pipeParam.m_nInsAndHead = param.m_nInsAndHead;
_tcscpy(m_pipeParam.szInsSpec,param.szInsSpec);
_tcscpy(m_pipeParam.szInsMateral,param.szInsMateral);
_tcscpy(m_pipeParam.szInsTag,param.szInsTag);
_tcscpy(m_pipeParam.szInsDim,param.szInsDim);
_tcscpy(m_pipeParam.szTraMtoInfo,param.szTraMtoInfo);
FormatParamSettingAndSpec();
UpdateData(FALSE);
}
}
void CDJGXDlg::FormatParamSettingAndSpec()
{
//介质压力
CString sZone, sDN, sPP, sNo, sGrade;
CString sText;
sText.Format(_T("%s"), m_pipeParam.szMedia);
sPP = sText;
m_sParamSetting = sText + _T("-");
sText.Format(_T("%s"), m_pipeParam.szLevel);
sGrade = sText;
m_sParamSetting += sText + _T("-");
sText.Format(_T("%d"), (int)m_pipeParam.m_dDN);
sDN = sText;
m_sParamSetting += sText + _T("-");
sText.Format(_T("%.1f"), m_pipeParam.m_dRRatio);
m_sParamSetting += sText + _T("-");
sText.Format(_T("%s"), m_pipeParam.szInsMtr);
sText.TrimRight(_T('-'));
if (!sText.IsEmpty())
{
m_sParamSetting += sText + _T("-");
}
sText.Format(_T("%.1f"), m_pipeParam.m_dInsThk);
//参数=介质-等级-DN-曲率-保温-保温厚度
m_sParamSetting += sText;
CString sAdd;
if ( _tcslen(m_pipeParam.szInsMtr) > 0 ) sAdd = _T("保温");
if ( _tcslen(m_pipeParam.szTraMtoInfo) > 0 ) sAdd += _T("伴热");
//管线号= 区号-单元号-顺序号-DN-等级-保温伴热
m_sPipeNo.Format(_T("%s-%s-%s-%s-%s-%s"), m_sZoneNo,m_sUnit, m_sSerNo,sDN,sGrade, sAdd);
m_sPipeNo.TrimRight(_T('-'));
}
//分系统设置
void CDJGXDlg::OnBnClickedButton3()
{
CStringArray arSyses;
if (!PipelineTools::setLayerSys(m_pDb, arSyses))
{
return;
}
m_wndComboSys.ResetContent();
for (int i = 0; i < arSyses.GetSize(); i++)
{
m_wndComboSys.AddString(arSyses.GetAt(i));
}
if (arSyses.GetSize() > 0)
{
m_wndComboSys.SetCurSel(0);
m_wndComboSys.GetLBText(0, m_sCurrSys);
}
}
void CDJGXDlg::OnBnClickedAddSpecIdx()
{
//等级
CString sSpec,sSQL,sPro;
int nCur = m_wndSpecCombo.GetCurSel();
if (nCur != -1)
{
m_wndSpecCombo.GetLBText(nCur, sSpec);
}
else
{
AfxMessageBox(_T("请选择等级!"));
return;
}
int nPro = m_wndProCombo.GetCurSel();
if (nPro != -1)
{
m_wndProCombo.GetLBText(nPro, sPro);
}
else
{
AfxMessageBox(_T("请选择项目!"));
return;
}
CSpecIndexDlg dlg;
if (m_wndPipeSpecIdxList.GetItemCount() > 0)
{
dlg.m_sMaterial = m_wndPipeSpecIdxList.GetItemText(0, 6);
dlg.m_nMaxD = _ttoi(m_wndPipeSpecIdxList.GetItemText(0,2));
dlg.m_sFlgPN = m_wndPipeSpecIdxList.GetItemText(0, 5);
}
dlg.m_pDb = m_pDb;
if (IDOK == dlg.DoModal())
{
//[等级号] VARCHAR(50),
//[介质] VARCHAR(256),
//[介质代号] VARCHAR(256),
//[最大口径] INTEGER,
//[设计温度] INTEGER,
//[设计压力] FLOAT,
//[法兰等级] VARCHAR(50),
//[材质] varchar(256),
//[腐蚀裕度] float);
sSQL.Format(_T("insert into [AecPipeSpecIndex] ([等级号],[介质],[介质代号],[最大口径],[设计温度],[设计压力],[法兰等级],[材质],[腐蚀裕度])\
values ('%s','%s','%s',%d,%d,%.2f,'%s','%s',%.1f)"),
sSpec, dlg.m_sMedia, dlg.m_sMediaCode, dlg.m_nMaxD, dlg.m_nTmp, dlg.m_dPress, dlg.m_sFlgPN, dlg.m_sMaterial, dlg.m_dFsYd);
if (m_pDb->ExecuteSQL(sSQL))
{
ShowPipeSpecList(sPro, sSpec);
}
}
}
void CDJGXDlg::SetFromXDataMap(AecDbObjXDataMap *pXDataMap)
{
if (pXDataMap != NULL)
{
pXDataMap->GetAt(PIPE_ZONE, m_sZoneNo);
pXDataMap->GetAt(KEY_NO, m_sSerNo);
//*-*-*-*-*-
pXDataMap->GetAt(PIPE_NO, m_sPipeNo);
//管线号= 区号-单元号-顺序号-DN-等级-保温伴热
CStringArray arTxts;
CoreTools::SplitString(m_sPipeNo, _T('-'), arTxts);
if (arTxts.GetSize() > 2)
m_sUnit = arTxts.GetAt(1);
WPipe::PipeParam param;
memset(&param, 0, sizeof(WPipe::PipeParam));
XDataMapToPipeParam(pXDataMap, &param);
SetShowParam(&param);
}
}
void CDJGXDlg::SetShowParam(WPipe::PipeParam* pParam)
{
if (pParam != NULL)
{
memcpy(&m_pipeParam,pParam,sizeof(WPipe::PipeParam));
m_bFilled = true;
m_dEl = pParam->m_dEl;
}
}
bool CDJGXDlg::GetPipeParam(WPipe::PipeParam* pParam) const
{
if (pParam != NULL)
{
memcpy(pParam,&m_pipeParam,sizeof(WPipe::PipeParam));
pParam->nPIPCmd = 1;
//如果是米单位
PipeParamConvert2UnitMeters(pParam);
}
return m_bFilled;
}
void CDJGXDlg::OnEnChangeEdit2()
{
UpdateData();
FillPipeParam();
FormatParamSettingAndSpec();
UpdateData(FALSE);
}
void CDJGXDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
if ( pNMItemActivate->iItem != -1 )
{
CString sText;
CString sMedia = m_wndPipeSpecIdxList.GetItemText(pNMItemActivate->iItem,0);
for(int i = 0;i < m_wndComboSys.GetCount();i++)
{
m_wndComboSys.GetLBText(i,sText);
if (sMedia.Find(sText) != -1)
{
m_wndComboSys.SetCurSel(i);
break;
}
}
UpdateData();
FillPipeParam();
FormatParamSettingAndSpec();
UpdateData(FALSE);
}
*pResult = 0;
}