Files
2026-09-28 15:28:50 +08:00

206 lines
4.0 KiB
C++

#include "stdafx.h"
#include "KTBlkRecsView.h"
#include "KTSetting.h"
#include "CHPMCDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WM_VIEWDBLCLKSEL (WM_USER + 0x1200)
#define WM_TRUERELOAD (WM_USER + 0x1201)
#define WM_ONITEMSEL (WM_USER + 0x1202)
extern CAcExtensionModule Pool3dCmdDll;
CHPMCDlg::CHPMCDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_HPMC_DLG, pParent)
{
m_sRecName2D = _T("");
m_sDwgFile = _T("");
}
CHPMCDlg::~CHPMCDlg()
{
}
void CHPMCDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_wndNameList);
}
BEGIN_MESSAGE_MAP(CHPMCDlg, CDialog)
ON_MESSAGE(WM_ONITEMSEL, OnViewItemSel)
ON_BN_CLICKED(IDOK, &CHPMCDlg::OnBnClickedOk)
END_MESSAGE_MAP()
void CHPMCDlg::SetDwgFile2PreviewRecs(LPCTSTR pszDwgFile)
{
m_sDwgFile = pszDwgFile;
}
BOOL CHPMCDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect rc;
GetDlgItem(IDC_STATICVIEW)->GetWindowRect(rc);
GetDlgItem(IDC_STATICVIEW)->ShowWindow(SW_HIDE);
ScreenToClient(rc);
m_wndPreview.Create(rc, this, IDC_STATICVIEW);
m_wndPreview.Init(Pool3dCmdDll.ModuleResourceInstance(), 3, 5, 0, NULL, false);
if (!m_sDwgFile.IsEmpty())
ShowBlockRecords();
return TRUE;
}
void CHPMCDlg::ShowBlockRecords()
{
CString sName;
CStringArray arRecNames;
AcDbDatabase db(false);
Acad::ErrorStatus es = db.readDwgFile(m_sDwgFile);
if (es == Acad::eOk)
{
AcDbBlockTable* pTbl = NULL;
if (Acad::eOk == db.getBlockTable(pTbl, AcDb::kForRead))
{
AcDbBlockTableIterator* pIt = NULL;
pTbl->newIterator(pIt);
if (pIt != NULL)
{
for (pIt->start();!pIt->done();pIt->step())
{
AcDbBlockTableRecord* pRec = NULL;
if (Acad::eOk == pIt->getRecord(pRec, AcDb::kForRead))
{
LPCTSTR pszName = NULL;
pRec->getName(pszName);
sName = pszName;
if (sName.Find(_T("MODEL")) != -1 ||
sName.Find(_T("PAPER")) != -1)
{
}
else
{
arRecNames.Add(pszName);
m_wndNameList.AddString(pszName);
}
pRec->close();
}
}
delete pIt;
}
pTbl->close();
}
}
for (int i = 0;i <arRecNames.GetSize();i++)
{
sName = arRecNames.GetAt(i);
if (i == 0)
m_sRecName2D = sName;
m_wndPreview.Add(m_sDwgFile, sName, sName,false);
}
}
LRESULT CHPMCDlg::OnViewItemSel(WPARAM wparam, LPARAM lparam)
{
int nTrueIndex = (int)wparam;
CString sDwgFile, sRecName2D, sName;
if (m_wndPreview.GetCurSelRec(sDwgFile, sRecName2D))
{
int nItem = m_wndNameList.FindString(0, sRecName2D);
if (nItem != -1)
{
m_wndNameList.SetCurSel(nItem);
}
}
return 0;
}
void CHPMCDlg::OnBnClickedOk()
{
m_sRecName2D = _T("");
if (m_wndPreview.GetCurSelRec(m_sDwgFile, m_sRecName2D))
{
CDialog::OnOK();
}
}
AcDbObjectId CHPMCDlg::GetSelBlockRecord(CString& sBlockName) const
{
AcDbObjectId idBlock2d;
CString sBlockName2d = m_sRecName2D;
sBlockName = m_sRecName2D;
//先从当前db查
AcDbBlockTable *pBT = NULL;
AcDbDatabase *pDbCur = acdbCurDwg();
pDbCur->getSymbolTable(pBT, AcDb::kForRead);
if (pBT == NULL)
{
return idBlock2d;
}
if (Acad::eOk == pBT->getAt(sBlockName2d, idBlock2d))
{
pBT->close();
return idBlock2d;
}
else
{
pBT->close();
}
//加载
CString sDwgFile = _T("");
KTSetting::GetKTPsPath(sDwgFile);
sDwgFile += _T("Support\\Cells\\剖面门窗.dwg");
AcDbDatabase *pDb = new AcDbDatabase(false);
ASSERT(pDB != NULL);
if (pDb->readDwgFile(sDwgFile, AcDbDatabase::kForReadAndAllShare) != Acad::eOk)
{
delete pDb;
return idBlock2d;
}
pDb->getSymbolTable(pBT, AcDb::kForRead);
if (pBT == NULL)
{
delete pDb;
return idBlock2d;
}
AcDbObjectId idBlock;
pBT->getAt(sBlockName2d, idBlock);
pBT->close();
AcDbDatabase *pTempDb = NULL;
pDb->wblock(pTempDb, idBlock);
delete pDb;
if (pTempDb == NULL) return FALSE;
AcDbDatabase *pWorkDb = acdbHostApplicationServices()->workingDatabase();
if (pWorkDb->insert(idBlock2d, sBlockName2d, pTempDb) != Acad::eOk)
{
delete pTempDb;
return idBlock2d;
}
delete pTempDb;
return idBlock2d;
}