#include "stdafx.h" #include "CLoadEquDlg.h" #include "AecDbEwEquipment.h" #include "CoreTools.h" #include "AcGiViewDraw.h" IMPLEMENT_DYNAMIC(CLoadEquDlg, CDialog) CLoadEquDlg::CLoadEquDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_LOADEQUDLG, pParent) { m_pEqu = NULL; m_dBoxW = 1; m_dBoxL = 1; m_b2dScaleFit3dExt = true; m_pXDataMap = NULL; } CLoadEquDlg::~CLoadEquDlg() { } void CLoadEquDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_wndListMapData); } BEGIN_MESSAGE_MAP(CLoadEquDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON1, &CLoadEquDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON9, &CLoadEquDlg::OnBnClickedButton9) ON_BN_CLICKED(IDOK, &CLoadEquDlg::OnBnClickedOk) END_MESSAGE_MAP() void CLoadEquDlg::SetEquPath(LPCTSTR psz2DPathDwg, LPCTSTR pszFull3DPathEqu,bool b2dScaleFit3dExt) { m_s2DPathDwg = psz2DPathDwg; m_s3DPathEqu = pszFull3DPathEqu; m_b2dScaleFit3dExt = b2dScaleFit3dExt; } void CLoadEquDlg::SetXDataMap(AecDbObjXDataMap &xDataMap) { m_pXDataMap = &xDataMap; } AecDbEwEquipment* CLoadEquDlg::GetSelectEqu(AcDbObjectId& idRec2d,bool bGetRec3d) const { if (m_pEqu != NULL) { m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_PATH_, m_s2DSel); m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_WIDTH_, m_dBoxW); m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_LENGTH_, m_dBoxL); if (m_b2dScaleFit3dExt) { m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_DOCSCALE_, FALSE); } else//走图纸比例 绘制 { m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_DOCSCALE_, TRUE); } if (bGetRec3d) { CString sDwg(_T("")), sBlk(_T("")); if (m_pEqu->GetSpecialtyData()->GetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_PATH_, sDwg)) { idRec2d = CoreTools::loadBlockFromDwg(sDwg, sBlk); } } } return m_pEqu; } BOOL CLoadEquDlg::OnInitDialog() { CDialog::OnInitDialog(); if (!m_wndViewCtrl2d.SubclassDlgItem(IDC_STATIC_2D, this)) { return FALSE; } if (!m_wndViewCtrl3d.SubclassDlgItem(IDC_STATIC_3D, this)) { return FALSE; } m_wndListMapData.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW | LVS_EX_BORDERSELECT); LPCTSTR lpszCols[] = { _T("名称"),_T("数据"),_T("KEY"),NULL}; int lnColumns[] = { 120,240,0,0}; m_wndListMapData.InsertColumn(0, lpszCols[0], LVCFMT_LEFT, lnColumns[0]); m_wndListMapData.InsertColumn(1, lpszCols[1], LVCFMT_LEFT, lnColumns[1]); m_wndListMapData.InsertColumn(2, lpszCols[2], LVCFMT_LEFT, lnColumns[2]); ShowXDataMap(); return TRUE; } //显示用户需要交互的数据列表 void CLoadEquDlg::ShowXDataMap() { } void CLoadEquDlg::OnBnClickedButton1() { CString sFile(FilePath::GetRootDir()); sFile += m_s2DPathDwg; 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 CLoadEquDlg::OnBnClickedButton9() { DELETE_PTR(m_pEqu); m_pEqu = CoreTools::selectEquipment(m_s3DPathEqu, _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 CLoadEquDlg::OnBnClickedOk() { //重新设置用户数据列表 CDialog::OnOK(); }