#include "stdafx.h" #include "SLabDlg.h" #include "AcDbX3dSolid.h" #include "AecDbX3dGroup.h" #include "AecDbX3dPart.h" #include "UITools.h" #include "BimInfoDlg.h" extern Acad::ErrorStatus AddToModelSpace(AcDbEntity* pEnt,AcDbDatabase* pDb ,bool bClose ); extern CString IDCreate(); IMPLEMENT_DYNAMIC(CSLabDlg, CDialog) CSLabDlg::CSLabDlg(CWnd* pParent /*=NULL*/) : CDialog(CSLabDlg::IDD, pParent) , m_dL(4) , m_dW(0.36) , m_dH(3) , m_nType(0) , m_nN(0) , m_sMaterial(_T("")) , m_sSpecType(_T("")) , m_bCheckQ(FALSE) , m_dTLen(0) { UIDataCache::Read(_T("%d%d%d%d%i%i%i%s%s"), _T("CSLabDlg") , &m_dL , &m_dW , &m_dH, &m_dTLen, &m_nN, &m_nType, &m_bCheckQ, &m_sMaterial, &m_sSpecType); m_sPoints = _T(""); } CSLabDlg::~CSLabDlg() { } void CSLabDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_dL); DDX_Text(pDX, IDC_EDIT3, m_dW); DDX_Text(pDX, IDC_EDIT4, m_dH); DDX_Radio(pDX, IDC_RADIO1, m_nType); DDX_Control(pDX, IDC_STATIC_L, m_wndL); DDX_Control(pDX, IDC_STATIC_W, m_wndW); DDX_Control(pDX, IDC_STATIC_H, m_wndH); DDX_Control(pDX, IDC_EDITH8, m_wndEditN); DDX_Control(pDX, IDC_EDIT4, m_wndEditH); DDX_Control(pDX, IDC_EDIT3, m_wndEditW); DDX_Control(pDX, IDC_EDIT1, m_wndEditL); DDX_Control(pDX, IDC_STATIC_N, m_wndN); DDX_Control(pDX, IDC_STATIC_K, m_wndK); DDX_Text(pDX, IDC_EDITH8, m_nN); DDX_CBString(pDX, IDC_COMBO5, m_sMaterial); DDX_Control(pDX, IDC_COMBO5, m_wndComboMa); DDX_CBString(pDX, IDC_COMBO4, m_sSpecType); DDX_Control(pDX, IDC_COMBO4, m_wndComboType); DDX_Control(pDX, IDC_CHECK1, m_wndBtCheck); DDX_Check(pDX, IDC_CHECK1, m_bCheckQ); DDX_Control(pDX, IDC_BUTTON1, m_wndYXWall); DDX_Control(pDX, IDC_STATIC_ZC, m_wndStaZC); DDX_Control(pDX, IDC_EDIT2, m_wndEditZC); DDX_Control(pDX, IDC_STATIC_ZCS, m_wndStaZCS); DDX_Text(pDX, IDC_EDIT2, m_dTLen); DDX_Control(pDX, IDC_STATIC_SP, m_wndStaSp); } BEGIN_MESSAGE_MAP(CSLabDlg, CDialog) ON_BN_CLICKED(IDOK, &CSLabDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_RADIO1, &CSLabDlg::OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2, &CSLabDlg::OnBnClickedRadio2) ON_BN_CLICKED(IDC_RADIO3, &CSLabDlg::OnBnClickedRadio3) ON_BN_CLICKED(IDC_RADIO4, &CSLabDlg::OnBnClickedRadio4) ON_BN_CLICKED(IDC_CHECK1, &CSLabDlg::OnBnClickedCheck1) ON_BN_CLICKED(IDC_BUTTON1, &CSLabDlg::OnBnClickedButton1) ON_EN_CHANGE(IDC_EDIT2, &CSLabDlg::OnEnChangeEdit2) ON_EN_CHANGE(IDC_EDITH8, &CSLabDlg::OnEnChangeEdith8) ON_BN_CLICKED(IDC_BUTTON2, &CSLabDlg::OnBnClickedButton2) END_MESSAGE_MAP() BOOL CSLabDlg::OnInitDialog() { CDialog::OnInitDialog(); m_sMaterial = _T("钢筋混凝土墙"); m_wndComboMa.ResetContent(); m_wndComboMa.AddString(_T("钢筋混凝土墙")); m_wndComboMa.AddString(_T("砖墙")); m_sSpecType = _T("剪力墙"); m_wndComboType.ResetContent(); m_wndComboType.AddString(_T("剪力墙")); m_wndComboType.AddString(_T("轻墙")); UpdateData(FALSE); m_bIsInit = TRUE; switch(m_nType) { case 0: { OnBnClickedRadio1(); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("墙体")); break; } case 1: { OnBnClickedRadio2(); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("平板")); break; } case 2: { OnBnClickedRadio3(); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("料口盖板")); break; } case 3: { OnBnClickedRadio4(); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("井盖")); break; } default: break; } m_bIsInit = FALSE; return TRUE; } void CSLabDlg::OnBnClickedOk() { UpdateData(); if (m_dL < 1.e-10 || m_dW < 1.e-10 || m_dH < 1.e-10) { AfxMessageBox(_T("墙板尺寸数据必须大于0.01米!")); return; } UIDataCache::Write(_T("%d%d%d%d%i%i%i%s%s"), _T("CSLabDlg") , &m_dL , &m_dW , &m_dH, &m_dTLen, &m_nN, &m_nType, &m_bCheckQ, &m_sMaterial, &m_sSpecType); OnOK(); } int CSLabDlg::GetX3dSolidRecs( AecDbX3dGroup*& pGroup) { if (pGroup != NULL) { pGroup->RemoveAll3dSolidRec(); } else { pGroup = new AecDbX3dGroup; } AcGePoint3d ptOrg; ptOrg.set(0,0,0); AcGeVector3d vtZ = AcGeVector3d::kZAxis; AcDbX3dSolid* pXSolid = NULL; X3dSolidRec rec; switch(m_nType) { case 0: case 1://墙板 { pXSolid = new AcDbX3dSolid; if (m_sPoints.IsEmpty()) { pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); } else { pXSolid->CreateExtrude(ptOrg,vtZ,m_sPoints,m_dH,0.0); } rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolUnite; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); pGroup->SetOrgPoint( ptOrg ); pGroup->SetAxis(X,AcGeVector3d::kXAxis); pGroup->SetAxis(Y,AcGeVector3d::kYAxis); pGroup->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType); pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType); pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ); pGroup->GetSpecialtyData()->SetAt(_T("m_sPoints"),m_sPoints); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); break; } case 2://料口盖板 { //先开口 AcGePoint3d ptOrgBk = ptOrg; pGroup->SetOrgPoint( ptOrg ); double dL = m_nN * m_dL + (m_nN - 1) * 0.02; AcGePoint3d ptNewOrg = ptOrg; ptNewOrg.x += 0.5 * ( dL - m_dL); dL += 0.08; //套管 pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kRectTube,ptNewOrg,vtZ,4,dL,m_dW + 0.08,0.02,m_dH + 0.04); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolUnite; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); for (int i = 0;i < m_nN;i++) { pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolUnite; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); ptOrg.x += m_dL; ptOrg.x += 0.02;//20MM } pGroup->SetAxis(X,AcGeVector3d::kXAxis); pGroup->SetAxis(Y,AcGeVector3d::kYAxis); pGroup->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType); pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType); pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); break; } case 3://井盖 { if (m_bCheckQ) { pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolUnite; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); AcGePoint3d ptOrg2; ptOrg2.z += 0.5 * m_dH; ptOrg2.z -= 0.01; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg2,vtZ,3,m_dL - 0.08,m_dW - 0.08,0.02); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolSubtract; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); ptOrg2 = ptOrg; ptOrg2.x -= 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolSubtract; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); ptOrg2 = ptOrg; ptOrg2.x += 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolSubtract; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); } else { pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kPipe,ptOrg,vtZ,3,0.5 * ( m_dL + 0.08 ),0.02,m_dH + 0.02);//壁厚20 rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolUnite; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg,vtZ,2,0.5 * m_dL,m_dH); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolUnite; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); //再减去内部一块 AcGePoint3d ptOrg2; ptOrg2.z += 0.5 * m_dH; ptOrg2.z -= 0.01; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.5 * ( m_dL - 0.04 ),0.02); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolSubtract; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); ptOrg2 = ptOrg; ptOrg2.x -= 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolSubtract; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); ptOrg2 = ptOrg; ptOrg2.x += 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolSubtract; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); } pGroup->SetOrgPoint( ptOrg ); pGroup->SetAxis(X,AcGeVector3d::kXAxis); pGroup->SetAxis(Y,AcGeVector3d::kYAxis); pGroup->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType); pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType); pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); break; } default: break; } return TRUE; } int CSLabDlg::GetX3dPart(AecDbX3dPart*& pGroup) { if (pGroup != NULL) { pGroup->RemoveAll3dSolidRec(); } else { pGroup = new AecDbX3dPart; } AcGePoint3d ptOrg; ptOrg.set(0,0,0); AcGeVector3d vtZ = AcGeVector3d::kZAxis; AcDbX3dSolid* pXSolid = NULL; switch(m_nType) { case 0: case 1://墙板 { pXSolid = new AcDbX3dSolid; if (m_sPoints.IsEmpty()) { pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); } else { pXSolid->CreateExtrude(ptOrg,vtZ,m_sPoints,m_dH,0.0); } pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); pGroup->SetOrgPoint( ptOrg ); pGroup->SetAxis(X,AcGeVector3d::kXAxis); pGroup->SetAxis(Y,AcGeVector3d::kYAxis); pGroup->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType); pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType); pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ); pGroup->GetSpecialtyData()->SetAt(_T("m_sPoints"),m_sPoints); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); break; } case 2://料口盖板 { //先开口 AcGePoint3d ptOrgBk = ptOrg; pGroup->SetOrgPoint( ptOrg ); double dL = m_nN * m_dL + (m_nN - 1) * 0.02; AcGePoint3d ptNewOrg = ptOrg; ptNewOrg.x += 0.5 * ( dL - m_dL); dL += 0.08; //套管 pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kRectTube,ptNewOrg,vtZ,4,dL,m_dW + 0.08,0.02,m_dH + 0.04); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite,true); for (int i = 0;i < m_nN;i++) { pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); ptOrg.x += m_dL; ptOrg.x += 0.02;//20MM间隙 } pGroup->SetAxis(X,AcGeVector3d::kXAxis); pGroup->SetAxis(Y,AcGeVector3d::kYAxis); pGroup->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType); pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType); pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); break; } case 3://井盖 { if (m_bCheckQ) { pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); AcGePoint3d ptOrg2; ptOrg2.z += 0.5 * m_dH; ptOrg2.z -= 0.01; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg2,vtZ,3,m_dL - 0.08,m_dW - 0.08,0.02); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract); ptOrg2 = ptOrg; ptOrg2.x -= 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract); ptOrg2 = ptOrg; ptOrg2.x += 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract); } else { pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kPipe,ptOrg,vtZ,3,0.5 * ( m_dL + 0.08 ),0.02,m_dH + 0.02);//壁厚20 pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite,true); pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg,vtZ,2,0.5 * m_dL,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite); //再减去内部一块 AcGePoint3d ptOrg2; ptOrg2.z += 0.5 * m_dH; ptOrg2.z -= 0.01; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.5 * ( m_dL - 0.04 ),0.02); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract); ptOrg2 = ptOrg; ptOrg2.x -= 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract); ptOrg2 = ptOrg; ptOrg2.x += 0.25 * m_dL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH); pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract); } pGroup->SetOrgPoint( ptOrg ); pGroup->SetAxis(X,AcGeVector3d::kXAxis); pGroup->SetAxis(Y,AcGeVector3d::kYAxis); pGroup->SetAxis(Z,AcGeVector3d::kZAxis); //序列化BIM数据 pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType); pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType); pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); break; } default: break; } return TRUE; } //墙体 void CSLabDlg::OnBnClickedRadio1() { UpdateData(); m_wndL.SetWindowText(_T("长度 L:")); m_wndW.SetWindowText(_T("宽度 W:")); m_wndH.SetWindowText(_T("厚度 H:")); m_wndL.EnableWindow(TRUE); m_wndW.EnableWindow(TRUE); m_wndH.EnableWindow(TRUE); m_wndEditL.EnableWindow(TRUE); m_wndEditW.EnableWindow(TRUE); m_wndEditH.EnableWindow(TRUE); m_wndN.ShowWindow(SW_HIDE); m_wndK.ShowWindow(SW_HIDE); m_wndEditN.ShowWindow(SW_HIDE); m_wndBtCheck.ShowWindow(SW_HIDE); m_wndYXWall.ShowWindow(SW_SHOW); m_wndStaZC.ShowWindow(SW_HIDE); m_wndEditZC.ShowWindow(SW_HIDE); m_wndStaZCS.ShowWindow(SW_HIDE); m_wndStaSp.ShowWindow(SW_HIDE); if (!m_bIsInit) { m_dL = 4.0; m_dW = 0.36; m_dH = 3.0; m_nN = 0; } m_sMaterial = _T("钢筋混凝土墙"); m_wndComboMa.ResetContent(); m_wndComboMa.AddString(_T("钢筋混凝土墙")); m_wndComboMa.AddString(_T("砖墙")); m_sSpecType = _T("剪力墙"); m_wndComboType.ResetContent(); m_wndComboType.AddString(_T("剪力墙")); m_wndComboType.AddString(_T("轻墙")); UpdateData(FALSE); } //平板 void CSLabDlg::OnBnClickedRadio2() { UpdateData(); m_wndL.SetWindowText(_T("长度 L:")); m_wndW.SetWindowText(_T("宽度 W:")); m_wndH.SetWindowText(_T("厚度 H:")); m_wndL.EnableWindow(TRUE); m_wndW.EnableWindow(TRUE); m_wndH.EnableWindow(TRUE); m_wndEditL.EnableWindow(TRUE); m_wndEditW.EnableWindow(TRUE); m_wndEditH.EnableWindow(TRUE); m_wndN.ShowWindow(SW_HIDE); m_wndK.ShowWindow(SW_HIDE); m_wndEditN.ShowWindow(SW_HIDE); m_wndBtCheck.ShowWindow(SW_HIDE); m_wndYXWall.ShowWindow(SW_HIDE); m_wndStaZC.ShowWindow(SW_HIDE); m_wndEditZC.ShowWindow(SW_HIDE); m_wndStaZCS.ShowWindow(SW_HIDE); m_wndStaSp.ShowWindow(SW_HIDE); if (!m_bIsInit) { m_dL = 4.0; m_dW = 0.36; m_dH = 3.0; m_nN = 0; } m_sMaterial = _T("钢筋混凝土板"); m_wndComboMa.ResetContent(); m_wndComboMa.AddString(_T("钢筋混凝土板")); m_sSpecType = _T("楼板"); m_wndComboType.ResetContent(); m_wndComboType.AddString(_T("楼板")); UpdateData(FALSE); } //料口盖板 void CSLabDlg::OnBnClickedRadio3() { UpdateData(); m_wndL.SetWindowText(_T("钢筋混凝土活动盖板长 L:")); m_wndW.SetWindowText(_T("钢筋混凝土活动盖板宽 W:")); m_wndH.SetWindowText(_T("钢筋混凝土活动盖板厚 H:")); m_wndL.EnableWindow(TRUE); m_wndW.EnableWindow(TRUE); m_wndH.EnableWindow(TRUE); m_wndEditL.EnableWindow(TRUE); m_wndEditW.EnableWindow(TRUE); m_wndEditH.EnableWindow(TRUE); m_wndN.ShowWindow(SW_SHOW); m_wndK.ShowWindow(SW_SHOW); m_wndEditN.ShowWindow(SW_SHOW); m_wndBtCheck.ShowWindow(SW_HIDE); m_wndYXWall.ShowWindow(SW_HIDE); m_wndN.SetWindowText(_T("钢筋混凝土活动盖板数量 N:")); m_wndStaZC.ShowWindow(SW_SHOW); m_wndEditZC.ShowWindow(SW_SHOW); m_wndStaZCS.ShowWindow(SW_SHOW); m_wndStaSp.ShowWindow(SW_SHOW); if (!m_bIsInit) { m_dL = 0.5; m_dW = 0.8; m_dH = 0.03; m_nN = 14; } m_sMaterial = _T("钢筋混凝土板"); m_wndComboMa.ResetContent(); m_wndComboMa.AddString(_T("钢筋混凝土板")); m_sSpecType = _T("料口盖板"); m_wndComboType.ResetContent(); m_wndComboType.AddString(_T("料口盖板")); UpdateData(FALSE); OnEnChangeEdith8(); UpdateData(FALSE); } //井盖 void CSLabDlg::OnBnClickedRadio4() { UpdateData(); if (m_bCheckQ) { m_wndL.SetWindowText(_T("长度 L:")); m_wndW.SetWindowText(_T("宽度 W:")); m_wndW.EnableWindow(TRUE); m_wndEditW.EnableWindow(TRUE); } else { m_wndL.SetWindowText(_T("直径 L:")); m_wndW.SetWindowText(_T("宽度 W:")); m_wndW.EnableWindow(FALSE); m_wndEditW.EnableWindow(FALSE); } m_wndH.SetWindowText(_T("厚度 H:")); m_wndN.ShowWindow(SW_HIDE); m_wndK.ShowWindow(SW_HIDE); m_wndEditN.ShowWindow(SW_HIDE); m_wndBtCheck.ShowWindow(SW_SHOW); m_wndYXWall.ShowWindow(SW_HIDE); m_wndStaZC.ShowWindow(SW_HIDE); m_wndEditZC.ShowWindow(SW_HIDE); m_wndStaZCS.ShowWindow(SW_HIDE); m_wndStaSp.ShowWindow(SW_HIDE); if (!m_bIsInit) { m_dL = 1.0; m_dW = 0.8; m_dH = 0.05; m_nN = 0; } m_sMaterial = _T("铸铁"); m_wndComboMa.ResetContent(); m_wndComboMa.AddString(_T("铸铁")); m_wndComboMa.AddString(_T("钢筋混凝土")); m_sSpecType = _T("液压井盖"); m_wndComboType.ResetContent(); m_wndComboType.AddString(_T("液压井盖")); m_wndComboType.AddString(_T("普通铸铁井盖")); UpdateData(FALSE); } void CSLabDlg::OnBnClickedCheck1() { UpdateData(); if (m_bCheckQ) { m_wndL.SetWindowText(_T("长度 L:")); m_wndW.SetWindowText(_T("宽度 W:")); m_wndL.EnableWindow(TRUE); m_wndW.EnableWindow(TRUE); m_wndEditL.EnableWindow(TRUE); m_wndEditW.EnableWindow(TRUE); } else { if (m_nType == 3) { m_wndL.SetWindowText(_T("直径 L:")); m_wndW.SetWindowText(_T("宽度 W:")); } m_wndL.EnableWindow(TRUE); m_wndW.EnableWindow(FALSE); m_wndEditL.EnableWindow(TRUE); m_wndEditW.EnableWindow(FALSE); } } void CSLabDlg::OnBnClickedButton1() { m_sPoints = _T(""); EnableWindow(FALSE); CWnd* pFrame = acedGetAcadFrame(); pFrame->EnableWindow(TRUE); ShowWindow(SW_HIDE); pFrame->SetFocus(); AcAxDocLock lock; ads_point pt; ads_name ent; int nRes = acedEntSel(_T("\n请选择闭合pline线:"),ent,pt); if (nRes == RTNORM) { AcDbObjectId id; acdbGetObjectId(id,ent); CString sText; AcDbEntity* pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead)) { AcDbPolyline* pPl = AcDbPolyline::cast(pEnt); if (pPl != NULL) { AcDbExtents ext; pPl->getGeomExtents(ext); m_sPoints = _T(""); double dBulge = 0.0; AcGePoint2d pt2d; AcGePoint2dArray arPt2ds; for (int i = 0;i < pPl->numVerts();i++) { pPl->getPointAt(i,pt2d); pPl->getBulgeAt(i,dBulge); //if (arPt2ds.find(pt2d) == -1) { arPt2ds.append(pt2d); sText.Format(_T("%g,%g@%g,"),pt2d.x,pt2d.y,dBulge); m_sPoints += sText; } } if ( arPt2ds.last().distanceTo(arPt2ds.first()) > 1.e-2) { pt2d = arPt2ds.first(); sText.Format(_T("%g,%g@0.0,"),pt2d.x,pt2d.y); m_sPoints += sText; } m_sPoints.TrimRight(_T(",")); } else { acutPrintf(_T("\n选择的实体不是pline线实体!")); } pEnt->close(); } } pFrame->EnableWindow(FALSE); ShowWindow(SW_SHOW); EnableWindow(TRUE); } void CSLabDlg::OnEnChangeEdit2() { //20MM间隙 UpdateData(); m_nN = (int)(m_dTLen / (m_dL + 0.02) + 0.5); UpdateData(FALSE); } void CSLabDlg::OnEnChangeEdith8() { UpdateData(); //20MM间隙 m_dTLen = m_nN * (m_dL + 0.02); UpdateData(FALSE); } void CSLabDlg::OnBnClickedButton2() { UpdateData(); switch(m_nType) { case 0: { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("墙体")); break; } case 1: { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("平板")); break; } case 2: { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("料口盖板")); break; } case 3: { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("井盖")); break; } default: break; } }