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

391 lines
9.3 KiB
C++

#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);
}
}