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

411 lines
12 KiB
C++

#include "stdafx.h"
#include "LayoutExtinguisher.h"
#include "CoreTools.h"
#include "AcGiViewDraw.h"
#include "AecDbEwEquipment.h"
#include "dbobjptr.h"
IMPLEMENT_DYNAMIC(CLayoutExtinguisher, CDialog)
CLayoutExtinguisher::CLayoutExtinguisher(CWnd* pParent)
: CDialog(IDD_DLG_EXTINGUISHER, pParent)
, m_bShowProtectR(FALSE)
, m_bDrawBox(FALSE)
, m_iBoxGround(0)
, m_iLayout(1)
, m_dBoxL(290)
, m_dBoxW(290)
, m_sBoxModel(_T("XMDF1-2"))
, m_sExtModel(_T("MSTZ/20(水型)"))
, m_sExtLevel(_T("4A"))
, m_iExtCount(1)
, m_dExtScale(.35)
, m_dExtProtectR(3)
, m_iExtType(1)
, m_s2DSel(_T(""))
, m_s3DSel(_T(""))
, m_pEqu(NULL)
{ }
CLayoutExtinguisher::~CLayoutExtinguisher()
{
DELETE_PTR(m_pEqu);
}
void CLayoutExtinguisher::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_CHECK_EXT_SHOW_PROTECT_R, m_bShowProtectR);
DDX_Check(pDX, IDC_CHECK_BOX_DRAW_BOX, m_bDrawBox);
DDX_Radio(pDX, IDC_RADIO_BOX_GROUND, m_iBoxGround);
DDX_Radio(pDX, IDC_RADIO_LAYOUT_FREE, m_iLayout);
DDX_Text(pDX, IDC_CMB_BOX_LENGTH, m_dBoxL);
DDX_Text(pDX, IDC_CMB_BOX_WIDTH, m_dBoxW);
DDX_CBString(pDX, IDC_CMB_BOX_MODEL, m_sBoxModel);
DDX_CBString(pDX, IDC_CMB_EXT_STANDARD, m_sExtModel);
DDX_Text(pDX, IDC_EDIT_EXT_LEVEL, m_sExtLevel);
DDX_Text(pDX, IDC_EDIT_EXT_COUNT, m_iExtCount);
DDX_Text(pDX, IDC_EDIT_EXT_SCALE, m_dExtScale);
DDX_Text(pDX, IDC_EDIT_EXT_PROTECT_R, m_dExtProtectR);
DDX_Radio(pDX, IDC_RADIO_EXT_MODEL_HAND, m_iExtType);
}
BOOL CLayoutExtinguisher::OnInitDialog()
{
UpdateData(FALSE);
CDialog::OnInitDialog();
if (!m_wndViewCtrl2d.SubclassDlgItem(IDC_PREVIEW_2D, this))
{
return FALSE;
}
if (!m_wndViewCtrl3d.SubclassDlgItem(IDC_PREVIEW_3D, this))
{
return FALSE;
}
initExtStandard();
initBoxiGround();
OnBnClickedDrawBox();
return TRUE;
}
BEGIN_MESSAGE_MAP(CLayoutExtinguisher, CDialog)
ON_BN_CLICKED(IDOK, &CLayoutExtinguisher::OnBnClickedOk)
ON_BN_CLICKED(IDC_CHECK_BOX_DRAW_BOX, &CLayoutExtinguisher::OnBnClickedDrawBox)
ON_BN_CLICKED(IDC_BTN_SEL_2D, &CLayoutExtinguisher::OnBnClickedBtnSel2d)
ON_BN_CLICKED(IDC_BTN_SEL_3D, &CLayoutExtinguisher::OnBnClickedBtnSel3d)
ON_BN_CLICKED(IDC_RADIO_BOX_GROUND, &CLayoutExtinguisher::OnBnClickedRadioBoxGround)
ON_BN_CLICKED(IDC_RADIO_BOX_WALL, &CLayoutExtinguisher::OnBnClickedRadioBoxGround)
ON_BN_CLICKED(IDC_RADIO_EXT_MODEL_HAND, &CLayoutExtinguisher::OnBnClickedRadioExtModelHand)
ON_BN_CLICKED(IDC_RADIO_EXT_MODEL_HAND_P, &CLayoutExtinguisher::OnBnClickedRadioExtModelHand)
ON_BN_CLICKED(IDC_RADIO_EXT_MODEL_CART, &CLayoutExtinguisher::OnBnClickedRadioExtModelHand)
ON_BN_CLICKED(IDC_RADIO_EXT_MODEL_CART_P, &CLayoutExtinguisher::OnBnClickedRadioExtModelHand)
END_MESSAGE_MAP()
void CLayoutExtinguisher::OnBnClickedOk()
{
if (!UpdateData(TRUE)) return;
if (!m_pEqu)
{
AfxMessageBox(_T("请选择一个灭火器!"));
return;
}
CDialog::OnOK();
}
void CLayoutExtinguisher::OnBnClickedDrawBox()
{
UpdateData(TRUE);
CWnd *pWnd = GetDlgItem(IDC_RADIO_BOX_GROUND);
if (pWnd) pWnd->EnableWindow(m_bDrawBox);
pWnd = GetDlgItem(IDC_RADIO_BOX_WALL);
if (pWnd) pWnd->EnableWindow(m_bDrawBox);
pWnd = GetDlgItem(IDC_CMB_BOX_MODEL);
if (pWnd) pWnd->EnableWindow(m_bDrawBox);
pWnd = GetDlgItem(IDC_CMB_BOX_LENGTH);
if (pWnd) pWnd->EnableWindow(m_bDrawBox);
pWnd = GetDlgItem(IDC_CMB_BOX_WIDTH);
if (pWnd) pWnd->EnableWindow(m_bDrawBox);
}
void CLayoutExtinguisher::OnBnClickedBtnSel2d()
{
UpdateData(TRUE);
CString sFile(FilePath::GetRootDir());
sFile += _T("\\TK\\Customer\\图库中心\\图块库\\给排水图库\\");
if (m_iExtType == 0) // 手提
sFile += _T("手提式灭火器.dwg");
else if (m_iExtType == 1) // 手提贮压
sFile += _T("手提贮压式灭火器.dwg");
else if (m_iExtType == 2) // 推车
sFile += _T("推车式灭火器.dwg");
else // 推车贮压
sFile += _T("推车贮压式灭火器.dwg");
m_s2DSel = CoreTools::selectBlockByDWG( sFile , _T("") , m_s2DSel);
AcDbDatabase* _pDb = new AcDbDatabase(false);
std::shared_ptr<AcDbDatabase> pDb(_pDb);
if (pDb->readDwgFile(sFile, AcDbDatabase::kForReadAndAllShare) != Acad::eOk) return;
AcDbBlockTable* _pBT = NULL;
pDb->getSymbolTable(_pBT, AcDb::kForRead);
if (!_pBT) return;
AcDbObjectId idBT(_pBT->objectId());
_pBT->close();
AcDbBlockTablePointer pBT(idBT, AcDb::kForRead);
if (pBT.openStatus() != Acad::eOk) return;
std::vector<CString> vec;
CoreTools::SplitString(m_s2DSel, _T('|'), vec);
if (vec.size() < 1)
{
return;
}
AcDbObjectId idBlock;
pBT->getAt(vec.at(1), idBlock);
pBT->close();
AcDbBlockReference* pRef = new AcDbBlockReference();
pRef->setBlockTableRecord(idBlock);
pRef->setPosition(AcGePoint3d::kOrigin);
pRef->setRotation(0.0);
pRef->setScaleFactors(AcGeScale3d(.8));
AcDbExtents ext;
pRef->getGeomExtents(ext);
m_wndViewCtrl2d.clearAll();
m_wndViewCtrl2d.init(true);
m_wndViewCtrl2d.SetOrbitFlag(OBF_ZOOM);
m_wndViewCtrl2d.InitFromCurrentView2D(ext, true);
m_wndViewCtrl2d.Add(pRef);
m_wndViewCtrl2d.view()->invalidate();
m_wndViewCtrl2d.Invalidate();
m_wndViewCtrl2d.RedrawWindow();
}
void CLayoutExtinguisher::OnBnClickedBtnSel3d()
{
UpdateData(TRUE);
DELETE_PTR(m_pEqu);
m_pEqu = CoreTools::selectEquipment(_T("消防设备\\灭火器"), _T(""));
if (!m_pEqu) return;
AcGiViewDraw dc;
m_pEqu->Draw3d(dc);
AcDbExtents exts;
m_pEqu->getGeomExtents(exts);
m_wndViewCtrl3d.clearAll();
m_wndViewCtrl3d.init(true);
m_wndViewCtrl3d.SetOrbitFlag(OBF_PAN | OBF_ZOOM | OBF_COTE);
m_wndViewCtrl3d.InitFromCurrentView3D(exts, true);
m_wndViewCtrl3d.Add(m_pEqu);
m_wndViewCtrl3d.view()->invalidate();
m_wndViewCtrl3d.Invalidate();
m_wndViewCtrl3d.RedrawWindow();
m_dBoxW = exts.maxPoint().x - exts.minPoint().x;
m_dBoxL = exts.maxPoint().y - exts.minPoint().y;
}
void CLayoutExtinguisher::initExtStandard()
{
UpdateData(TRUE);
CComboBox *pCmb = (CComboBox *)GetDlgItem(IDC_CMB_EXT_STANDARD);
if (!pCmb) return;
pCmb->ResetContent();
if (m_iExtType == 0)
{
pCmb->AddString(_T("MF/ABC2(干粉磷酸铵盐)"));
pCmb->AddString(_T("MF/ABC3(干粉磷酸铵盐)"));
pCmb->AddString(_T("MF/ABC4(干粉磷酸铵盐)"));
pCmb->AddString(_T("MF/ABC5(干粉磷酸铵盐)"));
pCmb->AddString(_T("MS/Q3(水型)"));
pCmb->AddString(_T("MS/T3(水型)"));
pCmb->AddString(_T("MS/Q6(水型)"));
pCmb->AddString(_T("MS/T6(水型)"));
pCmb->AddString(_T("MS/Q9(水型)"));
pCmb->AddString(_T("MS/T9(水型)"));
pCmb->AddString(_T("MP3(泡沫)"));
pCmb->AddString(_T("MP/AR3(泡沫)"));
pCmb->AddString(_T("MP4(泡沫)"));
pCmb->AddString(_T("MP/AR4(泡沫)"));
pCmb->AddString(_T("MP6(泡沫)"));
pCmb->AddString(_T("MP/AR6(泡沫)"));
pCmb->AddString(_T("MP9(泡沫)"));
pCmb->AddString(_T("MP/AR9(泡沫)"));
pCmb->AddString(_T("MF/ABC1(干粉磷酸铵盐)"));
pCmb->AddString(_T("MF/ABC6(干粉磷酸铵盐)"));
pCmb->AddString(_T("MF/ABC8(干粉磷酸铵盐)"));
pCmb->AddString(_T("MF/ABC10(干粉磷酸铵盐)"));
pCmb->AddString(_T("MF1(干粉碳酸氢钠)"));
pCmb->AddString(_T("MF2(干粉碳酸氢钠)"));
pCmb->AddString(_T("MF3(干粉碳酸氢钠)"));
pCmb->AddString(_T("MF4(干粉碳酸氢钠)"));
pCmb->AddString(_T("MF5(干粉碳酸氢钠)"));
pCmb->AddString(_T("MF6(干粉碳酸氢钠)"));
pCmb->AddString(_T("MF8(干粉碳酸氢钠)"));
pCmb->AddString(_T("MF10(干粉碳酸氢钠)"));
pCmb->AddString(_T("MY1(卤代烷)"));
pCmb->AddString(_T("MY2(卤代烷)"));
pCmb->AddString(_T("MY3(卤代烷)"));
pCmb->AddString(_T("MY4(卤代烷)"));
pCmb->AddString(_T("MY6(卤代烷)"));
pCmb->AddString(_T("MT2(二氧化碳)"));
pCmb->AddString(_T("MT3(二氧化碳)"));
pCmb->AddString(_T("MT5(二氧化碳)"));
pCmb->AddString(_T("MT7(二氧化碳)"));
}
else if (m_iExtType == 1)
{
pCmb->AddString(_T("MSTZ/20(水型)"));
pCmb->AddString(_T("MSTZ/45(水型)"));
pCmb->AddString(_T("MSTZ/60(水型)"));
pCmb->AddString(_T("MSTZ/125(水型)"));
pCmb->AddString(_T("MPTZ/AR20(泡沫)"));
pCmb->AddString(_T("MPTZ/AR45(泡沫)"));
pCmb->AddString(_T("MPTZ/AR60(泡沫)"));
pCmb->AddString(_T("MPTZ/AR125(泡沫)"));
pCmb->AddString(_T("MFTZ/20(BC干粉)"));
pCmb->AddString(_T("MFTZ/50(BC干粉)"));
pCmb->AddString(_T("MFTZ/100(BC干粉)"));
pCmb->AddString(_T("MFTZ/125(BC干粉)"));
pCmb->AddString(_T("MFTZ/ABC20(ABC干粉)"));
pCmb->AddString(_T("MFTZ/ABC50(ABC干粉)"));
pCmb->AddString(_T("MFTZ/ABC100(ABC干粉)"));
pCmb->AddString(_T("MFTZ/ABC125(ABC干粉)"));
pCmb->AddString(_T("MJTZ/10(卤代烷)"));
pCmb->AddString(_T("MJTZ/20(卤代烷)"));
pCmb->AddString(_T("MJTZ/30(卤代烷)"));
pCmb->AddString(_T("MJTZ/50(卤代烷)"));
pCmb->AddString(_T("MTT/10(二氧化碳)"));
pCmb->AddString(_T("MTT/20(二氧化碳)"));
pCmb->AddString(_T("MTT/30(二氧化碳)"));
pCmb->AddString(_T("MTT/50(二氧化碳)"));
}
else if (m_iExtType == 2)
{
pCmb->AddString(_T("MSZ/3(水型)"));
pCmb->AddString(_T("MSZ/AR3(水型)"));
pCmb->AddString(_T("MSZ/6(水型)"));
pCmb->AddString(_T("MSZ/AR6(水型)"));
pCmb->AddString(_T("MSZ/9(水型)"));
pCmb->AddString(_T("MSZ/AR9(水型)"));
pCmb->AddString(_T("MPZ/AR3(泡沫)"));
pCmb->AddString(_T("MPZ/AR6(泡沫)"));
pCmb->AddString(_T("MPZ/AR9(泡沫)"));
pCmb->AddString(_T("MFZ/1(BC干粉)"));
pCmb->AddString(_T("MFZ/2(BC干粉)"));
pCmb->AddString(_T("MFZ/3(BC干粉)"));
pCmb->AddString(_T("MFZ/4(BC干粉)"));
pCmb->AddString(_T("MFZ/5(BC干粉)"));
pCmb->AddString(_T("MFZ/6(BC干粉)"));
pCmb->AddString(_T("MFZ/8(BC干粉)"));
pCmb->AddString(_T("MFZ/9(BC干粉)"));
pCmb->AddString(_T("MFZ/ABC1(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC2(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC3(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC4(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC5(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC6(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC8(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC9(ABC干粉)"));
pCmb->AddString(_T("MFZ/ABC12(ABC干粉)"));
pCmb->AddString(_T("MJZ/1(卤代烷)"));
pCmb->AddString(_T("MJZ/2(卤代烷)"));
pCmb->AddString(_T("MJZ/4(卤代烷)"));
pCmb->AddString(_T("MJZ/6(卤代烷)"));
pCmb->AddString(_T("MTZ/2(二氧化碳)"));
pCmb->AddString(_T("MTZ/3(二氧化碳)"));
pCmb->AddString(_T("MTZ/5(二氧化碳)"));
pCmb->AddString(_T("MTZ/7(二氧化碳)"));
}
else
{
pCmb->AddString(_T("MSTZ/20(水型)"));
pCmb->AddString(_T("MSTZ/45(水型)"));
pCmb->AddString(_T("MSTZ/60(水型)"));
pCmb->AddString(_T("MSTZ/125(水型)"));
pCmb->AddString(_T("MPTZ/AR20(泡沫)"));
pCmb->AddString(_T("MPTZ/AR45(泡沫)"));
pCmb->AddString(_T("MPTZ/AR60(泡沫)"));
pCmb->AddString(_T("MPTZ/AR125(泡沫)"));
pCmb->AddString(_T("MFTZ/20(BC干粉)"));
pCmb->AddString(_T("MFTZ/50(BC干粉)"));
pCmb->AddString(_T("MFTZ/100(BC干粉)"));
pCmb->AddString(_T("MFTZ/125(BC干粉)"));
pCmb->AddString(_T("MFTZ/ABC20(ABC干粉)"));
pCmb->AddString(_T("MFTZ/ABC50(ABC干粉)"));
pCmb->AddString(_T("MFTZ/ABC100(ABC干粉)"));
pCmb->AddString(_T("MFTZ/ABC125(ABC干粉)"));
pCmb->AddString(_T("MJTZ/10(卤代烷)"));
pCmb->AddString(_T("MJTZ/20(卤代烷)"));
pCmb->AddString(_T("MJTZ/30(卤代烷)"));
pCmb->AddString(_T("MJTZ/50(卤代烷)"));
pCmb->AddString(_T("MTT/10(二氧化碳)"));
pCmb->AddString(_T("MTT/20(二氧化碳)"));
pCmb->AddString(_T("MTT/30(二氧化碳)"));
pCmb->AddString(_T("MTT/50(二氧化碳)"));
}
pCmb->SetCurSel(0);
return;
}
void CLayoutExtinguisher::initBoxiGround()
{
UpdateData(TRUE);
CComboBox *pCmb = (CComboBox *)GetDlgItem(IDC_CMB_BOX_MODEL);
if (!pCmb) return;
pCmb->ResetContent();
if (m_iBoxGround == 0)
{
pCmb->AddString(_T("XMDF1-2"));
pCmb->AddString(_T("XMDF1-3"));
pCmb->AddString(_T("XMDF1-4"));
pCmb->AddString(_T("XMDF2-2"));
pCmb->AddString(_T("XMDF2-3"));
pCmb->AddString(_T("XMDF2-4"));
pCmb->AddString(_T("XMDF3-2"));
pCmb->AddString(_T("XMDF3-3"));
pCmb->AddString(_T("XMDF3-4"));
}
else
{
pCmb->AddString(_T("XMQK1-2"));
pCmb->AddString(_T("XMQK1-3"));
pCmb->AddString(_T("XMQK1-4"));
pCmb->AddString(_T("XMQK2-2"));
pCmb->AddString(_T("XMQK2-3"));
pCmb->AddString(_T("XMQK2-4"));
pCmb->AddString(_T("XMQK3-2"));
pCmb->AddString(_T("XMQK3-3"));
pCmb->AddString(_T("XMQK3-4"));
}
pCmb->SetCurSel(0);
return;
}
void CLayoutExtinguisher::OnBnClickedRadioBoxGround()
{
initBoxiGround();
}
void CLayoutExtinguisher::OnBnClickedRadioExtModelHand()
{
initExtStandard();
}
AecDbEwEquipment* CLayoutExtinguisher::getEquPtr()
{
if (m_pEqu)
return (AecDbEwEquipment*)m_pEqu->clone();
return NULL;
}