#include "stdafx.h" #include "SelectBlkDlg.h" #include "coretools.h" IMPLEMENT_DYNAMIC(CSelectBlkDlg, CDialog) CSelectBlkDlg::CSelectBlkDlg(LPCTSTR pszDWG , LPCTSTR pszFilter , LPCTSTR pszSelItem , CWnd* pParent) : CDialog(IDD_SELECT_BLK, pParent) , m_sDwgPath(pszDWG) , m_sFilter(pszFilter) , m_pDb(NULL) , m_sInitSel(_T("")) { m_pDb = new AcDbDatabase(false); if (m_pDb->readDwgFile(pszDWG, AcDbDatabase::kForReadAndAllShare) == Acad::eOk) CoreTools::enumBlockByDWG(m_pDb, m_blockNames, m_sFilter, &m_blockIds); else DELETE_PTR(m_pDb); if (pszSelItem) m_sInitSel = pszSelItem; } CSelectBlkDlg::~CSelectBlkDlg() { DELETE_PTR(m_pDb); } void CSelectBlkDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_wndListBox); } BOOL CSelectBlkDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndViewCtrl.SubclassDlgItem(IDC_PREVIEW_PIC, this); CString str(_T("")); for (size_t i(0); i < m_blockNames.size(); ++i) { m_wndListBox.AddString(m_blockNames[i]); } int idx = m_wndListBox.FindString(0, m_sInitSel); if (idx != -1) { m_wndListBox.SetCurSel(idx); } else { if (!m_blockNames.empty()) m_wndListBox.SetCurSel(0); } OnLbnSelchangeList1(); return TRUE; } BEGIN_MESSAGE_MAP(CSelectBlkDlg, CDialog) ON_BN_CLICKED(IDOK, &CSelectBlkDlg::OnBnClickedOk) ON_LBN_SELCHANGE(IDC_LIST1, &CSelectBlkDlg::OnLbnSelchangeList1) END_MESSAGE_MAP() void CSelectBlkDlg::OnBnClickedOk() { CDialog::OnOK(); UpdateData(TRUE); int idx = m_wndListBox.GetCurSel(); if (idx < m_blockNames.size() && idx >= 0) { m_sSelectBlkName = m_blockNames[idx]; } } void CSelectBlkDlg::OnLbnSelchangeList1() { int idx = m_wndListBox.GetCurSel(); if (idx >= m_blockIds.length() && idx < 0) return; if (!m_blockIds[idx].isValid()) return; AcDbBlockReference *pRef = new AcDbBlockReference(); pRef->setBlockTableRecord(m_blockIds[idx]); pRef->setPosition(AcGePoint3d::kOrigin); pRef->setRotation(0.0); AcDbExtents ext; pRef->getGeomExtents(ext); pRef->setScaleFactors(AcGeScale3d(.8)); m_wndViewCtrl.clearAll(); m_wndViewCtrl.init(true); m_wndViewCtrl.SetOrbitFlag(OBF_ZOOM); m_wndViewCtrl.InitFromCurrentView2D(ext, true); m_wndViewCtrl.Add(pRef); m_wndViewCtrl.view()->invalidate(); m_wndViewCtrl.Invalidate(); m_wndViewCtrl.RedrawWindow(); }