#include "stdafx.h" #include "HZSCDlg.h" #include "gltkdlg.h" #include "acpolylinejig.h" #include "KTCADUtilityEx.h" #include "AecDbExtendedEntity.h" #include "CoreTools.h" #include "AecDb3dRoadAxisLine.h" IMPLEMENT_DYNAMIC(CHZSCDlg, CDialog) CHZSCDlg::CHZSCDlg(CWnd* pParent /*=nullptr*/) : CDialog(IDD_HZSC_DLG, pParent) , m_dEl(0) , m_sMaterial(_T("钢筋混凝土")) , m_sUse(_T("进水")) , m_pReg(NULL) { } CHZSCDlg::~CHZSCDlg() { DELETE_PTR(m_pReg); } void CHZSCDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_dEl); DDX_Text(pDX, IDC_EDIT2, m_sMaterial); DDX_Text(pDX, IDC_EDIT3, m_sUse); DDX_Control(pDX, IDC_VIEW_STA, m_wndViewCtrl); } BOOL CHZSCDlg::OnInitDialog() { CDialog::OnInitDialog(); GET_CACHE(CHZSCDlg, %f%s%s, &m_dEl, &m_sMaterial, &m_sUse); UpdateData(FALSE); ShowCurSection(); // 子类化控件对象 //if (!m_wndViewCtrl.SubclassDlgItem(IDC_STATIC_FRM, this)) //{ // return FALSE; //} return TRUE; } void CHZSCDlg::ShowCurSection() { if (!m_pReg) return; m_wndViewCtrl.clearAll(); m_wndViewCtrl.init(true); m_wndViewCtrl.SetOrbitFlag(OBF_PAN | OBF_ZOOM | OBF_COTE); AcDbExtents exts; m_pReg->getGeomExtents(exts); m_wndViewCtrl.InitFromCurrentView2D(exts, true); m_wndViewCtrl.Add(m_pReg); m_wndViewCtrl.view()->invalidate(); m_wndViewCtrl.Invalidate(); m_wndViewCtrl.RedrawWindow(); } BEGIN_MESSAGE_MAP(CHZSCDlg, CDialog) ON_BN_CLICKED(IDOK, &CHZSCDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CHZSCDlg::OnBnClickedButton1) END_MESSAGE_MAP() void CHZSCDlg::OnBnClickedOk() { UpdateData(TRUE); SET_CACHE(CHZSCDlg, %f%s%s, m_dEl, m_sMaterial, m_sUse); CDialog::OnOK(); } AcDbRegion* CHZSCDlg::GetSelectRegion() { if (!m_pReg) return NULL; return (AcDbRegion*)m_pReg->clone(); } void CHZSCDlg::Start() { CAcModuleResourceOverride myResources; CHZSCDlg dlg; if (dlg.DoModal() != IDOK) return; AcDbRegion *pReg = dlg.GetSelectRegion(); if (pReg == NULL) { AfxMessageBox(_T("没有选择截面!请选择槽壁截面!")); return; } AcPolylineJig jig; if (!jig.DoIt()) { DELETE_PTR(pReg); return; } AcDbObjectId id = jig.GetRoadAxisLineId(); double w(.0); AecDbExtendedEntity *pFl = new AecDbExtendedEntity(); pFl->SetSection(pReg, AcGePoint3d::kOrigin); pFl->SetAt(_T("YXCB"), TRUE); AcDbExtents ext; pReg->getGeomExtents(ext); w = (ext.maxPoint().x - ext.minPoint().x) * .5; DELETE_PTR(pReg); OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDb3dRoadAxisLine, pLine) { if (!pLine) return; AcDbPolyline* pPl = pLine->ConvertTo2dPline(); if (pPl != NULL) { pPl->setElevation(dlg.m_dEl); pFl->SetBaseCurve(pPl); delete pPl; } pFl->SetAt(KEY_2DSTYLE, 2); pFl->SetAt(KEY_SECSHAPE, 2); pFl->SetAt(KEY_DRAWGRAD, 0); pFl->SetAt(PIPE_DN, w); pFl->SetAt(PIPE_D, w); pFl->SetAt(KEY_MATERIAL, dlg.m_sMaterial); pFl->SetAt(KEY_FORUSE, dlg.m_sUse); pLine->erase(); } OPENOBJ_END() CoreTools::AddToModelSpace(pFl); } void CHZSCDlg::inplace(AcDbEntity * pEnt) { if (!pEnt) return; AecDbExtendedEntity *pExtEnt = AecDbExtendedEntity::cast(pEnt); if (!pExtEnt) return; AcDbRegion *pReg = pExtEnt->GetSection(); CAcModuleResourceOverride myResources; CHZSCDlg dlg; dlg.m_pReg = (AcDbRegion*)pReg->clone(); DELETE_PTR(pReg); dlg.m_dEl = pExtEnt->getElevation(); pExtEnt->GetAt(KEY_MATERIAL, dlg.m_sMaterial); pExtEnt->GetAt(KEY_FORUSE, dlg.m_sUse); if (dlg.DoModal() != IDOK) return; pReg = dlg.GetSelectRegion(); if (!pReg) return; AcDbExtents ext; pReg->getGeomExtents(ext); double w = (ext.maxPoint().x - ext.minPoint().x) * .5; pExtEnt->SetAt(PIPE_DN, w); pExtEnt->SetAt(PIPE_D, w); pExtEnt->SetSection(pReg, AcGePoint3d::kOrigin); DELETE_PTR(pReg); pExtEnt->setElevation(dlg.m_dEl); } void CHZSCDlg::OnBnClickedButton1() { CGLTKDlg dlg(CGLTKDlg::eSelect, _T("poolstandard.db"), _T("standard"), CGLTKDlg::drawRegion); if (dlg.DoModal() != IDOK) return; CString ss(_T("")); dlg.GetCrossSectionScr(ss); m_pReg = CoreTools::StringToRegion(ss); ShowCurSection(); }