Files
envi-code/SourceCode/Code2026/CoreCommand/CLoadEquDlg.cpp
T
2026-09-28 15:28:50 +08:00

197 lines
4.6 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();
}