#include "stdafx.h" #include "TJSJDlg.h" #include "AecDbEarthWorm.h" #include "KTCADUtilityEx.h" #include "AcDbX3dSolid.h" #include "AecDbX3dPart.h" #include "UITools.h" #include "BimInfoDlg.h" IMPLEMENT_DYNAMIC(CTJSJDlg, CDialog) CTJSJDlg::CTJSJDlg(CWnd* pParent /*=NULL*/) : CDialog(CTJSJDlg::IDD, pParent) , m_nShape(0) , m_dH(3.0) , m_dW(4.0) , m_dL(4.0) , m_dT(0.24) , m_dX(6.0) , m_dS(0.4) { UIDataCache::Read(_T("%i%d%d%d%d%d%s"), _T("CTJSJDlg") , &m_nShape , &m_dH , &m_dW , &m_dL , &m_dT , &m_dX , &m_sCrossSectionScr); } CTJSJDlg::~CTJSJDlg() { } void CTJSJDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Radio(pDX, IDC_RADIO1, m_nShape); DDX_Text(pDX, IDC_EDIT1, m_dH); DDX_Text(pDX, IDC_EDIT2, m_dW); DDX_Text(pDX, IDC_EDIT10, m_dL); DDX_Text(pDX, IDC_EDIT34, m_dT); DDX_Text(pDX, IDC_EDIT36, m_dX); DDX_Control(pDX, IDC_EDIT10, m_wndL); DDX_Control(pDX, IDC_STATIC_W, m_wndStaticW); DDX_Text(pDX, IDC_EDIT35, m_dS); } BEGIN_MESSAGE_MAP(CTJSJDlg, CDialog) ON_BN_CLICKED(IDC_RADIO1, &CTJSJDlg::OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2, &CTJSJDlg::OnBnClickedRadio2) ON_BN_CLICKED(IDOK, &CTJSJDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CTJSJDlg::OnBnClickedButton1) END_MESSAGE_MAP() void CTJSJDlg::OnBnClickedRadio1() { UpdateData(); if (m_nShape == 0) { m_wndStaticW.SetWindowText(_T("竖井宽度 W:")); m_wndL.EnableWindow(TRUE); } } void CTJSJDlg::OnBnClickedRadio2() { UpdateData(); if (m_nShape == 1) { m_wndStaticW.SetWindowText(_T("竖井外径 W:")); m_wndL.EnableWindow(FALSE); } } BOOL CTJSJDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); if (m_nShape == 0) OnBnClickedRadio1(); else OnBnClickedRadio2(); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("竖井")); return TRUE; } void CTJSJDlg::OnBnClickedOk() { UpdateData(); if (m_dH < 0.2 || m_dW < 0.1 || m_dL < 0.1) { AfxMessageBox(_T("竖井尺寸太小!请重新输入参数!")); } UIDataCache::Write(_T("%i%d%d%d%d%d%s"), _T("CTJSJDlg") , &m_nShape , &m_dH , &m_dW , &m_dL , &m_dT , &m_dX , &m_sCrossSectionScr); OnOK(); } extern void GetEarthWormHeightWidthAndThick(LPCTSTR pszCrossSectionScr,AcGePoint2d& ptHW,AcGePoint2d& ptOIW); int CTJSJDlg::GetX3dPart(AecDbX3dPart*& pPart) { AcGePoint2d ptHW,ptOIW; GetEarthWormHeightWidthAndThick(m_sCrossSectionScr,ptHW,ptOIW); double dHeight = ptHW.x; double dWidth = ptHW.y; double dOutW = ptOIW.x; double dIntW = ptOIW.y; if (pPart != NULL) { pPart->RemoveAll3dSolidRec(); } else { pPart = new AecDbX3dPart; } AcGePoint3d ptOrg; ptOrg.set(m_dX,0,dHeight * 0.5); AcGeVector3d vtZ = AcGeVector3d::kZAxis; ptOrg.z += m_dH * 0.5; AcDbX3dSolid* pXSolid = NULL; if (m_nShape == 0) { //L,W,t,H 长宽,厚度 pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kRectTube, ptOrg, vtZ, 4, m_dL, m_dW, m_dT, m_dH); pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite); ptOrg.set(m_dX,0,dHeight * 0.5); ptOrg.z -= 0.5 * m_dS; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox, ptOrg, vtZ, 3, m_dL - 2 * m_dT, m_dW - 2 * m_dT, m_dS); pPart->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true); } else { ////r,t,H pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kPipe, ptOrg, vtZ, 3, m_dW * 0.5, m_dT, m_dH); pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite); pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kPipe, ptOrg, vtZ, 3, (m_dW - 2.0 * m_dT) * 0.5, m_dT, m_dH); pPart->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true); } pPart->SetOrgPoint( ptOrg ); pPart->SetAxis(X,AcGeVector3d::kXAxis); pPart->SetAxis(Y,AcGeVector3d::kYAxis); pPart->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pPart->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pPart->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pPart->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pPart->GetSpecialtyData()->SetAt(_T("m_dT"),m_dT); pPart->GetSpecialtyData()->SetAt(_T("m_dX"),m_dX); pPart->GetSpecialtyData()->SetAt(_T("m_nShape"),m_nShape); pPart->GetSpecialtyData()->SetAt(_T("m_sCrossSectionScr"),m_sCrossSectionScr); pPart->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); return TRUE; } void CTJSJDlg::OnBnClickedButton1() { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("竖井")); }