171 lines
3.4 KiB
C++
171 lines
3.4 KiB
C++
#include "stdafx.h"
|
|
#include "SWMCXXDlg.h"
|
|
#include "CoreTools.h"
|
|
|
|
IMPLEMENT_DYNAMIC(CSWMCXXDlg, CDialog)
|
|
|
|
CSWMCXXDlg::CSWMCXXDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CSWMCXXDlg::IDD, pParent)
|
|
, m_s3DDwgFile(_T(""))
|
|
{
|
|
m_pDb = NULL;
|
|
}
|
|
|
|
CSWMCXXDlg::~CSWMCXXDlg()
|
|
{
|
|
}
|
|
|
|
void CSWMCXXDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_s3DDwgFile);
|
|
DDX_Control(pDX, IDC_LIST1, m_wndLst3DRecNames);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CSWMCXXDlg, CDialog)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CSWMCXXDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDOK, &CSWMCXXDlg::OnBnClickedOk)
|
|
ON_LBN_SELCHANGE(IDC_LIST1, &CSWMCXXDlg::OnLbnSelchangeList1)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CSWMCXXDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_wndPreview.SubclassDlgItem(IDC_STATICVIEW, this);
|
|
|
|
Show3DRecNames();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CSWMCXXDlg::Show3DRecNames()
|
|
{
|
|
m_wndLst3DRecNames.ResetContent();
|
|
|
|
if (_taccess(m_s3DDwgFile, 0x0) != 0x0) return;
|
|
|
|
if (m_pDb != NULL) delete m_pDb;
|
|
Acad::ErrorStatus es;
|
|
m_pDb = new AcDbDatabase(false);
|
|
if ( Acad::eOk != (es = m_pDb->readDwgFile(m_s3DDwgFile)) )
|
|
{
|
|
delete m_pDb;
|
|
m_pDb = NULL;
|
|
return;
|
|
}
|
|
|
|
if (m_pDb != NULL)
|
|
{
|
|
std::vector<CString> vec;
|
|
CoreTools::enumBlockByDWG(m_pDb, vec);
|
|
|
|
CString sName;
|
|
for (size_t i(0); i < vec.size(); ++i)
|
|
{
|
|
sName = vec[i];
|
|
if (sName.CompareNoCase(_T("*Model_Space")) == 0 ||
|
|
sName.CompareNoCase(_T("*Paper_Space")) == 0 ||
|
|
sName.CompareNoCase(_T("_ArchTick")) == 0)
|
|
{
|
|
}
|
|
else
|
|
{
|
|
m_wndLst3DRecNames.AddString(sName);
|
|
}
|
|
}
|
|
|
|
int nPos = m_wndLst3DRecNames.FindString(0,m_sRecName);
|
|
if (nPos == -1)
|
|
nPos = 0;
|
|
|
|
if (m_wndLst3DRecNames.GetCount() > 0)
|
|
{
|
|
m_wndLst3DRecNames.SetCurSel(nPos);
|
|
OnLbnSelchangeList1();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CSWMCXXDlg::OnBnClickedButton1()
|
|
{
|
|
const TCHAR *pszFilter = _T("dwg文件 (*.dwg;)|*.dwg|");
|
|
CFileDialog dlg(TRUE, _T("dwg"), NULL,OFN_HIDEREADONLY, pszFilter, NULL);
|
|
|
|
TCHAR strFileName[MAX_PATH] = _T("");
|
|
TCHAR strFileTitle[] = _T("选择三维门窗选型图块DWG文件");
|
|
int maxChar = MAX_PATH;
|
|
|
|
dlg.m_ofn.lpstrFile = strFileName;
|
|
dlg.m_ofn.nMaxFile = maxChar;
|
|
dlg.m_ofn.lpstrTitle = strFileTitle;
|
|
|
|
if(dlg.DoModal() != IDOK)
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_s3DDwgFile = dlg.GetPathName();
|
|
UpdateData(FALSE);
|
|
|
|
Show3DRecNames();
|
|
}
|
|
|
|
void CSWMCXXDlg::OnBnClickedOk()
|
|
{
|
|
int nSel = m_wndLst3DRecNames.GetCurSel();
|
|
if (nSel != -1)
|
|
{
|
|
m_wndLst3DRecNames.GetText(nSel,m_sRecName);
|
|
OnOK();
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("请选择三维选型图块!"));
|
|
}
|
|
}
|
|
|
|
void CSWMCXXDlg::OnLbnSelchangeList1()
|
|
{
|
|
int nSel = m_wndLst3DRecNames.GetCurSel();
|
|
if (nSel != -1)
|
|
{
|
|
CString sRecName;
|
|
m_wndLst3DRecNames.GetText(nSel,sRecName);
|
|
|
|
AcDbObjectId id(AcDbObjectId::kNull);
|
|
if (m_pDb == NULL) return;
|
|
|
|
AcDbBlockTable *pTbl(NULL);
|
|
m_pDb->getBlockTable(pTbl, AcDb::kForRead);
|
|
if (pTbl)
|
|
{
|
|
pTbl->getAt(sRecName, id);
|
|
pTbl->close();
|
|
}
|
|
|
|
AcDbBlockReference *pRef = new AcDbBlockReference();
|
|
pRef->setBlockTableRecord(id);
|
|
pRef->setPosition(AcGePoint3d::kOrigin);
|
|
pRef->setRotation(0.0);
|
|
|
|
AcDbExtents ext;
|
|
pRef->getGeomExtents(ext);
|
|
|
|
pRef->setScaleFactors(AcGeScale3d(.8));
|
|
|
|
m_wndPreview.clearAll();
|
|
m_wndPreview.init(true);
|
|
m_wndPreview.SetOrbitFlag(OBF_ORBIT | OBF_ZOOM | OBF_PAN);
|
|
m_wndPreview.InitFromCurrentView3D(ext, true);
|
|
|
|
m_wndPreview.Add(pRef);
|
|
|
|
m_wndPreview.view()->invalidate();
|
|
m_wndPreview.Invalidate();
|
|
m_wndPreview.RedrawWindow();
|
|
}
|
|
}
|