2026-10-04 00:04:20 +08:00
|
|
|
#include "stdafx.h"
|
2026-09-28 15:28:50 +08:00
|
|
|
#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();
|
|
|
|
|
}
|