193 lines
4.0 KiB
C++
193 lines
4.0 KiB
C++
#include "stdafx.h"
|
|
#include "HZSCDlg.h"
|
|
#include "gltkdlg.h"
|
|
#include "acpolylinejig.h"
|
|
#include "KTCADUtilityEx.h"
|
|
#include "AecDbExtendedEntity.h"
|
|
#include "CoreTools.h"
|
|
#include "AecDb3dRoadAxisLine.h"
|
|
|
|
IMPLEMENT_DYNAMIC(CHZSCDlg, CDialog)
|
|
|
|
CHZSCDlg::CHZSCDlg(CWnd* pParent /*=nullptr*/)
|
|
: CDialog(IDD_HZSC_DLG, pParent)
|
|
, m_dEl(0)
|
|
, m_sMaterial(_T("钢筋混凝土"))
|
|
, m_sUse(_T("进水"))
|
|
, m_pReg(NULL)
|
|
{
|
|
|
|
}
|
|
|
|
CHZSCDlg::~CHZSCDlg()
|
|
{
|
|
DELETE_PTR(m_pReg);
|
|
}
|
|
|
|
void CHZSCDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dEl);
|
|
DDX_Text(pDX, IDC_EDIT2, m_sMaterial);
|
|
DDX_Text(pDX, IDC_EDIT3, m_sUse);
|
|
DDX_Control(pDX, IDC_VIEW_STA, m_wndViewCtrl);
|
|
}
|
|
|
|
BOOL CHZSCDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
GET_CACHE(CHZSCDlg, %f%s%s, &m_dEl, &m_sMaterial, &m_sUse);
|
|
UpdateData(FALSE);
|
|
|
|
ShowCurSection();
|
|
// 子类化控件对象
|
|
//if (!m_wndViewCtrl.SubclassDlgItem(IDC_STATIC_FRM, this))
|
|
//{
|
|
// return FALSE;
|
|
//}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CHZSCDlg::ShowCurSection()
|
|
{
|
|
if (!m_pReg) return;
|
|
|
|
m_wndViewCtrl.clearAll();
|
|
m_wndViewCtrl.init(true);
|
|
m_wndViewCtrl.SetOrbitFlag(OBF_PAN | OBF_ZOOM | OBF_COTE);
|
|
|
|
AcDbExtents exts;
|
|
m_pReg->getGeomExtents(exts);
|
|
m_wndViewCtrl.InitFromCurrentView2D(exts, true);
|
|
m_wndViewCtrl.Add(m_pReg);
|
|
m_wndViewCtrl.view()->invalidate();
|
|
m_wndViewCtrl.Invalidate();
|
|
m_wndViewCtrl.RedrawWindow();
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CHZSCDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CHZSCDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CHZSCDlg::OnBnClickedButton1)
|
|
END_MESSAGE_MAP()
|
|
|
|
void CHZSCDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData(TRUE);
|
|
SET_CACHE(CHZSCDlg, %f%s%s, m_dEl, m_sMaterial, m_sUse);
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
AcDbRegion* CHZSCDlg::GetSelectRegion()
|
|
{
|
|
if (!m_pReg) return NULL;
|
|
return (AcDbRegion*)m_pReg->clone();
|
|
}
|
|
|
|
void CHZSCDlg::Start()
|
|
{
|
|
CAcModuleResourceOverride myResources;
|
|
|
|
CHZSCDlg dlg;
|
|
if (dlg.DoModal() != IDOK) return;
|
|
|
|
AcDbRegion *pReg = dlg.GetSelectRegion();
|
|
if (pReg == NULL)
|
|
{
|
|
AfxMessageBox(_T("没有选择截面!请选择槽壁截面!"));
|
|
return;
|
|
}
|
|
|
|
AcPolylineJig jig;
|
|
if (!jig.DoIt())
|
|
{
|
|
DELETE_PTR(pReg);
|
|
return;
|
|
}
|
|
|
|
AcDbObjectId id = jig.GetRoadAxisLineId();
|
|
double w(.0);
|
|
|
|
AecDbExtendedEntity *pFl = new AecDbExtendedEntity();
|
|
pFl->SetSection(pReg, AcGePoint3d::kOrigin);
|
|
pFl->SetAt(_T("YXCB"), TRUE);
|
|
|
|
AcDbExtents ext;
|
|
pReg->getGeomExtents(ext);
|
|
w = (ext.maxPoint().x - ext.minPoint().x) * .5;
|
|
|
|
DELETE_PTR(pReg);
|
|
OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDb3dRoadAxisLine, pLine)
|
|
{
|
|
if (!pLine) return;
|
|
|
|
AcDbPolyline* pPl = pLine->ConvertTo2dPline();
|
|
if (pPl != NULL)
|
|
{
|
|
pPl->setElevation(dlg.m_dEl);
|
|
pFl->SetBaseCurve(pPl);
|
|
delete pPl;
|
|
}
|
|
|
|
pFl->SetAt(KEY_2DSTYLE, 2);
|
|
pFl->SetAt(KEY_SECSHAPE, 2);
|
|
pFl->SetAt(KEY_DRAWGRAD, 0);
|
|
pFl->SetAt(PIPE_DN, w);
|
|
pFl->SetAt(PIPE_D, w);
|
|
pFl->SetAt(KEY_MATERIAL, dlg.m_sMaterial);
|
|
pFl->SetAt(KEY_FORUSE, dlg.m_sUse);
|
|
|
|
pLine->erase();
|
|
}
|
|
OPENOBJ_END()
|
|
CoreTools::AddToModelSpace(pFl);
|
|
}
|
|
|
|
void CHZSCDlg::inplace(AcDbEntity * pEnt)
|
|
{
|
|
if (!pEnt) return;
|
|
AecDbExtendedEntity *pExtEnt = AecDbExtendedEntity::cast(pEnt);
|
|
if (!pExtEnt) return;
|
|
|
|
AcDbRegion *pReg = pExtEnt->GetSection();
|
|
|
|
CAcModuleResourceOverride myResources;
|
|
CHZSCDlg dlg;
|
|
dlg.m_pReg = (AcDbRegion*)pReg->clone();
|
|
DELETE_PTR(pReg);
|
|
dlg.m_dEl = pExtEnt->getElevation();
|
|
|
|
pExtEnt->GetAt(KEY_MATERIAL, dlg.m_sMaterial);
|
|
pExtEnt->GetAt(KEY_FORUSE, dlg.m_sUse);
|
|
|
|
if (dlg.DoModal() != IDOK) return;
|
|
|
|
pReg = dlg.GetSelectRegion();
|
|
if (!pReg) return;
|
|
|
|
AcDbExtents ext;
|
|
pReg->getGeomExtents(ext);
|
|
double w = (ext.maxPoint().x - ext.minPoint().x) * .5;
|
|
|
|
pExtEnt->SetAt(PIPE_DN, w);
|
|
pExtEnt->SetAt(PIPE_D, w);
|
|
pExtEnt->SetSection(pReg, AcGePoint3d::kOrigin);
|
|
DELETE_PTR(pReg);
|
|
pExtEnt->setElevation(dlg.m_dEl);
|
|
|
|
}
|
|
|
|
void CHZSCDlg::OnBnClickedButton1()
|
|
{
|
|
CGLTKDlg dlg(CGLTKDlg::eSelect, _T("poolstandard.db"), _T("standard"), CGLTKDlg::drawRegion);
|
|
if (dlg.DoModal() != IDOK) return;
|
|
|
|
CString ss(_T(""));
|
|
dlg.GetCrossSectionScr(ss);
|
|
|
|
m_pReg = CoreTools::StringToRegion(ss);
|
|
|
|
ShowCurSection();
|
|
}
|