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

656 lines
14 KiB
C++

#include "stdafx.h"
#include "NozzDlg.h"
#include "aecPipeSupport.h"
//接口尺寸表 DN D N C //HG20592-97
// 公称尺寸,法兰大盘外径,法兰颈直径,厚度
//http://www.wanuo163.com/products/detail/808.html
//上海瓦诺阀门有限公司
//DN
int g_nNozzY[] = { 6,8,10,15,20
,25,32,40,50,65
,80,100,125,150,200
,250,300,350,400,450
,500,600
,700,800,900,1000,1200
,1400,1600,1800,2000
,2200,2400,2600,2800,3000
,0 };
IMPLEMENT_DYNAMIC(CNozzDlg, CDialog)
CNozzDlg::CNozzDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNozzDlg::IDD, pParent)
, m_dDn(0)
, m_dYH(0)
, m_dFL(100)
, m_dFH(200)
, m_dFW(100)
, m_dYMinh(0)
, m_dO(0)
, m_dT(0)
, m_nCurSel(0)
, m_bRadio(FALSE)
, m_bNozzCmd(FALSE)
, m_bTwoFlang(FALSE)
, m_bHVACCir(FALSE)
, m_bTwoFlang1(FALSE)
, m_pData(NULL)
, m_clr(256)
{
memset(&m_xNozzData,0,sizeof(AecEqui::XNozz));
GET_CACHE(CNozzDlg
, %f%f%f%f%f%f%f%f%d%d%d%d%d%d%d
, &m_dDn
, &m_dYH
, &m_dFL
, &m_dFH
, &m_dFW
, &m_dYMinh
, &m_dO
, &m_dT
, &m_nCurSel
, &m_bRadio
, &m_bNozzCmd
, &m_bTwoFlang
, &m_bHVACCir
, &m_bTwoFlang1
, &m_clr);
}
CNozzDlg::~CNozzDlg()
{
}
void CNozzDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Radio(pDX, IDC_RADIOY, m_bRadio);
DDX_Control(pDX, IDC_COMBOINF, m_wndDnCombo);
DDX_Control(pDX, IDC_EDITH, m_wndEditYH);
DDX_Text(pDX, IDC_EDITH, m_dYH);
DDX_Control(pDX, IDC_EDITFL, m_wndEditFL);
DDX_Text(pDX, IDC_EDITFL, m_dFL);
DDX_Control(pDX, IDC_EDITFH, m_wndEditFH);
DDX_Text(pDX, IDC_EDITFH, m_dFH);
DDX_Control(pDX, IDC_EDITFW, m_wndEditFW);
DDX_Text(pDX, IDC_EDITFW, m_dFW);
DDX_Text(pDX, IDC_EDITMINH, m_dYMinh);
DDX_Control(pDX, IDC_EDITMINH, m_wndEditMinH);
DDX_CBIndex(pDX, IDC_COMBOINF, m_nCurSel);
DDX_Radio(pDX, IDC_RADIOW, m_bNozzCmd);
DDX_Check(pDX, IDC_CHECKHVACCIR, m_bHVACCir);
DDX_Text(pDX, IDC_EDITFO, m_dO);
DDX_Text(pDX, IDC_EDITFT, m_dT);
DDX_Control(pDX, IDC_EDITFO, m_wndEditFO);
DDX_Radio(pDX, IDC_RADIOFLANG, m_bTwoFlang);
DDX_Control(pDX, IDC_COMBOPRE, m_wndComboPre);
}
BEGIN_MESSAGE_MAP(CNozzDlg, CDialog)
ON_BN_CLICKED(IDOK, &CNozzDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_RADIOY, &CNozzDlg::OnBnClickedRadioy)
ON_BN_CLICKED(IDC_RADIOF, &CNozzDlg::OnBnClickedRadiof)
ON_CBN_SELCHANGE(IDC_COMBOINF, &CNozzDlg::OnCbnSelchangeComboinf)
ON_BN_CLICKED(IDC_CHECKHVACCIR, &CNozzDlg::OnBnClickedCheckhvaccir)
ON_BN_CLICKED(IDCANCEL, &CNozzDlg::OnBnClickedCancel)
ON_BN_CLICKED(IDC_RADIOH, &CNozzDlg::OnBnClickedRadioh)
ON_CBN_SELCHANGE(IDC_COMBOPRE, &CNozzDlg::OnCbnSelchangeCombopre)
ON_BN_CLICKED(IDC_STATIC_COLOR, OnStaticColor)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_RADIOE, &CNozzDlg::OnBnClickedRadioe)
ON_BN_CLICKED(IDC_RADIO4, &CNozzDlg::OnBnClickedRadio4)
ON_BN_CLICKED(IDC_RADIO24, &CNozzDlg::OnBnClickedRadio24)
ON_BN_CLICKED(IDC_RADIO25, &CNozzDlg::OnBnClickedRadio25)
ON_BN_CLICKED(IDC_RADIO26, &CNozzDlg::OnBnClickedRadio26)
END_MESSAGE_MAP()
//pNozz->szResvr : N=%d;P=%d;H=%d;
static bool ParaseReserver(const char* pszResvr,double& dP,double& dN,double& dYMinh)
{
bool bOk = false;
CString sTemp;
CString sText = pszResvr;
int nIndex = sText.Find(_T("N="));
int nSp = sText.Find(_T(";"),nIndex);
if (nIndex != -1 && nSp != -1 && nSp > nIndex)
{
sTemp = sText.Mid(nIndex + 2,nSp - nIndex - 2);
dN = _ttof(sTemp);
bOk = true;
}
nIndex = sText.Find(_T("P="));
nSp = sText.Find(_T(";"),nIndex);
if (nIndex != -1 && nSp != -1 && nSp > nIndex)
{
sTemp = sText.Mid(nIndex + 2,nSp - nIndex - 2);
dP = _ttof(sTemp);
bOk = true;
}
nIndex = sText.Find(_T("H="));
nSp = sText.Find(_T(";"),nIndex);
if (nIndex != -1 && nSp != -1 && nSp > nIndex)
{
sTemp = sText.Mid(nIndex + 2,nSp - nIndex - 2);
dYMinh = _ttof(sTemp);
bOk = true;
}
return bOk;
}
BOOL CNozzDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Db.InitADOServer(FilePath::GetSysDir() + _T("\\plumbing.db"));
InitComboDN();
m_bHVACCir = FALSE;
if (m_pData != NULL)
{
AecEqui::XNozz* pNozz = (AecEqui::XNozz*)m_pData;
short nType = pNozz->nType;
m_bNozzCmd = pNozz->nCmd;
m_bRadio = nType;
m_bTwoFlang = pNozz->bTwoFlags;
if (m_bRadio > 1)
m_bRadio = 1;//风管系统 2 圆口
if (nType == 0) //GB 公称圆口
{
m_bHVACCir = FALSE;
CString sDn;
sDn.Format(_T("%d"),(int)pNozz->dVal1);
int nIndex = m_wndDnCombo.FindStringExact(0,sDn);
if (nIndex != -1)
{
m_nCurSel = nIndex;
m_wndDnCombo.SetCurSel(nIndex);
}
/*m_xNozzData.dVal1 = 1.0 * nDn;
m_xNozzData.dVal2 = 1.0 * nD;
m_xNozzData.dVal3 = 1.0 * nN;
m_xNozzData.dVal4 = 1.0 * nC;
m_xNozzData.dVal5 = m_dYH;*/
//高度
m_dYH = pNozz->dVal5;
//最小高度,就是法兰的高度
//pNozz->szResvr : N=%d;P=%d;H=%d
//兼容以前的管嘴,预留的内容为 法兰颈,压力,法兰高度 !!!!!
double dP = 1.0,dN = 0.0,dH = 0.0,dWD = 0.0,dC;
if ( !ParaseReserver(pNozz->szResvr,dP,dN,m_dYMinh) )//默认为1.0压力的法兰数据
{
//从数据库中选
TDbPipeSupport::QueryFlangData(&m_Db,pNozz->dVal1,dP,dWD,dC,m_dYMinh,dN);
UpdateData(FALSE);
}
else//有,根据压力选择
{
UpdateData(FALSE);
//0 1 2 3
CString sPressure;
for (int i = 0;i < m_wndComboPre.GetCount();i++)
{
m_wndComboPre.GetLBText(i,sPressure);
if ( fabs(_ttof(sPressure) - dP) < 1.e-3)
{
m_wndComboPre.SetCurSel(i); //设置压力
break;
}
}
}
}
else //风管 圆口 + 方口
{
m_dFL = pNozz->dVal1;
m_dFW = pNozz->dVal2;
m_dFH = pNozz->dVal3;
m_dO = pNozz->dVal4;
m_dT = pNozz->dVal5;
if (nType == 2) //圆口
{
m_bHVACCir = TRUE;
}
}
UpdateData(FALSE);
if (m_bHVACCir)
{
GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("管口直径(D):"));
GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("法兰外径(W):"));
GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("管嘴高度(H):"));
GetDlgItem(IDC_STATIC_O)->EnableWindow(FALSE);
GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):"));
}
else
{
GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("长度(L):"));
GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("宽度(W):"));
GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("高度(H):"));
GetDlgItem(IDC_STATIC_O)->EnableWindow(TRUE);
GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):"));
}
}
InitGroupWindowEnable();
if (m_wndComboPre.GetCurSel() == -1)
{
if (m_wndComboPre.GetCount() > 0)
m_wndComboPre.SetCurSel(0);
}
if (m_bNozzCmd == 2)
{
GetDlgItem(IDC_STATIC_O)->SetWindowText(_T("电压(&V):"));
GetDlgItem(IDC_STATIC_VV)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("电流(&A):"));
GetDlgItem(IDC_STATIC_AA)->ShowWindow(SW_SHOW);
}
return TRUE;
}
void CNozzDlg::InitComboDN()
{
m_wndDnCombo.ResetContent();
CStringArray strArr;
CString sql(_T("select distinct [公称直径] from aecflangedata order by [公称直径] asc"));
m_Db.GetSelData(sql, strArr);
if (!strArr.IsEmpty())
{
int sabi;
for (int i = 0; i < strArr.GetCount(); ++i)
{
sabi = m_wndDnCombo.InsertString(i, strArr[i]);
m_wndDnCombo.SetItemData(sabi,i);
}
}
else
{
int i = 0, nIndex = 0;
CString sText;
while (TRUE)
{
if (g_nNozzY[i] == 0)
break;
sText.Format(_T("%d"), g_nNozzY[i]);
nIndex = m_wndDnCombo.InsertString(i, sText);
m_wndDnCombo.SetItemData(nIndex, i);
i++;
}
}
if (m_wndDnCombo.GetCount() >= 10)
m_wndDnCombo.SetCurSel(10);
m_nCurSel = 10;
}
void CNozzDlg::OnBnClickedOk()
{
UpdateData();
//1. 数据有效性验证
if (!m_bRadio) //圆口 0
{
if (m_dYH - m_dYMinh < -1.e-3) //可以等于
{
AfxMessageBox(_T("接口尺寸高度过小,请输入接口高度尺寸!"));
return;
}
}
else //方口
{
if (m_bHVACCir)
{
if (m_dFL < 1.e-3 || m_dFH < 1.e-3 ||
m_dFW < 1.e-3 || m_dT < 1.e-3)
{
AfxMessageBox(_T("风管接口尺寸过小,请输入方管接口尺寸!"));
return;
}
if (m_dFW - m_dFL < 1.e-3)
{
AfxMessageBox(_T("风管法兰外径尺寸过小,请输入法兰外径尺寸!"));
return;
}
}
else
{
if (m_dFL < 1.e-3 || m_dFH < 1.e-3 ||
m_dFW < 1.e-3 || m_dO < 1.e-3 || m_dT < 1.e-3)
{
AfxMessageBox(_T("方管接口尺寸过小,请输入方管接口尺寸!"));
return;
}
}
}
m_xNozzData.nType = m_bRadio;
if (m_bHVACCir)
{
m_xNozzData.nType = 2;
}
m_xNozzData.nCmd = m_bNozzCmd;
CString sPre = _T("1.0");
int nSel = m_wndComboPre.GetCurSel();
if (nSel != -1)
{
m_wndComboPre.GetLBText(nSel,sPre);
}
if (this->m_bTwoFlang >= 2)//点式管嘴
{
m_dYMinh = 0;
m_dYH = 0;
}
//2.填充数据
if (!m_bRadio) //圆口
{
if (m_nCurSel != -1)
{
CString sText;
m_wndDnCombo.GetLBText(m_nCurSel,sText);
int nRow = (int)m_wndDnCombo.GetItemData(m_nCurSel);
if (nRow != -1)
{
//接口尺寸表 DN D N C
//查数据库
//公称尺寸,法兰大盘外径,法兰颈直径,厚度
int nDn = _ttoi(sText);
double nD = 0.0,nN = 0.0,nC = 0.0, dYMinh(.0);
TDbPipeSupport::QueryFlangData(&m_Db,nDn,_ttof(sPre),nD,nC,dYMinh,nN);
m_xNozzData.dVal1 = 1.0 * nDn;
m_xNozzData.dVal2 = 1.0 * nD;
m_xNozzData.dVal3 = 1.0 * nN;
m_xNozzData.dVal4 = 1.0 * (nC = nC > m_dYMinh ? m_dYMinh : nC);
if (this->m_bTwoFlang >= 2)
{
m_xNozzData.dVal4 = 0.0;
m_xNozzData.dVal5 = 0.0;
}
else
{
m_xNozzData.dVal5 = m_dYH;
}
//兼容之前的,放到szResvr中
sprintf(m_xNozzData.szResvr,"N=%d;P=%g;H=%d;",(int)nN,_ttof(sPre),(int)m_dYMinh);
}
}
}
else
{
m_xNozzData.dVal1 = m_dFL;
m_xNozzData.dVal2 = m_dFW;
m_xNozzData.dVal3 = m_dFH;
m_xNozzData.dVal4 = m_dO;
m_xNozzData.dVal5 = m_dT;
}
m_xNozzData.bTwoFlags = m_bTwoFlang;
if (m_pData != NULL)
{
memcpy(m_pData,&m_xNozzData,sizeof(AecEqui::XNozz));
}
SET_CACHE(CNozzDlg
, %f%f%f%f%f%f%f%f%d%d%d%d%d%d%d
, m_dDn
, m_dYH
, m_dFL
, m_dFH
, m_dFW
, m_dYMinh
, m_dO
, m_dT
, m_nCurSel
, m_bRadio
, m_bNozzCmd
, m_bTwoFlang
, m_bHVACCir
, m_bTwoFlang1
, m_clr);
OnOK();
}
AecEqui::XNozz* CNozzDlg::GetNozzData()
{
return &m_xNozzData;
}
void CNozzDlg::OnBnClickedRadioy()
{
UpdateData();
InitGroupWindowEnable();
}
void CNozzDlg::OnBnClickedRadiof()
{
UpdateData();
InitGroupWindowEnable();
}
void CNozzDlg::InitGroupWindowEnable()
{
if (!m_bRadio) //GB圆
{
m_wndDnCombo.EnableWindow(TRUE);
m_wndEditYH.EnableWindow(TRUE);
GetDlgItem(IDC_RADIOFLANG)->EnableWindow(TRUE);
GetDlgItem(IDC_RADIO3)->EnableWindow(TRUE);
GetDlgItem(IDC_RADIO4)->EnableWindow(TRUE);
m_wndEditFL.EnableWindow(FALSE);
m_wndEditFH.EnableWindow(FALSE);
m_wndEditFW.EnableWindow(FALSE);
}
else //封圆
{
m_wndDnCombo.EnableWindow(FALSE);
m_wndEditYH.EnableWindow(FALSE);
GetDlgItem(IDC_RADIOFLANG)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO3)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO4)->EnableWindow(FALSE);
m_wndEditFL.EnableWindow(TRUE);
m_wndEditFH.EnableWindow(TRUE);
m_wndEditFW.EnableWindow(TRUE);
if (m_bHVACCir)
{
m_wndEditFO.EnableWindow(FALSE);
}
}
}
void CNozzDlg::OnBnClickedCheckhvaccir()
{
UpdateData();
if (m_bHVACCir)
{
GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("管口直径(D):"));
GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("法兰外径(W):"));
GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("管嘴高度(H):"));
GetDlgItem(IDC_STATIC_O)->EnableWindow(FALSE);
GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):"));
}
else
{
GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("长度(L):"));
GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("宽度(W):"));
GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("高度(H):"));
GetDlgItem(IDC_STATIC_O)->EnableWindow(TRUE);
GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):"));
}
}
void CNozzDlg::OnBnClickedCancel()
{
OnCancel();
}
void CNozzDlg::OnBnClickedRadioh()
{
}
void CNozzDlg::OnCbnSelchangeComboinf()
{
//选择管子公称直径
UpdateData();
int nSel = m_wndDnCombo.GetCurSel();
if (nSel != -1)
{
CString sTemp,sPre = _T("1.0");
m_wndDnCombo.GetLBText(nSel,sTemp);
nSel = m_wndComboPre.GetCurSel();
if (nSel != -1)
{
m_wndComboPre.GetLBText(nSel,sPre);
}
double dWD = 0.0,dWh = 0.0,dN = 0.0;
TDbPipeSupport::QueryFlangData(&m_Db,_ttof(sTemp),_ttof(sPre),dWD,dWh,m_dYMinh,dN);
m_dYH = 2.0 * m_dYMinh;
UpdateData(FALSE);
}
}
void CNozzDlg::OnCbnSelchangeCombopre()
{
//选择压力等级
UpdateData();
int nSel = m_wndDnCombo.GetCurSel();
if (nSel != -1)
{
CString sTemp,sPre = _T("1.0");
m_wndDnCombo.GetLBText(nSel,sTemp);
nSel = m_wndComboPre.GetCurSel();
if (nSel != -1)
{
m_wndComboPre.GetLBText(nSel,sPre);
}
double dWD = 0.0,dWh = 0.0,dN = 0.0;
TDbPipeSupport::QueryFlangData(&m_Db,_ttof(sTemp),_ttof(sPre),dWD,dWh,m_dYMinh,dN);
m_dYH = 2.0 * m_dYMinh;
UpdateData(FALSE);
}
}
void CNozzDlg::OnStaticColor()
{
AcCmColor clr;
#if ARX < 24
clr.setColorMethod(AcCmEntityColor::kByACI);
#endif
clr.setColorIndex(256);
if (acedSetColorDialogTrueColor(clr, Adesk::kTrue, clr, (AcCm::DialogTabs)(AcCm::kACITab)) == Adesk::kFalse) return;
Invalidate();
}
HBRUSH CNozzDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_STATIC)
{
if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR)
{
CRect rc;
pWnd->GetClientRect(rc);
pDC->FillSolidRect(rc, acedGetRGB(m_clr));
}
}
return hbr;
}
void CNozzDlg::OnBnClickedRadioe()
{
this->UpdateData();
if (m_bNozzCmd == 2)//电气
{
GetDlgItem(IDC_STATIC_O)->SetWindowText(_T("电压(&V):"));
GetDlgItem(IDC_STATIC_VV)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("电流(&A):"));
GetDlgItem(IDC_STATIC_AA)->ShowWindow(SW_SHOW);
}
else
{
GetDlgItem(IDC_STATIC_O)->SetWindowText(_T("卷边(&O)::"));
GetDlgItem(IDC_STATIC_VV)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(&T):"));
GetDlgItem(IDC_STATIC_AA)->ShowWindow(SW_HIDE);
}
}
void CNozzDlg::OnBnClickedRadio4()
{
if (m_bTwoFlang >= 2)
{
m_dYH = 0;
m_dYMinh = 0;
UpdateData(FALSE);
}
}
void CNozzDlg::OnBnClickedRadio24()
{
if (m_bTwoFlang >= 2)
{
m_dYH = 0;
m_dYMinh = 0;
UpdateData(FALSE);
}
}
void CNozzDlg::OnBnClickedRadio25()
{
if (m_bTwoFlang >= 2)
{
m_dYH = 0;
m_dYMinh = 0;
UpdateData(FALSE);
}
}
void CNozzDlg::OnBnClickedRadio26()
{
if (m_bTwoFlang >= 2)
{
m_dYH = 0;
m_dYMinh = 0;
UpdateData(FALSE);
}
}