197 lines
4.7 KiB
C++
197 lines
4.7 KiB
C++
#include "stdafx.h"
|
|
#include "CLoadEquDlg.h"
|
|
#include "AecDbEwEquipment.h"
|
|
#include "CoreTools.h"
|
|
#include "AcGiViewDraw.h"
|
|
|
|
IMPLEMENT_DYNAMIC(CLoadEquDlg, CDialog)
|
|
|
|
CLoadEquDlg::CLoadEquDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(IDD_LOADEQUDLG, pParent)
|
|
{
|
|
m_pEqu = NULL;
|
|
m_dBoxW = 1;
|
|
m_dBoxL = 1;
|
|
m_b2dScaleFit3dExt = true;
|
|
m_pXDataMap = NULL;
|
|
}
|
|
|
|
CLoadEquDlg::~CLoadEquDlg()
|
|
{
|
|
}
|
|
|
|
void CLoadEquDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST1, m_wndListMapData);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CLoadEquDlg, CDialog)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CLoadEquDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_BUTTON9, &CLoadEquDlg::OnBnClickedButton9)
|
|
ON_BN_CLICKED(IDOK, &CLoadEquDlg::OnBnClickedOk)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
void CLoadEquDlg::SetEquPath(LPCTSTR psz2DPathDwg, LPCTSTR pszFull3DPathEqu,bool b2dScaleFit3dExt)
|
|
{
|
|
m_s2DPathDwg = psz2DPathDwg;
|
|
m_s3DPathEqu = pszFull3DPathEqu;
|
|
m_b2dScaleFit3dExt = b2dScaleFit3dExt;
|
|
}
|
|
|
|
void CLoadEquDlg::SetXDataMap(AecDbObjXDataMap &xDataMap)
|
|
{
|
|
m_pXDataMap = &xDataMap;
|
|
}
|
|
|
|
AecDbEwEquipment* CLoadEquDlg::GetSelectEqu(AcDbObjectId& idRec2d,bool bGetRec3d) const
|
|
{
|
|
if (m_pEqu != NULL)
|
|
{
|
|
m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_PATH_, m_s2DSel);
|
|
m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_WIDTH_, m_dBoxW);
|
|
m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_LENGTH_, m_dBoxL);
|
|
|
|
if (m_b2dScaleFit3dExt)
|
|
{
|
|
m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_DOCSCALE_, FALSE);
|
|
}
|
|
else//走图纸比例 绘制
|
|
{
|
|
m_pEqu->GetSpecialtyData()->SetAt(AecDbEwEquipment::_DRAW_2D_BY_DOCSCALE_, TRUE);
|
|
}
|
|
|
|
if (bGetRec3d)
|
|
{
|
|
CString sDwg(_T("")), sBlk(_T(""));
|
|
if (m_pEqu->GetSpecialtyData()->GetAt(AecDbEwEquipment::_DRAW_2D_BY_BLK_PATH_, sDwg))
|
|
{
|
|
idRec2d = CoreTools::loadBlockFromDwg(sDwg, sBlk);
|
|
}
|
|
}
|
|
}
|
|
return m_pEqu;
|
|
}
|
|
|
|
BOOL CLoadEquDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
if (!m_wndViewCtrl2d.SubclassDlgItem(IDC_STATIC_2D, this))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if (!m_wndViewCtrl3d.SubclassDlgItem(IDC_STATIC_3D, this))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
m_wndListMapData.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW | LVS_EX_BORDERSELECT);
|
|
|
|
LPCTSTR lpszCols[] = { _T("名称"),_T("数据"),_T("KEY"),NULL};
|
|
int lnColumns[] = { 120,240,0,0};
|
|
|
|
m_wndListMapData.InsertColumn(0, lpszCols[0], LVCFMT_LEFT, lnColumns[0]);
|
|
m_wndListMapData.InsertColumn(1, lpszCols[1], LVCFMT_LEFT, lnColumns[1]);
|
|
m_wndListMapData.InsertColumn(2, lpszCols[2], LVCFMT_LEFT, lnColumns[2]);
|
|
|
|
ShowXDataMap();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//显示用户需要交互的数据列表
|
|
void CLoadEquDlg::ShowXDataMap()
|
|
{
|
|
|
|
}
|
|
|
|
void CLoadEquDlg::OnBnClickedButton1()
|
|
{
|
|
CString sFile(FilePath::GetRootDir());
|
|
sFile += m_s2DPathDwg;
|
|
|
|
m_s2DSel = CoreTools::selectBlockByDWG(sFile, _T(""), m_s2DSel);
|
|
|
|
AcDbDatabase *_pDb = new AcDbDatabase(false);
|
|
std::shared_ptr<AcDbDatabase> pDb(_pDb);
|
|
if (pDb->readDwgFile(sFile, AcDbDatabase::kForReadAndAllShare) != Acad::eOk) return;
|
|
|
|
AcDbBlockTable *_pBT = NULL;
|
|
pDb->getSymbolTable(_pBT, AcDb::kForRead);
|
|
if (!_pBT) return;
|
|
AcDbObjectId idBT(_pBT->objectId());
|
|
_pBT->close();
|
|
|
|
AcDbBlockTablePointer pBT(idBT, AcDb::kForRead);
|
|
if (pBT.openStatus() != Acad::eOk) return;
|
|
|
|
std::vector<CString> vec;
|
|
CoreTools::SplitString(m_s2DSel, _T('|'), vec);
|
|
if (vec.size() < 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AcDbObjectId idBlock;
|
|
pBT->getAt(vec.at(1), idBlock);
|
|
pBT->close();
|
|
|
|
AcDbBlockReference *pRef = new AcDbBlockReference();
|
|
pRef->setBlockTableRecord(idBlock);
|
|
pRef->setPosition(AcGePoint3d::kOrigin);
|
|
pRef->setRotation(0.0);
|
|
|
|
pRef->setScaleFactors(AcGeScale3d(.8));
|
|
|
|
AcDbExtents ext;
|
|
pRef->getGeomExtents(ext);
|
|
|
|
m_wndViewCtrl2d.clearAll();
|
|
m_wndViewCtrl2d.init(true);
|
|
m_wndViewCtrl2d.SetOrbitFlag(OBF_ZOOM);
|
|
m_wndViewCtrl2d.InitFromCurrentView2D(ext, true);
|
|
|
|
m_wndViewCtrl2d.Add(pRef);
|
|
|
|
m_wndViewCtrl2d.view()->invalidate();
|
|
m_wndViewCtrl2d.Invalidate();
|
|
m_wndViewCtrl2d.RedrawWindow();
|
|
}
|
|
|
|
void CLoadEquDlg::OnBnClickedButton9()
|
|
{
|
|
DELETE_PTR(m_pEqu);
|
|
m_pEqu = CoreTools::selectEquipment(m_s3DPathEqu, _T(""));
|
|
if (!m_pEqu) return;
|
|
|
|
AcGiViewDraw dc;
|
|
m_pEqu->Draw3d(dc);
|
|
AcDbExtents exts;
|
|
m_pEqu->getGeomExtents(exts);
|
|
|
|
m_wndViewCtrl3d.clearAll();
|
|
m_wndViewCtrl3d.init(true);
|
|
m_wndViewCtrl3d.SetOrbitFlag(OBF_PAN | OBF_ZOOM | OBF_COTE);
|
|
m_wndViewCtrl3d.InitFromCurrentView3D(exts, true);
|
|
|
|
m_wndViewCtrl3d.Add(m_pEqu);
|
|
|
|
m_wndViewCtrl3d.view()->invalidate();
|
|
m_wndViewCtrl3d.Invalidate();
|
|
m_wndViewCtrl3d.RedrawWindow();
|
|
|
|
m_dBoxW = exts.maxPoint().x - exts.minPoint().x;
|
|
m_dBoxL = exts.maxPoint().y - exts.minPoint().y;
|
|
}
|
|
|
|
void CLoadEquDlg::OnBnClickedOk()
|
|
{
|
|
//重新设置用户数据列表
|
|
|
|
|
|
CDialog::OnOK();
|
|
}
|