#include "stdafx.h" #include "TJLZDlg.h" #include "KTCADUtilityEx.h" #include "AcDbX3dSolid.h" #include "AecDbX3dPart.h" #include "UITools.h" #include "BimInfoDlg.h" IMPLEMENT_DYNAMIC(CTJLZDlg, CDialog) CTJLZDlg::CTJLZDlg(CWnd* pParent /*=NULL*/) : CDialog(CTJLZDlg::IDD, pParent) , m_nKind(0) , m_dW(0.6) , m_dL(0.6) , m_dH(3.0) , m_bCheckCS(FALSE) { UIDataCache::Read(_T("%i%d%d%d"), _T("CTJLZDlg") , &m_nKind , &m_dW , &m_dL , &m_dH); } CTJLZDlg::~CTJLZDlg() { } void CTJLZDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Radio(pDX, IDC_RADIO1, m_nKind); DDX_Text(pDX, IDC_EDIT1, m_dW); DDX_Text(pDX, IDC_EDIT3, m_dL); DDX_Text(pDX, IDC_EDIT4, m_dH); DDX_Check(pDX, IDC_CHECK1, m_bCheckCS); DDX_Control(pDX, IDC_STATIC_W, m_wndStW); DDX_Control(pDX, IDC_EDIT3, m_wndEditL); } BEGIN_MESSAGE_MAP(CTJLZDlg, CDialog) ON_BN_CLICKED(IDOK, &CTJLZDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_CHECK1, &CTJLZDlg::OnBnClickedCheck1) ON_BN_CLICKED(IDC_RADIO1, &CTJLZDlg::OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2, &CTJLZDlg::OnBnClickedRadio2) ON_BN_CLICKED(IDC_BUTTON1, &CTJLZDlg::OnBnClickedButton1) END_MESSAGE_MAP() BOOL CTJLZDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); if (m_nKind == 0) { CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("柱子")); } else { CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("梁")); } return TRUE; } void CTJLZDlg::OnBnClickedOk() { UpdateData(TRUE); UIDataCache::Write(_T("%i%d%d%d"), _T("CTJLZDlg") , &m_nKind , &m_dW , &m_dL , &m_dH); OnOK(); } int CTJLZDlg::GetX3dPart(AecDbX3dPart*& pPart) { if (pPart != NULL) { pPart->RemoveAll3dSolidRec(); } else { pPart = new AecDbX3dPart; } AcGePoint3d ptOrg; ptOrg.set(0,0,0.0); AcGeVector3d vtZ = AcGeVector3d::kZAxis; AcDbX3dSolid* pXSolid = NULL; if (m_nKind == 0)//柱子 { if (m_bCheckCS) { ptOrg.z += 0.5 * m_dH; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg,vtZ,2,m_dW,m_dH); pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite); } else { //BOX LxWxH ptOrg.z += 0.5 * m_dH; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite); } } else//梁 { vtZ = AcGeVector3d::kYAxis; ptOrg.z += 0.5 * m_dH; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite); } 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_nKind"),m_nKind); pPart->GetSpecialtyData()->SetAt(_T("m_bCheckCS"),m_bCheckCS); pPart->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); return TRUE; } void CTJLZDlg::OnBnClickedCheck1() { UpdateData(); if (m_nKind == 0) { if (m_bCheckCS)//圆柱 { m_wndStW.SetWindowText(_T("横截面半径 R:")); m_wndEditL.EnableWindow(FALSE); } else { m_wndStW.SetWindowText(_T("横截面宽 W:")); m_wndEditL.EnableWindow(TRUE); } } else { m_wndStW.SetWindowText(_T("横截面宽 W:")); m_wndEditL.EnableWindow(TRUE); } } void CTJLZDlg::OnBnClickedRadio1() { UpdateData(); OnBnClickedCheck1(); } void CTJLZDlg::OnBnClickedRadio2() { UpdateData(); OnBnClickedCheck1(); } void CTJLZDlg::OnBnClickedButton1() { UpdateData(); if (m_nKind == 0) { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("柱子")); } else { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("梁")); } }