243 lines
5.2 KiB
C++
243 lines
5.2 KiB
C++
#include "stdafx.h"
|
|
#include "CSXHDlg.h"
|
|
#include "CoreTools.h"
|
|
#include "CXSHSIZEDlg.h"
|
|
#include "AecDbEwEquipment.h"
|
|
#include "AcGiViewDraw.h"
|
|
#include "dbobjptr.h"
|
|
#include "AecDbEwEquipment.h"
|
|
#include <AecDbEarthWorm.h>
|
|
|
|
namespace
|
|
{
|
|
template <typename T>
|
|
void setData(AecEqui::XPrimData* pXPData, void* pData)
|
|
{
|
|
::Sleep(30);
|
|
pXPData->m_nID = ::GetTickCount();
|
|
switch (pXPData->m_eType)
|
|
{
|
|
case AecEqui::kExtrude:
|
|
case AecEqui::kRevolve:
|
|
pXPData->m_nSize = ((AecEqui::XBuffer*)pData)->nSize;
|
|
if (pXPData->m_nSize > 0)
|
|
{
|
|
pXPData->m_pData = new byte[pXPData->m_nSize];
|
|
::memcpy(pXPData->m_pData, ((AecEqui::XBuffer*)pData)->pData, pXPData->m_nSize);
|
|
}
|
|
break;
|
|
default:
|
|
pXPData->m_pData = new T;
|
|
::memcpy(pXPData->m_pData, pData, sizeof(T));
|
|
pXPData->m_nSize = sizeof(T);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void clearData(AecEqui::XPrimData& data)
|
|
{
|
|
switch (data.m_eType)
|
|
{
|
|
case AecEqui::kExtrude:
|
|
case AecEqui::kRevolve:
|
|
DELETE_ARR_(data.m_pData);
|
|
break;
|
|
default:
|
|
DELETE_PTR(data.m_pData);
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
IMPLEMENT_DYNAMIC(CSXHDlg, CDialog)
|
|
|
|
CSXHDlg::CSXHDlg(CWnd* pParent)
|
|
: CDialog(IDD_DLG_XSH, pParent)
|
|
, m_iType(0)
|
|
, m_iLayout(0)
|
|
, m_dDist(1)
|
|
, m_dWallDist(670)
|
|
, m_dProtectR(3)
|
|
, m_Sizes(0)
|
|
, m_s2DSel(_T(""))
|
|
{
|
|
}
|
|
|
|
CSXHDlg::~CSXHDlg()
|
|
{
|
|
}
|
|
|
|
void CSXHDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
DDX_Control(pDX, IDC_LIST_SIZE, m_ListBoxSize);
|
|
DDX_Radio(pDX, IDC_RADIO_UP, m_iType);
|
|
DDX_Radio(pDX, IDC_RADIO_LAYOUT_LINE, m_iLayout);
|
|
DDX_Text(pDX, IDC_EDIT_DIST, m_dDist);
|
|
DDX_Text(pDX, IDC_EDIT_WALLDIST, m_dWallDist);
|
|
DDX_Text(pDX, IDC_EDIT_RADIUS, m_dProtectR);
|
|
}
|
|
|
|
BOOL CSXHDlg::OnInitDialog()
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
if (!m_wndViewCtrl2d.SubclassDlgItem(IDC_PREVIEW_2D, this))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
initListData();
|
|
|
|
initLayoutDist();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CSXHDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CSXHDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BTN_Size, &CSXHDlg::OnBnClickedSize)
|
|
ON_BN_CLICKED(IDC_BTN_SEL_2D, &CSXHDlg::OnBnClickedBtnSel2d)
|
|
ON_BN_CLICKED(IDC_RADIO_UP, &CSXHDlg::OnBnClickedRadioXHSSize)
|
|
ON_BN_CLICKED(IDC_RADIO_LEVEL, &CSXHDlg::OnBnClickedRadioXHSSize)
|
|
ON_BN_CLICKED(IDC_RADIO_LAYOUT_LINE, &CSXHDlg::OnBnClickedRadioXHSLayoutStyle)
|
|
ON_BN_CLICKED(IDC_RADIO_LAYOUT_FREE, &CSXHDlg::OnBnClickedRadioXHSLayoutStyle)
|
|
ON_BN_CLICKED(IDC_RADIO_LAYOUT_DIST, &CSXHDlg::OnBnClickedRadioXHSLayoutStyle)
|
|
END_MESSAGE_MAP()
|
|
|
|
void CSXHDlg::OnBnClickedOk()
|
|
{
|
|
if (!UpdateData(TRUE)) return;
|
|
|
|
int idx = m_ListBoxSize.GetCurSel();
|
|
if (idx == -1) return;
|
|
|
|
CString str;
|
|
int nLen = m_ListBoxSize.GetTextLen(idx);
|
|
m_ListBoxSize.GetText(idx, str.GetBuffer(nLen));
|
|
str.ReleaseBuffer();
|
|
|
|
m_sListBoxValue = str;
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CSXHDlg::OnBnClickedBtnSel2d()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
CString sFile(FilePath::GetRootDir());
|
|
sFile += _T("\\TK\\Customer\\图库中心\\图块库\\给排水图库\\消火栓.dwg");
|
|
|
|
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);
|
|
|
|
int idx = m_ListBoxSize.GetCurSel();
|
|
if (idx == -1) return;
|
|
|
|
CString ss;
|
|
int nLen = m_ListBoxSize.GetTextLen(idx);
|
|
m_ListBoxSize.GetText(idx, ss.GetBuffer(nLen));
|
|
ss.ReleaseBuffer();
|
|
|
|
vec.clear();
|
|
CoreTools::SplitString(ss, _T('*'), vec);
|
|
if (vec.size() < 1) return;
|
|
|
|
AcGeScale3d scale(TypeConvert::s2d(vec[0]), TypeConvert::s2d(vec[1]), 1.);
|
|
scale *= .8;
|
|
pRef->setScaleFactors(scale);
|
|
|
|
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 CSXHDlg::OnBnClickedSize()
|
|
{
|
|
CXSHSIZEDlg dlg(m_Sizes);
|
|
dlg.DoModal();
|
|
|
|
m_ListBoxSize.ResetContent();
|
|
for (size_t i(0); i < m_Sizes.size(); ++i)
|
|
m_ListBoxSize.AddString(m_Sizes[i]);
|
|
}
|
|
|
|
void CSXHDlg::OnBnClickedRadioXHSSize()
|
|
{
|
|
return;
|
|
}
|
|
|
|
void CSXHDlg::OnBnClickedRadioXHSLayoutStyle()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
initLayoutDist();
|
|
|
|
return;
|
|
}
|
|
|
|
void CSXHDlg::initListData()
|
|
{
|
|
m_ListBoxSize.ResetContent();
|
|
m_ListBoxSize.AddString(_T("650*200"));
|
|
m_ListBoxSize.AddString(_T("650*320"));
|
|
m_ListBoxSize.AddString(_T("750*240"));
|
|
m_ListBoxSize.SetCurSel(0);
|
|
}
|
|
|
|
void CSXHDlg::initLayoutDist()
|
|
{
|
|
CWnd* pWnd(NULL);
|
|
if (m_iLayout == 0 || m_iLayout == 1)
|
|
{
|
|
pWnd = GetDlgItem(IDC_EDIT_DIST);
|
|
if (pWnd) pWnd->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
pWnd = GetDlgItem(IDC_EDIT_DIST);
|
|
if (pWnd) pWnd->EnableWindow(TRUE);
|
|
}
|
|
}
|