206 lines
4.0 KiB
C++
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;
|
|
} |