Files
envi-code/SourceCode/Code2026/PipelineCmd/WPipeDrawConfigDlg.cpp
T
2026-09-28 15:28:50 +08:00

2102 lines
50 KiB
C++

#include "stdafx.h"
#include "WPipeDrawConfigDlg.h"
#include "KTModelLayoutXData.h"
#include "./syslayercfg/WSysLayCfgDlg.h"
#include "CoreTools.h"
#include "GZCLDlg.h"
#include "KTInsulateMainDlg.h"
#include "PipelineTools.h"
#include "CFLEndFGsDlg.h"
#include "AecPipeSupport.h"
#include "KTMediumDlg.h"
extern void DLLIMPEXP PipeParamConvert2UnitMeters(WPipe::PipeParam* pParam);
extern void DLLIMPEXP XDataMapToPipeParam(const AecDbObjXDataMap* pXDataMapSrc, WPipe::PipeParam* pParamL);
extern void DLLIMPEXP PipeParamConvert2UnitMmeters(WPipe::PipeParam* pParam);
#define _BYGB_ _T("按执行标准")
double g_minRadio = 1.0;
CWPipeDrawConfigDlg* CWPipeDrawConfigDlg::s_pwndLastData = NULL;
IMPLEMENT_DYNAMIC(CWPipeDrawConfigDlg, CDialog)
double CWPipeDrawConfigDlg::g_dMinRRadio = 1.0;
CWPipeDrawConfigDlg::CWPipeDrawConfigDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_WPIPEDRAWCFGDLG, pParent)
, m_nDDir(0)
, m_nConnectType(0)
, m_nRadioOn(1)
, m_sFEGSInf(_T(""))
, m_dFPLen(6000)
, m_dEl(0)
, m_nElSel(0)
, m_sSerNo(_T(""))
, m_sZoneNo(_T(""))
, m_sUnitNo(_T(""))
, m_sPipeNo(_T(""))
, m_sCurrSys(_T(""))
, m_sDescr(_T(""))
,m_sMaterial(_T("碳钢"))
,m_sMaterialFit(_T("碳钢"))
,m_sParamSetting(_T(""))
, m_bFlangNoBom(FALSE)
{
m_sODSn = _T("B");
m_sProject = _T("工业");
m_nTrade = WPipe::eCivial;
m_dDn = 100.0;
m_dOD = 114.0;
m_dThk = 7.0;
m_dRRatio = 2.0;
m_nOnlyDN = 0;
m_bEleReadOnly = FALSE;
m_bOnlyDn = FALSE;
m_sCurrSys = _T("");
m_sSerNo = _T("1000");
m_dInterfaceL = 0.0;//法兰管的法兰厚
m_dInterfaceD = 0.0;//法兰管的法兰外径
m_sLevel = _T("L91A");
m_dPressure = 1.0;
m_bLevelSel = TRUE;
m_sProject = _T("工业");
m_nTrade = WPipe::eCivial;
m_sFEGSInf = _T("");
m_szShtNo = _T("");
m_sUnitNo = _T("X");
m_sTraMtoInfo = _T("");
m_sTraDescr = _T("");
m_nRadioOn = 1;//强制为1查询不到计算
m_nColorIndex = 256;
m_sEndF1 = _T("");
m_sEndF2 = _T("");
m_sGaskets = _T("");
m_nSglorDBL = 1;
m_pDb = NULL;
m_bLoadLast = FALSE;
m_dInsThk = 20.0;
m_nElSel = 0;
UIHistory::readCache(FILE_NAME_INI
, _T("CWPipeDrawConfigDlg2") //新
, _T("%d%d%d%d%d%f%f%f%f%f%f%f%f%f%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%d")
, &m_nDDir //%d
, &m_nConnectType //%d
, &m_nRadioOn //%d
, &m_nSglorDBL //%d
, &m_bFlangNoBom //%d
, &m_dFPLen //%f
, &m_dEl //%f
, &m_dDn //%f
, &m_dOD //%f
, &m_dThk //%f
, &m_dRRatio //%f
, &m_dInterfaceL //%f
, &m_dInterfaceD //%f
, &m_dPressure //%f
, &m_sSerNo //%s
, &m_sZoneNo //%s
, &m_sUnitNo //%s
, &m_sPipeNo //%s
, &m_sCurrSys //%s
, &m_sDescr //%s
, &m_sMaterial //%s
, &m_sMaterialFit //%s
, &m_sParamSetting //%s
, &m_sODSn //%s
, &m_sLevel //%s
, &m_szShtNo //%s
, &m_sTraMtoInfo //%s
, &m_sTraDescr //%s
, &m_sEndF1 //%s
, &m_sEndF2 //%s
, &m_sFEGSInf //%s
, &m_sGaskets //%s
, &m_nElSel
);
// 所有管线标高都以管中心线为基准,所以,在这里还原m_nElSel
// 这样,双击弹出后,保证标高数据和标高基准数据可以匹配
m_nRadioOn = 1;//强制为1查询不到计算
m_nRadSel = 0;
}
CWPipeDrawConfigDlg::~CWPipeDrawConfigDlg()
{
UIHistory::writeCache(FILE_NAME_INI
, _T("CWPipeDrawConfigDlg2") //新
, _T("%d%d%d%d%d%f%f%f%f%f%f%f%f%f%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%d")
, m_nDDir //%d
, m_nConnectType //%d
, m_nRadioOn //%d
, m_nSglorDBL //%d
, m_bFlangNoBom //%d
, m_dFPLen //%f
, m_dEl //%f
, m_dDn //%f
, m_dOD //%f
, m_dThk //%f
, m_dRRatio //%f
, m_dInterfaceL //%f
, m_dInterfaceD //%f
, m_dPressure //%f
, m_sSerNo //%s
, m_sZoneNo //%s
, m_sUnitNo //%s
, m_sPipeNo //%s
, m_sCurrSys //%s
, m_sDescr //%s
, m_sMaterial //%s
, m_sMaterialFit //%s
, m_sParamSetting //%s
, m_sODSn //%s
, m_sLevel //%s
, m_szShtNo //%s
, m_sTraMtoInfo //%s
, m_sTraDescr //%s
, m_sEndF1 //%s
, m_sEndF2 //%s
, m_sFEGSInf //%s
, m_sGaskets //%s
, m_nElSel
);
}
void CWPipeDrawConfigDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PIPELIST, m_wndPipeList);
DDX_Control(pDX, IDC_LIST2, m_wndPressList);
DDX_Control(pDX, IDC_LIST1, m_wndSpecList);
DDX_Control(pDX, IDC_LISTELBOWRAD, m_wndElbowradList);
DDX_LBIndex(pDX, IDC_LISTELBOWRAD, m_nRadSel);
DDX_Radio(pDX, IDC_RADIODN, m_nDDir);
DDX_Radio(pDX, IDC_RADIO1, m_nConnectType);
DDX_Text(pDX, IDC_EDITFEGS, m_sFEGSInf);
DDX_Text(pDX, IDC_EDIT1, m_dFPLen);
DDX_Text(pDX, IDC_EDITEL, m_dEl);
DDX_Radio(pDX, IDC_RADIOE0, m_nElSel);
DDX_Text(pDX, IDC_EDITSERNO, m_sSerNo);
DDX_Text(pDX, IDC_EDITZONE, m_sZoneNo);
DDX_Text(pDX, IDC_EDITUNITNO, m_sUnitNo);
DDX_Text(pDX, IDC_EDITPIPECODE, m_sPipeNo);
DDX_Control(pDX, IDC_COMBOMATERS, m_wndComboMaters);
DDX_Control(pDX, IDC_COMBOMATERSFIT, m_wndComboMatersFit);
DDX_CBString(pDX, IDC_COMBOSYSLAY, m_sCurrSys);
DDX_Text(pDX, IDC_EDITDESCR, m_sDescr);
DDX_CBString(pDX, IDC_COMBOMATERS, m_sMaterial);
DDX_CBString(pDX, IDC_COMBOMATERSFIT, m_sMaterialFit);
DDX_Control(pDX, IDC_COMBOSYSLAY, m_wndComboSys);
DDX_Control(pDX, IDC_EDITEL, m_wndEditEl);
DDX_Control(pDX, IDC_BTPICKPIPE, m_wndBtPickpipe);
DDX_Text(pDX, IDC_EDITSETTING, m_sParamSetting);
DDX_Check(pDX, IDC_CHECKANG, m_bElbowAngleDraw);
DDX_Check(pDX, IDC_CHECKWELDDOT, m_bDrawWeldDot);
DDX_Check(pDX, IDC_CHECK2, m_bFlangNoBom);
}
BEGIN_MESSAGE_MAP(CWPipeDrawConfigDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CWPipeDrawConfigDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CWPipeDrawConfigDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BTADDMETI, &CWPipeDrawConfigDlg::OnBnClickedBtaddmeti)
ON_BN_CLICKED(IDC_BTSYSSET, &CWPipeDrawConfigDlg::OnBnClickedBtsysset)
ON_BN_CLICKED(IDC_BTPICKPIPE, &CWPipeDrawConfigDlg::OnBnClickedBtpickpipe)
ON_BN_CLICKED(IDOK, &CWPipeDrawConfigDlg::OnBnClickedOk)
ON_CONTROL_RANGE(BN_CLICKED, IDC_RADIO1, IDC_RADIO5, OnBnClickedRadioConnectType)
ON_CBN_SELCHANGE(IDC_COMBOMATERS, &CWPipeDrawConfigDlg::OnCbnSelchangeCombomaters)
ON_CBN_SELCHANGE(IDC_COMBOMATERSFIT, &CWPipeDrawConfigDlg::OnCbnSelchangeCombomatersfit)
ON_CBN_SELCHANGE(IDC_COMBOSYSLAY, &CWPipeDrawConfigDlg::OnCbnSelchangeCombosyslay)
ON_BN_CLICKED(IDC_BUTTON3, &CWPipeDrawConfigDlg::OnBnClickedButton3)
END_MESSAGE_MAP()
void CWPipeDrawConfigDlg::SetDbServer(CUIISQLiteServer* pDb)
{
m_pDb = pDb;
}
void CWPipeDrawConfigDlg::SetOnlyByDN(int nDN)
{
m_nOnlyDN = nDN;
m_bOnlyDn = TRUE;
if (nDN < 1)
m_bOnlyDn = FALSE;
m_dDn = m_nOnlyDN;
}
BOOL CWPipeDrawConfigDlg::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);
//EXT
m_wndPipeList.InsertColumn(6, _T("执行标准"), LVCFMT_LEFT, 300+nAdd);
//m_wndPipeList.InsertColumn(7, _T("物料描述"), LVCFMT_LEFT, 0);
//m_wndPipeList.InsertColumn(8, _T("规格型号"), LVCFMT_LEFT, 0);
if (m_bLoadLast) LoadLastData();
InitPipeList(50000, m_sODSn);
InitElbowRadio(m_sODSn);
InitPipeMaterCombox();
InitFittingMaterCombox();
InitPressSpecFromDb();
m_wndEditEl.SetReadOnly(m_bEleReadOnly);
if (m_bOnlyDn)
{
m_wndBtPickpipe.EnableWindow(FALSE);
}
InitSys();
if (m_bEleReadOnly)//锁定标高
{
GetDlgItem(IDC_EDITEL)->EnableWindow(FALSE);
}
CWnd *pWnd(GetDlgItem(IDC_EDIT1));
if (pWnd)
{
//法兰管分段
pWnd->EnableWindow(m_nConnectType == 3 || m_nConnectType == 5);
}
//根据上次材料认定
OnCbnSelchangeCombomaters();
UpdateData(FALSE);
return TRUE;
}
void CWPipeDrawConfigDlg::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() )
{
if (m_nConnectType == 1 || m_nConnectType == 2 || m_nConnectType == 4 )
{
//S系列没有 承插 或 螺纹 卡箍
sODAWhere = _T("([外径系列]='A' or [外径系列]='B')");
}
else
{
sODAWhere = _T("([外径系列]='A' or [外径系列]='B' or [外径系列]='S')");
}
bMODSN = true;
}
else
{
sODAWhere.Format(_T("[外径系列]='%s'"), sODNo);
}
//承插 螺纹 最大值
CStringArray arDNs;
if (m_nConnectType == 1)//承插
{
sSQL.Format(_T("select [公称直径] from [AecElbowSData] where %s order by [公称直径] desc"), sODAWhere);
m_pDb->GetSelData(sSQL, arDNs);
if (!arDNs.IsEmpty())
{
nMaxDN = _ttoi(arDNs.GetAt(0));
}
}
if (m_nConnectType == 2)//螺纹
{
sSQL.Format(_T("select [公称直径] from [AecElbowTData] where %s order by [公称直径] desc"), sODAWhere);
m_pDb->GetSelData(sSQL, arDNs);
if (!arDNs.IsEmpty())
{
nMaxDN = _ttoi(arDNs.GetAt(0));
}
}
CStringArray arRds;
arRds.Add(_BYGB_);
sSQL = _T("select distinct [弯头曲率] from AecElbowData order by [弯头曲率]");
m_pDb->GetSelData(sSQL, arRds);
if (arRds.GetSize() > 0)
{
int nSel = 0;
m_wndElbowradList.ResetContent();
for (int n = 0; n < arRds.GetSize(); n++)
{
m_wndElbowradList.AddString(arRds.GetAt(n));
if (fabs( _ttof(arRds.GetAt(n)) - m_dRRatio) < 1.e-3)
{
nSel = n;
}
}
m_wndElbowradList.SetCurSel(nSel);
}
if (m_nOnlyDN == 0)//不限制DN
{
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);
}
}
else//限制
{
sSQL.Format(_T("select [公称直径],[外径],[壁厚],[重量],[表号],[外径系列],[标准] from AecOD where [公称直径]=%d and %s order by [外径系列],[公称直径],[壁厚] desc"), m_nOnlyDN, sODAWhere);//
}
CUIIValueTable table;
m_pDb->GetSelData(sSQL, table);
if (table.GetTableLogicSize() == 0)
{
//按外径选
int nDN = (m_nOnlyDN == 0) ? nMaxDN : m_nOnlyDN;
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 CWPipeDrawConfigDlg::InitElbowRadio(CString& sODNo)
{
CString sSQL,sODAWhere;
//曲率半径
sSQL = _T("select distinct [曲率半径] from AecElbowradius order by [曲率半径]");
m_wndElbowradList.ResetContent();
CString sRat;
CStringArray arVals;
arVals.Add(_BYGB_);
m_pDb->GetSelData(sSQL, arVals);
int nSel = -1;
for (int i = 0; i < arVals.GetSize(); i++)
{
m_wndElbowradList.InsertString(i, arVals.GetAt(i));
sRat = arVals.GetAt(i);
if (fabs(_ttof(sRat) - m_dRRatio) < 1.e-3 && nSel == -1)
{
nSel = i;
if ( (m_dRRatio -g_minRadio) < 1.e-3)
nSel = 0;
}
}
if (nSel == -1) nSel = 0;
m_wndElbowradList.SetCurSel(nSel);
}
void CWPipeDrawConfigDlg::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);
}
}
}
void CWPipeDrawConfigDlg::InitFittingMaterCombox()
{
CString sSQL,sMat;
CStringArray arVals;
//材质
m_wndComboMatersFit.ResetContent();
arVals.RemoveAll();
sSQL = _T("select [材质] from AecMaterial where [类型]='管件'");
m_pDb->GetSelData(sSQL, arVals);
for (int i = 0; i < arVals.GetSize(); i++)
{
sMat = arVals.GetAt(i);
m_wndComboMatersFit.InsertString(i, sMat);
if (m_sMaterialFit.CompareNoCase(sMat) == 0 ||
(m_sMaterialFit.Find(_T("衬塑")) != -1 && sMat.Find(_T("衬塑")) != -1))
{
m_wndComboMatersFit.SetCurSel(i);
}
}
}
void CWPipeDrawConfigDlg::InitPressSpecFromDb()
{
//获取项目名称
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;
}
xDataMap.GetAt(DOC_PIDPROJECT, m_sProject);
xDataMap.GetAt(DOC_TRADE, m_nTrade);
if (m_nTrade = WPipe::eCivial && m_sProject.IsEmpty())
{
m_sProject = _T("市政");
}
else if (m_sProject.IsEmpty() || m_sProject.CompareNoCase(_T("SH")) == 0)//兼容旧SH
{
m_sProject = _T("工业");
}
CString sSQL;
sSQL.Format(_T("select distinct [等级名称] from AecSpecname where [项目名称]='%s' order by [等级名称]"), m_sProject);
CStringArray arValues;
m_pDb->GetSelData(sSQL, arValues);
m_wndSpecList.ResetContent();
for (int i = 0; i < arValues.GetSize(); i++)
{
m_wndSpecList.InsertString(i, arValues.GetAt(i));
}
int nIndex = m_wndSpecList.FindString(0, m_sLevel);
if (nIndex != -1)
{
m_wndSpecList.SetCurSel(nIndex);
}
else
{
m_wndSpecList.SetCurSel(0);
}
//压力表
sSQL.Format(_T("select [压力] from aecpressure order by [压力]"));
arValues.RemoveAll();
m_pDb->GetSelData(sSQL, arValues);
m_wndPressList.ResetContent();
for (int i = 0; i < arValues.GetSize(); i++)
{
m_wndPressList.InsertString(i, arValues.GetAt(i));
if (_ttof(arValues.GetAt(i)) < 1.1 &&
_ttof(arValues.GetAt(i)) > 0.95)
{
m_wndPressList.SetCurSel(i);
}
}
}
void CWPipeDrawConfigDlg::InitSys()
{
//显示当前图层系统
CString sSQL, sStd(CoreTools::getCurrentPipeSysTblName()), sTemp;
sSQL.Format(_T("select distinct system from %s"), sStd);
CStringArray arSyses;
m_pDb->GetSelData(sSQL, arSyses);
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);
}
bool CWPipeDrawConfigDlg::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 (nPos == 0)
{
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");
m_nDDir = 1;//外径绘制
if (m_nConnectType > 2 || m_nConnectType < 1)
m_nConnectType = 1;//设置为承插
return true;
}
}
else
{
if (m_sMaterialFit.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");
m_nDDir = 1;//外径绘制
m_nRadioOn = 1;//必须按结构长度
if (m_nConnectType > 2 || m_nConnectType < 1)
m_nConnectType = 1;//设置为承插
return true;
}
}
}
return false;
}
BOOL CWPipeDrawConfigDlg::IsGSFMaterial(CString &sODNo)
{
UpdateData();
//目前只能按照材质判断
if (m_sMaterial.Find(_T("衬塑")) != -1 ||
m_sMaterial.Find(_T("HG/T 20538")) != -1)
{
sODNo = _T("GSF");
m_nDDir = 0;//DN
m_nConnectType = 3;//必须法兰
m_bFlangNoBom = 1;
return TRUE;
}
return FALSE;
}
BOOL CWPipeDrawConfigDlg::IsSRPEMaterial(CString &sODNo)
{
UpdateData();
//目前只能按照材质判断
if (m_sMaterial.Find(_T("钢骨架")) != -1 ||
m_sMaterial.Find(_T("CJ/T 123")) != -1)
{
sODNo = _T("SRPE");
m_nDDir = 0;//DN
if (m_nConnectType == 2)
m_nConnectType = 1;//承插
m_bFlangNoBom = 0;
return TRUE;
}
return FALSE;
}
BOOL CWPipeDrawConfigDlg::IsRCPMaterial(CString &sODNo)
{
UpdateData();
//目前只能按照材质判断
if (m_sMaterial.Find(_T("混凝土")) != -1)
{
sODNo = _T("RCP");
m_nDDir = 0;//DN
if (m_nConnectType > 1)
{
m_nConnectType = 0;
}
return TRUE;
}
return FALSE;
}
//添加管道规格
static int getMaxIDFromDB(LPCTSTR pszField, LPCTSTR pszTbl, CUIISQLiteServer *pDb)
{
if (!pszField || !pszTbl || !pDb) return -1;
CString ss(_T("")), v(_T(""));
ss.Format(_T("select max(%s) from %s"), pszField, pszTbl);
if (!pDb->GetSelData(ss, v)) return -1;
return _ttoi(v) + 1;
}
void CWPipeDrawConfigDlg::OnBnClickedButton1()
{
UpdateData();
/*
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);
*/
POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nSel = m_wndPipeList.GetNextSelectedItem(ps);
if (nSel != -1)
{
CGZCLDlg dlg;
dlg.m_sMat = m_sMaterial;
dlg.m_sSCode = m_wndPipeList.GetItemText(nSel,4);
dlg.m_sODSN = m_wndPipeList.GetItemText(nSel,5);
dlg.m_sStd = m_wndPipeList.GetItemText(nSel, 6);
if (IDOK == dlg.DoModal())
{
CString sSQL;
sSQL.Format(_T("insert into AecOD ([公称直径],[外径],[表号],[壁厚],[重量],[外径系列],[标准]) values (%d,%d,'%s',%.1f,%.2f,'%s','%s')"),
dlg.m_nDN, (int)dlg.m_dOD, dlg.m_sSCode, dlg.m_dt, dlg.m_dWe, dlg.m_sODSN, dlg.m_sStd);
if (m_pDb->ExecuteSQL(sSQL))
{
InitPipeList(50000, dlg.m_sODSN);
}
if (m_wndComboMaters.FindString(0,dlg.m_sMat) == -1)
m_wndComboMaters.AddString(dlg.m_sMat);
}
}
}
}
//保温伴热
void CWPipeDrawConfigDlg::OnBnClickedButton2()
{
UpdateData();
int nSel = m_wndSpecList.GetCurSel();
if (nSel != -1)
m_wndSpecList.GetText(nSel, m_sLevel);
CString sText;
nSel = m_wndPressList.GetCurSel();
if (nSel != -1)
{
m_wndPressList.GetText(nSel, sText);
m_dPressure = _ttof(sText);
}
nSel = m_wndComboSys.GetCurSel();
if (nSel != -1)
m_wndComboSys.GetLBText(nSel, m_sCurrSys);
nSel = m_wndElbowradList.GetCurSel();
if (nSel != -1)
{
m_wndElbowradList.GetText(nSel, sText);
m_dRRatio = _ttof(sText);
}
KTInsulateMainDlg dlg;
dlg.SetADOServer(m_pDb);
WPipe::PipeParam param;
GetPipeParam(&param);
dlg.SetPipeParam(&param);
if (IDOK == dlg.DoModal())
{
m_sInsMtr = param.szInsMtr;
m_dInsThk = param.m_dInsThk;
m_nInsAndHead = param.m_nInsAndHead;
m_sInsSpec = param.szInsSpec;
m_sInsMaterial = param.szInsMateral;
m_szInsTag = param.szInsTag;
m_szInsDim = param.szInsDim;
m_sTraMtoInfo, param.szTraMtoInfo;
m_sTraDescr, param.szTraDescr;
FormatParamSettingAndSpec();
}
}
void CWPipeDrawConfigDlg::FormatParamSettingAndSpec()
{
//介质压力
CString sZone, sDN, sPP, sNo, sGrade;
CString sText;
sText.Format(_T("%s"), m_szMedia);
sPP = sText;
m_sParamSetting = sText + _T("-");
//sText.Format(_T("%s"), m_sLevel);
//sGrade = sText;
//m_sParamSetting += sText + _T("-");
sText.Format(_T("%d"), (int)m_dDn);
sDN = sText;
m_sParamSetting += sText + _T("-");
sText.Format(_T("%.1f"), m_dRRatio);
m_sParamSetting += sText + _T("-");
sText.Format(_T("%s"), m_sInsMtr);
sText.TrimRight(_T('-'));
if (!sText.IsEmpty())
{
m_sParamSetting += sText + _T("-");
}
sText.Format(_T("%.1f"), m_dInsThk);
m_sParamSetting += sText;
CString sAdd;
if (_tcslen(m_sInsMtr) > 0) sAdd = _T("保温");
if (_tcslen(m_sTraMtoInfo) > 0) sAdd += _T("伴热");
//管线号= 区号-单元号-顺序号-DN-等级-保温伴热
m_sPipeNo.Format(_T("%s-%s-%s-%s-%s-%s"), m_sZoneNo, m_sUnitNo, m_sSerNo, sDN, sGrade, sAdd);
m_sPipeNo.TrimRight(_T('-'));
UpdateData(FALSE);
}
//添加材料
void CWPipeDrawConfigDlg::OnBnClickedBtaddmeti()
{
CStringArray arPipe, arFit;
if (!PipelineTools::setPipelineMaterial(m_pDb, arPipe, arFit))
{
return;
}
m_wndComboMaters.ResetContent();
for (int i = 0; i < arPipe.GetSize(); i++)
{
m_wndComboMaters.InsertString(i, arPipe.GetAt(i));
if (m_sMaterial.CompareNoCase(arPipe.GetAt(i)) == 0)
m_wndComboMaters.SetCurSel(i);
}
m_wndComboMatersFit.ResetContent();
for (int i = 0; i < arFit.GetSize(); i++)
{
m_wndComboMatersFit.InsertString(i, arFit.GetAt(i));
if (m_sMaterialFit.CompareNoCase(arFit.GetAt(i)) == 0)
m_wndComboMatersFit.SetCurSel(i);
}
}
//分系统
void CWPipeDrawConfigDlg::OnBnClickedBtsysset()
{
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 CWPipeDrawConfigDlg::OnBnClickedBtpickpipe()
{
//切换界面的当前活动
acedGetAcadFrame()->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
acedGetAcadFrame()->SetFocus();
CString strLay(_T(""));
AecDbObjXDataMap xmap;
if (!PipelineTools::getPipelineParam(xmap, strLay))
{
ShowWindow(SW_SHOW);
SetFocus();
acedGetAcadFrame()->EnableWindow(FALSE);
EnableWindow(TRUE);
return;
}
SetsureLaySysByLayer(strLay);
SetFromXDataMap(&xmap);
xmap.GetAt(PIPE_EL, m_dEl);
xmap.GetAt(PIPE_SYS, m_sCurrSys);
PipelineTools::setCurrentLayerSys(m_sCurrSys);
CString sSysTmp;
for (int j = 0; j < m_wndComboSys.GetCount(); j++)
{
m_wndComboSys.GetLBText(j, sSysTmp);
if (m_sCurrSys.CompareNoCase(sSysTmp) == 0)
{
m_wndComboSys.SetCurSel(j);
}
}
m_idCurSys = CoreTools::getLyForPipe(m_sCurrSys);
UpdateData(FALSE);
UpdatePipeList();
OnCbnSelchangeCombomaters();
ShowWindow(SW_SHOW);
SetFocus();
acedGetAcadFrame()->EnableWindow(FALSE);
EnableWindow(TRUE);
}
void CWPipeDrawConfigDlg::UpdatePipeList()
{
CString sDnold, sThick;
sDnold.Format(_T("%d"), (int)(m_dDn + 0.5));
CString sText;
for (int i = 0; i < m_wndPipeList.GetItemCount(); i++)
{
sText = m_wndPipeList.GetItemText(i, 0);
sThick = m_wndPipeList.GetItemText(i, 2);
if (sText.CompareNoCase(sDnold) == 0 && fabs(_ttof(sThick) - m_dThk) < 1.e-6)
{
m_wndPipeList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
m_wndPipeList.EnsureVisible(i, TRUE);
break;
}
}
//曲率半径
CString sRat;
for (i = 0; i < m_wndElbowradList.GetCount(); i++)
{
m_wndElbowradList.GetText(i, sRat);
if (fabs(_ttof(sRat) - m_dRRatio) < 1.e-6)
{
m_wndElbowradList.SetCurSel(i);
break;
}
}
//材质
for (i = 0; i < m_wndComboMaters.GetCount(); i++)
{
m_wndComboMaters.GetLBText(i, sText);
if (m_sMaterial.CompareNoCase(sText) == 0)
{
m_wndComboMaters.SetCurSel(i);
break;
}
}
//材质
for (i = 0; i < m_wndComboMatersFit.GetCount(); i++)
{
m_wndComboMatersFit.GetLBText(i, sText);
if (m_sMaterialFit.CompareNoCase(sText) == 0)
{
m_wndComboMatersFit.SetCurSel(i);
break;
}
}
}
void CWPipeDrawConfigDlg::SetsureLaySysByLayer(LPCTSTR pszLayer)
{
CString sys(_T(""));
if (!PipelineTools::getSysByLayer(m_pDb, pszLayer, sys))
{
acutPrintf(_T("\n查询当前图层系统失败!"));
return;
}
CString sSysTmp;
m_sCurrSys = sys;
for (int j = 0; j < m_wndComboSys.GetCount(); j++)
{
m_wndComboSys.GetLBText(j, sSysTmp);
if (m_sCurrSys.CompareNoCase(sSysTmp) == 0)
{
m_wndComboSys.SetCurSel(j);
return;
}
}
}
void CWPipeDrawConfigDlg::OnBnClickedRadioConnectType(UINT idCtl)
{
UpdateData();
bool bInitList = false;
CString sODNo = _T("");
//塑料管
if (IsPlasticsMat(0, sODNo))
{
if (m_nConnectType < 1 || m_nConnectType > 2)
AfxMessageBox(_T("当前是塑料管,只能选择承插或螺纹连接!"));
InitPipeList(5000, sODNo);
m_nConnectType = 1;
bInitList = true;
}
//衬塑管
if (IsGSFMaterial(sODNo))
{
m_bFlangNoBom = 1;
if (m_nConnectType != 3)
AfxMessageBox(_T("当前是衬塑管,只能选择法兰连接!"));
InitPipeList(5000, sODNo);
m_nConnectType = 3;
bInitList = true;
}
if (IsSRPEMaterial(sODNo))
{
m_bFlangNoBom = 0;
InitPipeList(5000, sODNo);
if (m_nConnectType == 2)//不可为螺纹
m_nConnectType = 1;
bInitList = true;
}
//其他材质
if (!bInitList)
{
sODNo = _T("");
InitPipeList(5000, sODNo);
}
//如果是法兰管,设置垫片(如果没有)
if (m_nConnectType == 3 || m_nConnectType == 5)//法兰
{
SetFEGSInf();
}
UpdateData(FALSE);
}
void CWPipeDrawConfigDlg::SetFEGSInf()
{
//弹出垫片设置
int nSel = m_wndPressList.GetCurSel();
if (nSel == -1)
{
nSel = 0;
}
//if (m_wndSpecList.GetCount() == 0)
// return;
//m_wndSpecList.GetText(nSel, m_sLevel);
nSel = m_wndPressList.GetCurSel();
if (nSel == -1)
{
AfxMessageBox(_T("请选择项目设计压力!"));
return;
}
CString sText,sLevel = _T("");//m_sLevel
m_wndPressList.GetText(nSel, sText);
m_dPressure = _ttof(sText);
CFLEndFGsDlg flEdGsDlg;
flEdGsDlg.SetProAndLevel(m_sProject, sLevel);
flEdGsDlg.SetPrress(m_dPressure);
flEdGsDlg.SetDN(m_dDn);
flEdGsDlg.SetTrade(m_nTrade);
if (IDOK == flEdGsDlg.DoModal())
{
m_sGaskets = _T("");
m_sEndF1 = _T("");
m_sEndF2 = _T("");
flEdGsDlg.GetFLngEndFace(m_sEndF1, m_sEndF2);
flEdGsDlg.GetGasketInf(m_sGaskets);
m_sFEGSInf.Format(_T("法兰端面: %s:%s 垫片:%s"), m_sEndF1, m_sEndF2, m_sGaskets);
UpdateData(FALSE);
}
CWnd *pWnd(GetDlgItem(IDC_EDIT1));
if (pWnd)
pWnd->EnableWindow(TRUE);
}
//管道材质
void CWPipeDrawConfigDlg::OnCbnSelchangeCombomaters()
{
UpdateData();
m_sMaterialFit = m_sMaterial;
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))
{
m_nDDir = 1;//外径绘制
m_nRadSel = 0;
UpdateData(FALSE);
//塑料管承插或螺纹
if (m_nConnectType == 0 || m_nConnectType > 2)
m_nConnectType = 1;
InitPipeList(50000, sODNo);
if (IsGSFMaterial(sODNo))
{
m_bFlangNoBom = 1;
m_nRadSel = 0;
//法兰连接
if (m_nConnectType != 3)
{
m_nConnectType = 3;
SetFEGSInf();
UpdateData(FALSE);
}
}
}
else if (IsGSFMaterial(sODNo))//衬塑
{
InitPipeList(50000, sODNo);
m_nRadSel = 0;
//法兰连接
if (m_nConnectType != 3 || m_sGaskets.IsEmpty())
{
m_nConnectType = 3;
m_bFlangNoBom = 1;
SetFEGSInf();
UpdateData(FALSE);
}
}
else if (IsRCPMaterial(sODNo))//水泥管
{
InitPipeList(50000, sODNo);
//法兰连接
//m_nRadioOn = 1;//必须按结构长度
if (m_nConnectType > 1)
m_nConnectType = 0;
}
else if (IsSRPEMaterial(sODNo))
{
InitPipeList(50000, sODNo);
//法兰连接
m_nConnectType = 0;
}
else
{
sODNo = _T("");
InitPipeList(50000,sODNo);
}
UpdateData(FALSE);
}
//管件材质
void CWPipeDrawConfigDlg::OnCbnSelchangeCombomatersfit()
{
UpdateData();
CString sODNo = m_sODSn;
if (IsPlasticsMat(0, sODNo))
{
if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0)
{
m_sMaterialFit = m_sMaterial;
m_nDDir = 1;//外径绘制
}
}
else if(IsGSFMaterial(sODNo))
{
if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0)
{
m_sMaterialFit = m_sMaterial;
}
}
else if (IsRCPMaterial(sODNo))//水泥管
{
if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0)
{
m_sMaterialFit = m_sMaterial;
}
}
else if (IsSRPEMaterial(sODNo))
{
if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0)
{
m_sMaterialFit = m_sMaterial;
}
}
UpdateData(FALSE);
}
//系统
void CWPipeDrawConfigDlg::OnCbnSelchangeCombosyslay()
{
UpdateData();
FormatParamSettingAndSpec();
UpdateData(FALSE);
}
BOOL CWPipeDrawConfigDlg::CreateSysAllLayer(LPCTSTR pszCurrSys)
{
CoreTools::getLyByPipeSys(pszCurrSys, true);
CoreTools::getLyByPipeSys(pszCurrSys, false);
CoreTools::getLyForPipe(pszCurrSys);
return TRUE;
}
BOOL CWPipeDrawConfigDlg::IsTDnValid(double dDn, LPCTSTR pszODNo, int& nMaxDN)
{
CString sSQL;
sSQL.Format(_T("select [公称直径] from [AecElbowTData] where [外径系列]='%s' order by [公称直径] desc limit 1"), pszODNo);
CStringArray arVals;
m_pDb->GetSelData(sSQL, arVals);
if (!arVals.IsEmpty())
{
nMaxDN = _ttoi(arVals.GetAt(0));
int nDN = (int)(dDn + 0.5);
if (nDN <= nMaxDN)
return TRUE;
}
return FALSE;
}
BOOL CWPipeDrawConfigDlg::QueryFlangOnPipe()
{
double dWD, dWh, dThk, dN;
if (TDbPipeSupport::QueryFlangData(m_pDb
, m_dDn
, m_dPressure
, dWD
, dWh
, dThk
, dN ))//不考虑等级和项目
{
m_dInterfaceL = dWh; //法兰管的法兰厚
m_dInterfaceD = dWD; //法兰管的法兰外径
return TRUE;
}
CString sTip;
sTip.Format(_T("没有查询到公称直径 %d 压力 %.1f 的法兰参数"),(int)(m_dDn+0.5),m_dPressure);
AfxMessageBox(sTip);
return FALSE;
}
void CWPipeDrawConfigDlg::OnBnClickedOk()
{
UpdateData();
m_nRadioOn = 0;
//创建系统图层
int nCursel = m_wndComboSys.GetCurSel();
if (nCursel == -1)
{
return;
}
//确认创建图层
m_wndComboSys.GetLBText(nCursel, m_sCurrSys);
CreateSysAllLayer(m_sCurrSys);
PipelineTools::setCurrentLayerSys(m_sCurrSys);
m_idCurSys = CoreTools::getLyForPipe(m_sCurrSys);
//获取分系统信息
//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_nColorIndex = _ttoi(arVals.GetAt(2));
}
//管子规格
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;
}
//螺纹验证
int nMaxDN = 0;
if (m_nConnectType == 2 && !IsTDnValid(m_dDn, m_sODSn, nMaxDN))
{
CString sTip;
sTip.Format(_T("数据库中此材质最大螺纹管线公称直径 %d !"), nMaxDN);
AfxMessageBox(sTip);
return;
}
int nSel = m_wndElbowradList.GetCurSel();
if (nSel == -1 /* && m_nRadioOn == 0*/)
{
AfxMessageBox(_T("请选择管子弯头曲率半径!"));
return;
}
//等级,不主要控
m_sLevel = _T("");
/*nSel = m_wndSpecList.GetCurSel();
if (nSel != -1)
{
m_wndSpecList.GetText(nSel, m_sLevel);
}*/
//压力
nSel = m_wndPressList.GetCurSel();
if (nSel == -1)
{
AfxMessageBox(_T("请选择项目设计压力!"));
return;
}
CString sText,sSQL;
m_wndPressList.GetText(nSel, sText);
m_dPressure = _ttof(sText);
//曲率
nSel = m_wndElbowradList.GetCurSel();
if (nSel != -1)
{
m_wndElbowradList.GetText(nSel, sText);
if (sText.CompareNoCase(_BYGB_) == 0)
{
m_nRadioOn = TRUE;//按国标结构长度
m_dRRatio = g_minRadio;//最小
//根据ODSN查询数据库 默认曲率
sSQL.Format(_T("select distinct [弯头曲率] from [AecElbowData] where [外径系列]='%s' order by [弯头曲率]"), m_sODSn);
CStringArray arRad;
m_pDb->GetSelData(sSQL, arRad);
if (arRad.GetSize() > 0)
{
m_dRRatio = _ttof(arRad.GetAt(0));
}
}
else
{
m_dRRatio = _ttof(sText);
}
}
//管材
CString sODNo = m_sODSn;
if (IsPlasticsMat(0, sODNo))
{
//确认
if (m_sMaterialFit.CompareNoCase(m_sMaterial) != 0)
{
AfxMessageBox(_T("塑料管 管件 管道 材质必须相同!"));
return;
}
if (m_nDDir == 0 )
{
m_nDDir = 1;
}
}
//衬塑
if (IsGSFMaterial(sODNo))
{
if (m_nConnectType == 3 || m_nConnectType == 5)
{
if (m_sGaskets.IsEmpty())
{
AfxMessageBox(_T("垫片信息缺少,衬塑必须选择法兰或沟槽连接的垫片信息!"));
return;
}
}
else
{
AfxMessageBox(_T("衬塑必须选择法兰或沟槽连接!"));
return;
}
}
if (IsRCPMaterial(sODNo))//水泥管
{
if (m_nConnectType > 1)
m_nConnectType = 0;
}
if (IsSRPEMaterial(sODNo))
{
if (m_nConnectType == 2)
m_nConnectType = 1;
}
//标高参考
switch (m_nElSel)
{
case 0://中心线
{
break;
}
case 1: //顶参考基准
{
m_dEl -= m_dOD / 2.0;
break;
}
case 2://底参考基准
{
m_dEl += m_dOD / 2.0;
break;
}
default:
break;
}
// 所有管线标高都以管中心线为基准,所以,在这里还原m_nElSel
// 这样,双击弹出后,保证标高数据和标高基准数据可以匹配
m_nElSel = 0;
//法兰管
if (m_nConnectType == 3 ||
m_nConnectType == 5)//法兰管
{
double dMinT = 100;
struct resbuf rb;
acedGetVar(_T("INSUNITS"), &rb);
if (rb.resval.rint == AcDb::kUnitsMeters)
{
dMinT /= 1000.0;
}
if ((m_dFPLen - dMinT) < 1.e-6)
{
AfxMessageBox(_T(" 法兰管的标准分段长度不合理!"));
return;
}
//查询法兰管的法兰数据
if (!QueryFlangOnPipe())
{
return;
}
}
SaveCurrentData();
EndDialog(IDOK);
}
void CWPipeDrawConfigDlg::SetFromXDataMap(AecDbObjXDataMap* pXDataMap)
{
if (pXDataMap != NULL)
{
pXDataMap->GetAt(PIPE_DRAWDIR, m_nDDir); //绘制类型
pXDataMap->GetAt(KEY_2DSTYLE, m_nSglorDBL); //单线 双线
//双线 单线1 双线 2
if (m_nSglorDBL == 2)
m_nSglorDBL = 0;
else
m_nSglorDBL = 1;
pXDataMap->GetAt(PIPE_RATIO, m_dRRatio);
pXDataMap->GetAt(KEY_RadRatio, m_nRadioOn);
m_nConnectType = 0;
//pXDataMap->GetAt(KEY_SINGLE,m_nSglorDBL);
pXDataMap->GetAt(PIPE_CONNECT, m_nConnectType);
pXDataMap->GetAt(PIPE_DN, m_dDn);
pXDataMap->GetAt(PIPE_OD, m_dOD);
pXDataMap->GetAt(PIPE_THICK, m_dThk);
pXDataMap->GetAt(PIPE_MATERIAL, m_sMaterial);
pXDataMap->GetAt(PIPE_MATERIALFT, m_sMaterialFit);
pXDataMap->GetAt(PIPE_ELBOWFLG, m_bElbowAngleDraw);
pXDataMap->GetAt(PIPE_BWELDDOT, m_bDrawWeldDot);
pXDataMap->GetAt(DOC_PLOTWIDTH, m_dSingleW);
pXDataMap->GetAt(DOC_WELDDIA, m_dWeldDir);
pXDataMap->GetAt(PIPE_ZONE, m_sZoneNo);
pXDataMap->GetAt(PIPE_INSTHICK, m_dInsThk);
pXDataMap->GetAt(PIPE_NO, m_sPipeNo);
pXDataMap->GetAt(KEY_NO, m_sSerNo);
pXDataMap->GetAt(DOC_INSMATER, m_sInsMtr);
pXDataMap->GetAt(PIPE_DESCR, m_sDescr);
pXDataMap->GetAt(PIPE_LEVEL, m_sLevel);
pXDataMap->GetAt(PID_PIPE_DPRESS, m_dPressure);
int ap;
pXDataMap->GetAt(PIPE_EAPP, ap);
m_app = (WPipe::EApp)ap;
pXDataMap->GetAt(PIPE_ODSN, m_sODSn);
CString sEndFs;
pXDataMap->GetAt(PIPE_FLANGF, sEndFs);
int nLen = sEndFs.GetLength();
if (nLen > 0)
{
m_sEndF1 = sEndFs.Mid(0, nLen / 2);
m_sEndF2 = sEndFs.Mid(nLen / 2 - 1, nLen / 2);
}
pXDataMap->GetAt(PIPE_GASKET, m_sGaskets);
pXDataMap->GetAt(PIPE_FLANGNOBOM, m_bFlangNoBom);
WPipe::PipeParam param;
memset(&param, 0, sizeof(WPipe::PipeParam));
XDataMapToPipeParam(pXDataMap, &param);
SetShowParam(&param);
}
}
void CWPipeDrawConfigDlg::GetPipeParam(WPipe::PipeParam* pParam) const
{
switch (m_nDDir)
{
case 0:
{
pParam->m_dD = m_dDn;
pParam->m_eD = WPipe::eDN;
break;
}
case 1:
{
pParam->m_dD = m_dOD;
pParam->m_eD = WPipe::eOD;
break;
}
case 2:
{
pParam->m_dD = m_dOD - 2.0 * m_dThk;
pParam->m_eD = WPipe::eID;
break;
}
default:
break;
}
pParam->m_dDN = m_dDn;
pParam->m_dOD = m_dOD;
pParam->m_dThick = m_dThk;
pParam->m_dEl = m_dEl;
pParam->m_dRRatio = m_dRRatio;
pParam->m_nRadioOn = m_nRadioOn; //m_nRadioOn = 1;//强制为1查询不到计算
pParam->nPIPCmd = 0;
pParam->m_eRed = WPipe::eCen;
pParam->m_vtECCen.set(0, 0, 0);
pParam->m_eElBase = WPipe::kCen;
pParam->m_dInsThk = m_dInsThk;
pParam->m_nConnectType = m_nConnectType;//连接方式
pParam->m_nPipeColor = m_nColorIndex;
double dFPLen = m_dFPLen;
//衬塑
CString sODNo = m_sODSn;
if (m_sMaterial.Find(_T("衬塑")) != -1 ||
m_sMaterial.Find(_T("HG/T 20538")) != -1)
{
CStringArray arGastInfs;
CoreTools::SplitStrintToArray(m_sGaskets, arGastInfs, _T('/'));
if (arGastInfs.GetSize() >= 3)
{
double dUnits = 1.0;//默认毫米
if (CoreTools::IsMetersUnit())
dUnits *= .001;
dFPLen += _ttof(arGastInfs.GetAt(2)) * dUnits;
}
}
if (m_nConnectType == 3 || m_nConnectType == 5)
{
pParam->m_dInterfaceL = m_dInterfaceL;
pParam->m_dInterfaceD = m_dInterfaceD;
pParam->m_dInterfaceL3 = dFPLen;
}
pParam->m_app = m_app;
pParam->m_dPress = m_dPressure;
_tcscpy(pParam->szPipeno, m_sPipeNo);
_tcscpy(pParam->szMertial, m_sMaterial);
_tcscpy(pParam->szMertialFit, m_sMaterialFit);
_tcscpy(pParam->szZoneNo, m_sZoneNo);
_tcscpy(pParam->szUnitNo, m_sUnitNo);
_tcscpy(pParam->szNo, m_sSerNo);
_tcscpy(pParam->szDescr, m_sDescr);
_tcscpy(pParam->szSys, m_sCurrSys);
_tcscpy(pParam->szLevel, m_sLevel);
//
CString sEndF = m_sEndF1 + m_sEndF2;
_tcscpy(pParam->m_szEndF, sEndF);
_tcscpy(pParam->m_szGastInf, m_sGaskets);
pParam->m_nInsAndHead = m_nInsAndHead;
pParam->m_dInsThk = m_dInsThk;
_tcscpy(pParam->szInsSpec, m_sInsSpec);
_tcscpy(pParam->szInsMtr, m_sInsMtr);
_tcscpy(pParam->szInsMateral, m_sInsMaterial);
_tcscpy(pParam->szInsTag, m_szInsTag);
_tcscpy(pParam->szInsDim, m_szInsDim);
_tcscpy(pParam->szMedia, m_szMedia);
_tcscpy(pParam->szDescr, m_sDescr);
_tcscpy(pParam->szTraMtoInfo, m_sTraMtoInfo);
_tcscpy(pParam->szTraDescr, m_sTraDescr);
CString sLineNo;
sLineNo.Format(_T("%s-%s"), pParam->szMedia, pParam->szNo);
_tcscpy(pParam->szLineNo, sLineNo);
_tcscpy(pParam->szODSn, m_sODSn);
_tcscpy(pParam->szShtNo, m_szShtNo);
_tcscpy(pParam->szStdNo, m_sStd);
pParam->m_bFlangNoBom = m_bFlangNoBom;
//从数据库
//获取项目名称
CString sProject(CoreTools::GetCurrentProject());
/*
[项目名称] CHAR(255),
[等级名称] CHAR(250),
[类别] CHAR(250),
[类型] CHAR(250),
[公称直径] INTEGER,
[材质] CHAR(50),
[表号] CHAR(250),
[标准号] CHAR(250),
[外径] FLOAT,
[壁厚] FLOAT,
[外径系列] CHAR(255),
[描述] CHAR(255));
*/
//如果非市政
CString sSQL;
if (m_nTrade != WPipe::eCivial)
{
sSQL.Format(_T("select [项目名称],[等级名称],[类别],[类型],[公称直径],[材质],[表号],[标准号],[外径],[壁厚],[外径系列],[描述] from AecSpecPipe where [公称直径]=%d")
_T(" and [等级名称]='%s' and [项目名称]='%s'"),
(int)pParam->m_dDN, pParam->szLevel, sProject);
CStringArray arValues;
m_pDb->GetSelData(sSQL, arValues);
CString sText, sTemp;
if (arValues.GetSize() >= 12)
{
for (int i = 1; i < arValues.GetSize() - 1; i++)
{
sTemp = arValues.GetAt(i);
if (i == 1)
{
sText = sTemp;
}
else
{
sText += _T("^") + sTemp;
}
}
pParam->m_dOD = _ttof(arValues.GetAt(8));
_tcscpy(pParam->szMtoInfo, sText);
//最后一个是描述,
_tcscpy(pParam->szDescr, arValues.GetAt(arValues.GetSize() - 1));
//壁厚 外径系列 描述
double dThk = _ttof(arValues.GetAt(arValues.GetSize() - 3));
if (dThk > 1.e-2)
pParam->m_dThick = dThk;
}
}
//英制的记录
/*CString sInchDN = _T("");
sSQL.Format(_T("select [英制] from KTDn where [公制]=%d"), (int)(pParam->m_dDN+0.5) );
m_pDb->GetSelData(sSQL, sInchDN);
if (!sInchDN.IsEmpty())
_tcscpy(pParam->szInchDN, sInchDN);
*/
//如果是米单位
PipeParamConvert2UnitMeters(pParam);
}
void CWPipeDrawConfigDlg::SetShowParam(WPipe::PipeParam* pParam)
{
if (pParam != NULL)
{
//转换为毫米单位
WPipe::PipeParam param;
memset(&param, 0, sizeof(WPipe::PipeParam));
memcpy(&param, pParam, sizeof(WPipe::PipeParam));
PipeParamConvert2UnitMmeters(&param);
m_nOnlyDN = (int)(param.m_dDN + 0.5);
switch (param.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;
}
m_dDn = param.m_dDN;
m_dOD = param.m_dOD;
m_dThk = param.m_dThick;
m_dEl = param.m_dEl;
m_nElSel = 0;//
// 所有管线标高都以管中心线为基准,所以,在这里还原m_nElSel
// 这样,双击弹出后,保证标高数据和标高基准数据可以匹配
m_dRRatio = param.m_dRRatio;
m_nRadioOn = param.m_nRadioOn;
m_dInsThk = param.m_dInsThk;
m_nConnectType = param.m_nConnectType;
m_nColorIndex = param.m_nPipeColor;
m_bFlangNoBom = param.m_bFlangNoBom;
if (m_nConnectType == 3 || m_nConnectType == 5)
{
m_dInterfaceL = param.m_dInterfaceL;
m_dInterfaceD = param.m_dInterfaceD;
m_dFPLen = param.m_dInterfaceL3;
}
m_app = param.m_app;
m_sPipeNo = param.szPipeno;
m_sSerNo = param.szNo;
m_sMaterial = param.szMertial;
m_sMaterialFit = param.szMertialFit;
m_sZoneNo = param.szZoneNo;
m_sUnitNo = param.szUnitNo;
m_sInsMtr = param.szInsMtr;
m_sDescr = param.szDescr;
m_sCurrSys = param.szSys;
m_sLevel = param.szLevel;
m_dPressure = param.m_dPress;
m_sEndF1 = param.m_szEndF;
m_sEndF2 = m_sEndF1;
//端面 防止双击修改产生的重复叠加
if (m_pDb != NULL)
{
CStringArray arVals;
CString sSQL = _T("select distinct [端面型式] from AecFace");
m_pDb->GetSelData(sSQL, arVals);
CString sEF;
for(int ii = 0;ii < arVals.GetSize();ii++)
{
sEF = arVals.GetAt(ii);
if (m_sEndF1.Find(sEF) != -1)
{
m_sEndF1 = sEF;
m_sEndF2 = m_sEndF1;
break;
}
}
}
m_sGaskets = param.m_szGastInf;
m_sInsMtr = param.szInsMtr;
m_dInsThk = param.m_dInsThk;
m_nInsAndHead = param.m_nInsAndHead;
m_sInsSpec = param.szInsSpec;
m_sInsMaterial = param.szInsMateral;
m_szInsTag = param.szInsTag;
m_szInsDim = param.szInsDim;
m_szMedia = param.szMedia;
m_sDescr = param.szDescr;
m_sODSn = param.szODSn;
//IsSRPEMaterial(m_sODSn);//Rsure
m_sStd = param.szStdNo;
}
}
void CWPipeDrawConfigDlg::LoadLastData()
{
if (s_pwndLastData != NULL)
{
m_nDDir = s_pwndLastData->m_nDDir;
m_nRadioOn = s_pwndLastData->m_nRadioOn;
m_sFEGSInf = s_pwndLastData->m_sFEGSInf;
m_dFPLen = s_pwndLastData->m_dFPLen;
m_dEl = s_pwndLastData->m_dEl;
m_nElSel = s_pwndLastData->m_nElSel;
m_sSerNo = s_pwndLastData->m_sSerNo;
m_sZoneNo = s_pwndLastData->m_sZoneNo;
m_sUnitNo = s_pwndLastData->m_sUnitNo;
m_sPipeNo = s_pwndLastData->m_sPipeNo;
m_sDescr = s_pwndLastData->m_sDescr;
m_sMaterial = s_pwndLastData->m_sMaterial;
m_sMaterialFit = s_pwndLastData->m_sMaterialFit;
m_sODSn = s_pwndLastData->m_sODSn;
m_dDn = s_pwndLastData->m_dDn;
m_dOD = s_pwndLastData->m_dOD;
m_dThk = s_pwndLastData->m_dThk;
m_dRRatio = s_pwndLastData->m_dRRatio;
m_sProject = s_pwndLastData->m_sProject;
m_nTrade = s_pwndLastData->m_nTrade;
m_sLevel = s_pwndLastData->m_sLevel;
m_dPressure = s_pwndLastData->m_dPressure;
m_dInterfaceL = s_pwndLastData->m_dInterfaceL;
m_dInterfaceD = s_pwndLastData->m_dInterfaceD;
m_bLevelSel = s_pwndLastData->m_bLevelSel;
m_szShtNo = s_pwndLastData->m_szShtNo;
m_sTraMtoInfo = s_pwndLastData->m_sTraMtoInfo;
m_sTraDescr = s_pwndLastData->m_sTraDescr;
m_sParamSetting = s_pwndLastData->m_sParamSetting;
m_sEndF1 = s_pwndLastData->m_sEndF1;
m_sEndF2 = s_pwndLastData->m_sEndF2;
m_sGaskets = s_pwndLastData->m_sGaskets;
m_nColorIndex = s_pwndLastData->m_nColorIndex;
m_nSglorDBL = s_pwndLastData->m_nSglorDBL;
m_bElbowAngleDraw = s_pwndLastData->m_bElbowAngleDraw;
m_bDrawWeldDot = s_pwndLastData->m_bDrawWeldDot;
m_dSingleW = s_pwndLastData->m_dSingleW;
m_dWeldDir = s_pwndLastData->m_dWeldDir;
m_sInsMtr = s_pwndLastData->m_sInsMtr;
m_dInsThk = s_pwndLastData->m_dInsThk;
m_nInsAndHead = s_pwndLastData->m_nInsAndHead;
m_sInsSpec = s_pwndLastData->m_sInsSpec;
m_szInsTag = s_pwndLastData->m_szInsTag;
m_sInsMaterial = s_pwndLastData->m_sInsMaterial;
m_szInsDim = s_pwndLastData->m_szInsDim;
m_szMedia = s_pwndLastData->m_szMedia;
m_idCurSys = s_pwndLastData->m_idCurSys;
}
}
void CWPipeDrawConfigDlg::SaveCurrentData()
{
if (s_pwndLastData == NULL)
{
s_pwndLastData = new CWPipeDrawConfigDlg;
}
s_pwndLastData->m_nDDir = m_nDDir;
s_pwndLastData->m_nRadioOn = m_nRadioOn;
s_pwndLastData->m_sFEGSInf = m_sFEGSInf;
s_pwndLastData->m_dFPLen = m_dFPLen;
s_pwndLastData->m_dEl = m_dEl;
s_pwndLastData->m_nElSel = m_nElSel;
s_pwndLastData->m_sSerNo = m_sSerNo;
s_pwndLastData->m_sZoneNo = m_sZoneNo;
s_pwndLastData->m_sUnitNo = m_sUnitNo;
s_pwndLastData->m_sPipeNo = m_sPipeNo;
s_pwndLastData->m_sDescr = m_sDescr;
s_pwndLastData->m_sMaterial = m_sMaterial;
s_pwndLastData->m_sMaterialFit = m_sMaterialFit;
s_pwndLastData->m_sODSn = m_sODSn;
s_pwndLastData->m_dDn = m_dDn;
s_pwndLastData->m_dOD = m_dOD;
s_pwndLastData->m_dThk = m_dThk;
s_pwndLastData->m_dRRatio = m_dRRatio;
s_pwndLastData->m_sProject = m_sProject;
s_pwndLastData->m_nTrade = m_nTrade;
s_pwndLastData->m_sLevel = m_sLevel;
s_pwndLastData->m_dPressure = m_dPressure;
s_pwndLastData->m_dInterfaceL = m_dInterfaceL;
s_pwndLastData->m_dInterfaceD = m_dInterfaceD;
s_pwndLastData->m_bLevelSel = m_bLevelSel;
s_pwndLastData->m_szShtNo = m_szShtNo;
s_pwndLastData->m_sTraMtoInfo = m_sTraMtoInfo;
s_pwndLastData->m_sTraDescr = m_sTraDescr;
s_pwndLastData->m_sParamSetting = m_sParamSetting;
s_pwndLastData->m_sEndF1 = m_sEndF1;
s_pwndLastData->m_sEndF2 = m_sEndF2;
s_pwndLastData->m_sGaskets = m_sGaskets;
s_pwndLastData->m_nColorIndex = m_nColorIndex;
s_pwndLastData->m_nSglorDBL = m_nSglorDBL;
s_pwndLastData->m_bElbowAngleDraw = m_bElbowAngleDraw;
s_pwndLastData->m_bDrawWeldDot = m_bDrawWeldDot;
s_pwndLastData->m_dSingleW = m_dSingleW;
s_pwndLastData->m_dWeldDir = m_dWeldDir;
s_pwndLastData->m_sInsMtr = m_sInsMtr;
s_pwndLastData->m_dInsThk = m_dInsThk;
s_pwndLastData->m_nInsAndHead = m_nInsAndHead;
s_pwndLastData->m_sInsSpec = m_sInsSpec;
s_pwndLastData->m_szInsTag = m_szInsTag;
s_pwndLastData->m_sInsMaterial = m_sInsMaterial;
s_pwndLastData->m_szInsDim = m_szInsDim;
s_pwndLastData->m_szMedia = m_szMedia;
s_pwndLastData->m_idCurSys = m_idCurSys;
}
void CWPipeDrawConfigDlg::pipeSysSetting()
{
CString dbPath = FilePath::GetSysDir();
dbPath += _T("\\Plumbing.db");
CUIISQLiteServer ADOServer;
if (!ADOServer.InitADOServer(dbPath))
{
AfxMessageBox(_T("数据库驱动加载数据库Plumbing.db失败!"));
return;
}
CStringArray arSyses;
PipelineTools::setLayerSys(&ADOServer, arSyses);
}
//介质
void CWPipeDrawConfigDlg::OnBnClickedButton3()
{
UpdateData();
//int nSel = m_wndSpecList.GetCurSel();
//if (nSel != -1)
// m_wndSpecList.GetText(nSel, m_sLevel);
CString sText;
int nSel = m_wndPressList.GetCurSel();
if (nSel != -1)
{
m_wndPressList.GetText(nSel, sText);
m_dPressure = _ttof(sText);
}
nSel = m_wndComboSys.GetCurSel();
if (nSel != -1)
m_wndComboSys.GetLBText(nSel, m_sCurrSys);
nSel = m_wndElbowradList.GetCurSel();
if (nSel != -1)
{
m_wndElbowradList.GetText(nSel, sText);
m_dRRatio = _ttof(sText);
}
KTMediumDlg dlg;
dlg.SetADOServer(m_pDb);
WPipe::PipeParam param;
GetPipeParam(&param);
dlg.SetPipeParam(&param);
if (IDOK == dlg.DoModal())
{
m_szMedia = param.szMedia;
m_sLevel = param.szLevel;
m_sDescr = param.szDescr;
/*
int nIndex = m_wndSpecList.FindString(0, m_sLevel);
if (nIndex != -1)
{
m_wndSpecList.SetCurSel(nIndex);
}*/
FormatParamSettingAndSpec();
UpdateData(FALSE);
}
}