#include "stdafx.h" #include "JSJDlg.h" #include "AcDbX3dSolid.h" #include "AecDbX3dGroup.h" #include "AecDbEarthWorm.h" #include "UITools.h" #include "BimInfoDlg.h" extern CString IDCreate(); IMPLEMENT_DYNAMIC(CJSJDlg, CDialog) CJSJDlg::CJSJDlg(CWnd* pParent /*=NULL*/) : CDialog(CJSJDlg::IDD, pParent) , m_dW(1.2) , m_dD(1.5) , m_dT(0.4) , m_dX(5.0) , m_dY(0.0) , m_dL(1.2) { UIDataCache::Read(_T("%d%d%d%d%d%s"), _T("CJSJDlg") , &m_dW , &m_dD , &m_dT , &m_dX , &m_dY , &m_sCrossSectionScr); } CJSJDlg::~CJSJDlg() { } void CJSJDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT3, m_dW); DDX_Text(pDX, IDC_EDIT4, m_dD); DDX_Text(pDX, IDC_EDIT5, m_dT); DDX_Text(pDX, IDC_EDIT1, m_dX); DDX_Text(pDX, IDC_EDIT6, m_dY); DDX_Text(pDX, IDC_EDIT7, m_dL); } BEGIN_MESSAGE_MAP(CJSJDlg, CDialog) ON_BN_CLICKED(IDOK, &CJSJDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CJSJDlg::OnBnClickedButton1) END_MESSAGE_MAP() BOOL CJSJDlg::OnInitDialog() { CDialog::OnInitDialog(); if (m_dL < 0.3) m_dL = m_dW; UpdateData(FALSE); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("集水井")); return TRUE; } void CJSJDlg::OnBnClickedOk() { UpdateData(); if (m_dW < 0.3 || m_dT < 0.1 || m_dD < 0.3 || m_dL < 0.3) { AfxMessageBox(_T("集水井尺寸太小!请重新输入尺寸!")); return; } UIDataCache::Write(_T("%d%d%d%d%d%s"), _T("CJSJDlg") , &m_dW , &m_dD , &m_dT , &m_dX , &m_dY , &m_sCrossSectionScr); OnOK(); } int CJSJDlg::GetX3dSolidRecs( AecDbX3dGroup*& pGroup) { //_T("RECT:3900x3600|2900x3600|400x300|EXT:...");//EXT为扩充字段 AecDbEarthWorm worm; worm.SetCrossSectionScr(m_sCrossSectionScr); worm.SetChamferInter(100.0); ESection eType = eRect; AcGePoint2dArray arDatas; eType = worm.ExtractEarthWormScr(arDatas); //外壁厚,内隔壁厚 double dOutW = 0.0,dIntW = 0.0; if (arDatas.length() > 0) { dOutW = arDatas.last().x; dIntW = arDatas.last().y; } //总高度 double dHeight = arDatas.first().y; dHeight += 2 * arDatas.last().x; //总宽度 double dWidth = 0.0; for (int i = 0;i < arDatas.length()-1;i++) { dWidth += arDatas.at(i).x; } dWidth += (arDatas.length() - 2) * dIntW; dWidth += dOutW * 2.0; if (pGroup != NULL) { pGroup->RemoveAll3dSolidRec(); } else { pGroup = new AecDbX3dGroup; } AcGePoint3d ptOrg; ptOrg.x = m_dX; ptOrg.y = 0.5 * dWidth - m_dY - 0.5 * (m_dW + 2 * m_dT); ptOrg.z = -dHeight * 0.5 - ( m_dD + m_dT ) * 0.5; AcGeVector3d vtZ = AcGeVector3d::kZAxis; AcDbX3dSolid* pXSolid = NULL; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,4,m_dW + m_dT * 2.0,m_dL + m_dT * 2.0,m_dD + m_dT ); X3dSolidRec rec; rec.pXSolid = pXSolid; rec.bType = AcDb::kBoolUnite; _tcscpy(rec.szLockId,IDCreate()); pGroup->AddX3dSolidRec(rec); ptOrg.z = -dHeight * 0.5 - m_dD * 0.5; pXSolid = new AcDbX3dSolid; pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,4,m_dW,m_dL,m_dD); 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_dW"),m_dW); pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL); pGroup->GetSpecialtyData()->SetAt(_T("m_dD"),m_dD); pGroup->GetSpecialtyData()->SetAt(_T("m_dT"),m_dT); pGroup->GetSpecialtyData()->SetAt(_T("m_dX"),m_dX); pGroup->GetSpecialtyData()->SetAt(_T("m_dY"),m_dY); pGroup->GetSpecialtyData()->SetAt(_T("m_sCrossSectionScr"),m_sCrossSectionScr); pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); return 1; } void CJSJDlg::OnBnClickedButton1() { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("集水井")); }