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

572 lines
12 KiB
C++

#include "stdafx.h"
#include "NozzDlg.h"
#include "CoreTools.h"
//接口尺寸表 DN D N C //HG20592-97
// 公称尺寸,法兰大盘外径,法兰颈直径,厚度
//http://www.wanuo163.com/products/detail/808.html
//上海瓦诺阀门有限公司
//DN
extern int g_nNozzY[];
#define SET_WND_TXT(id,txt)\
{\
CWnd* pWnd = GetDlgItem(id);\
if (pWnd)\
pWnd->SetWindowText(txt);\
}
#define ENABLE_WND(id,stat) \
{\
CWnd* pWnd = GetDlgItem(id);\
if (pWnd)\
pWnd->EnableWindow(stat);\
}
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_dX(0.0)
, m_dY(0.0)
, m_dZ(0.0)
, 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);
DDX_Text(pDX, IDC_EDIT1, m_dX);
DDX_Text(pDX, IDC_EDIT2, m_dY);
DDX_Text(pDX, IDC_EDIT3, m_dZ);
}
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()
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_wndComboPre.SetCurSel(0);
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压力的法兰数据
{
//从数据库中选
CoreTools::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)
{
SET_WND_TXT(IDC_STATIC_L, _T("管口直径(D):"));
SET_WND_TXT(IDC_STATIC_W, _T("法兰外径(W):"));
SET_WND_TXT(IDC_STATIC_H, _T("管嘴高度(H):"));
ENABLE_WND(IDC_STATIC_O, FALSE);
SET_WND_TXT(IDC_STATIC_T, _T("法兰厚度(T):"));
}
else
{
SET_WND_TXT(IDC_STATIC_L, _T("长度(L):"));
SET_WND_TXT(IDC_STATIC_W, _T("宽度(W):"));
SET_WND_TXT(IDC_STATIC_H, _T("高度(H):"));
ENABLE_WND(IDC_STATIC_O, TRUE);
SET_WND_TXT(IDC_STATIC_T, _T("法兰厚度(T):"));
}
}
InitGroupWindowEnable();
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) //圆口
{
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);
}
//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);
CoreTools::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);
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);
ENABLE_WND(IDC_RADIOFLANG, TRUE);
ENABLE_WND(IDC_RADIO3, TRUE);
ENABLE_WND(IDC_RADIO4, TRUE);
m_wndEditFL.EnableWindow(FALSE);
m_wndEditFH.EnableWindow(FALSE);
m_wndEditFW.EnableWindow(FALSE);
}
else //封圆
{
m_wndDnCombo.EnableWindow(FALSE);
m_wndEditYH.EnableWindow(FALSE);
ENABLE_WND(IDC_RADIOFLANG, FALSE);
ENABLE_WND(IDC_RADIO3, FALSE);
ENABLE_WND(IDC_RADIO4, 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)
{
SET_WND_TXT(IDC_STATIC_L, _T("管口直径(D):"));
SET_WND_TXT(IDC_STATIC_L, _T("管口直径(D):"));
SET_WND_TXT(IDC_STATIC_W, _T("法兰外径(W):"));
SET_WND_TXT(IDC_STATIC_H, _T("管嘴高度(H):"));
ENABLE_WND(IDC_STATIC_O, FALSE);
SET_WND_TXT(IDC_STATIC_T, _T("法兰厚度(T):"));
}
else
{
SET_WND_TXT(IDC_STATIC_L, _T("长度(L):"));
SET_WND_TXT(IDC_STATIC_W,_T("宽度(W):"));
SET_WND_TXT(IDC_STATIC_H, _T("高度(H):"));
ENABLE_WND(IDC_STATIC_O, TRUE);
SET_WND_TXT(IDC_STATIC_T, _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;
CoreTools::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;
CoreTools::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::kACITab) == Adesk::kFalse) return;
m_clr = clr.colorIndex();
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;
}