#include "stdafx.h" #include "YXQTDlg.h" #include "AcDbX3dSolid.h" #include "AecDbX3dGroup.h" #include "AecDbX3dPart.h" #include "UITools.h" #include "BimInfoDlg.h" IMPLEMENT_DYNAMIC(CYXQTDlg, CDialog) CYXQTDlg::CYXQTDlg(CWnd* pParent /*=NULL*/) : CDialog(CYXQTDlg::IDD, pParent) , m_sPoints(_T("")) , m_dH(3.0) { } CYXQTDlg::~CYXQTDlg() { } void CYXQTDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_sPoints); 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_Text(pDX, IDC_EDIT4, m_dH); } BEGIN_MESSAGE_MAP(CYXQTDlg, CDialog) ON_BN_CLICKED(IDOK, &CYXQTDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CYXQTDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CYXQTDlg::OnBnClickedButton2) END_MESSAGE_MAP() BOOL CYXQTDlg::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); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("墙体")); return TRUE; } void CYXQTDlg::OnBnClickedOk() { UpdateData(); if (m_sPoints.IsEmpty()) { AfxMessageBox(_T("请选择异型墙体截面闭合曲线!")); return; } OnOK(); } void CYXQTDlg::OnBnClickedButton1() { UpdateData(); 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) { AcGePoint2d ptSta; pPl->getPointAt(0,ptSta); AcGeVector2d vtMove = ptSta.asVector(); vtMove.negate(); 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); pt2d += vtMove; //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); UpdateData(FALSE); } int CYXQTDlg::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; pXSolid = new AcDbX3dSolid; if (!m_sPoints.IsEmpty()) { 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数据 BOOL bCheckQ = FALSE; double dL = 1.2; double dW = 0.36; int nN = 1; int nType = 0; pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH); pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),nType); pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),nN); pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial); pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType); pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),bCheckQ); pGroup->GetSpecialtyData()->SetAt(_T("m_sPoints"),m_sPoints); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); return TRUE; } void CYXQTDlg::OnBnClickedButton2() { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("墙体")); }