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