#include "stdafx.h" #include "JBYCDlg.h" #include "AecDbX3dPart.h" #include "UITools.h" #include "BimInfoDlg.h" IMPLEMENT_DYNAMIC(CJBYCDlg, CDialog) CJBYCDlg::CJBYCDlg(CWnd* pParent /*=NULL*/) : CDialog(CJBYCDlg::IDD, pParent) , m_dW(1.0) , m_dH(0.8) , m_dD(80) , m_dt(5) , m_sMaterial(_T("铝合金")) , m_dSpace(20) , m_dWallT(0.36) { UIDataCache::Read(_T("%d%d%d%d%d%d%d%s"), _T("CJBYCDlg") , &m_dW , &m_dH , &m_dD , &m_dt, &m_dt , &m_dSpace,&m_dWallT,&m_sMaterial); } CJBYCDlg::~CJBYCDlg() { } void CJBYCDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_dW); DDX_Text(pDX, IDC_EDIT2, m_dH); DDX_Text(pDX, IDC_EDIT10, m_dD); DDX_Text(pDX, IDC_EDIT35, m_dt); DDX_Text(pDX, IDC_EDIT34, m_sMaterial); DDX_Text(pDX, IDC_EDIT36, m_dSpace); DDX_Text(pDX, IDC_EDIT38, m_dWallT); } BEGIN_MESSAGE_MAP(CJBYCDlg, CDialog) ON_BN_CLICKED(IDOK, &CJBYCDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON2, &CJBYCDlg::OnBnClickedButton2) END_MESSAGE_MAP() BOOL CJBYCDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("百叶窗")); return TRUE; } void CJBYCDlg::OnBnClickedOk() { UpdateData(); if (m_dW < 1.e-3 || m_dH < 1.e-3 || m_dD < 1.e-3 || m_dt < 1.e-3) { AfxMessageBox(_T("百叶窗的尺寸输入不正确!请重新输入!")); return; } UIDataCache::Write(_T("%d%d%d%d%d%d%d%s"), _T("CJBYCDlg") , &m_dW , &m_dH , &m_dD , &m_dt, &m_dt , &m_dSpace,&m_dWallT,&m_sMaterial); OnOK(); } int CJBYCDlg::GetX3dPart(AecDbX3dPart*& pGroup) { if (pGroup != NULL) { pGroup->RemoveAll3dSolidRec(); } else { pGroup = new AecDbX3dPart; } AcGePoint3d ptOrg(0,0,0); AcGeVector3d vtZ = AcGeVector3d::kZAxis; AcDbX3dSolid* pXSolid = NULL; //向外的门,//y 40mm厚 80mm 面宽 //上下左右4个box double dThick = 0.04; double dSlabW = 0.08; ptOrg.z += m_dH / 2.0; ptOrg.z -= dSlabW * 0.5; //上 pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,dThick,dSlabW); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); ptOrg.set(0,0,0); ptOrg.z -= m_dH / 2.0; ptOrg.z += dSlabW * 0.5; //下 pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,dThick,dSlabW); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); //左 ptOrg.set(0,0,0); ptOrg.x -= m_dW * 0.5; ptOrg.x += dSlabW * 0.5; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,dSlabW,dThick,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); //右 ptOrg.set(0,0,0); ptOrg.x += m_dW * 0.5; ptOrg.x -= dSlabW * 0.5; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,dSlabW,dThick,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); int nCount = (int)( (m_dH - 2.0 * dSlabW) / ( AS_MUNIT(m_dD) + AS_MUNIT(m_dSpace) ) );//间隙40mm ptOrg.set(0,0,0); ptOrg.z -= m_dH / 2.0; //ptOrg.x -= m_dW / 2.0; //ptOrg.x += dSlabW; ptOrg.z += dSlabW; ptOrg.z += AS_MUNIT(m_dSpace); vtZ.rotateBy(PI / 6.0,AcGeVector3d::kXAxis); for (int i = 0;i <= nCount;i++) { pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW - 2.0 * dSlabW,AS_MUNIT(m_dt),AS_MUNIT(m_dD)); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); ptOrg.z += dSlabW; ptOrg.z += AS_MUNIT(m_dSpace); } //总挖洞 // ptOrg.set(0,0,0); // pXSolid = new AcDbX3dSolid; // vtZ = AcGeVector3d::kZAxis; // pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,m_dWallT,m_dH); // pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract); ptOrg.set(0,0,0); pGroup->SetOrgPoint( ptOrg ); pGroup->SetAxis(X,AcGeVector3d::kXAxis); pGroup->SetAxis(Y,AcGeVector3d::kYAxis); pGroup->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_dD"),m_dD); pGroup->GetSpecialtyData()->SetAt(_T("m_dt"),m_dt); pGroup->GetSpecialtyData()->SetAt(_T("m_dSpace"),m_dSpace); pGroup->GetSpecialtyData()->SetAt(_T("m_dWallT"),m_dWallT); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); return TRUE; return 0; } void CJBYCDlg::OnBnClickedButton2() { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("百叶窗")); }