#include "stdafx.h" #include "LXFZDlg.h" #include "AecDbEarthWorm.h" #include "KTCADUtilityEx.h" #include "AcDbX3dSolid.h" #include "AecDbX3dPart.h" #include "UITools.h" #include "BimInfoDlg.h" IMPLEMENT_DYNAMIC(CLXFZDlg, CDialog) CLXFZDlg::CLXFZDlg(CWnd* pParent /*=NULL*/) : CDialog(CLXFZDlg::IDD, pParent) , m_dH(3.0) , m_dW(12.0) , m_dL(14.0) , m_dW1(6.0) , m_dL1(7.0) , m_dT(0.36) , m_dX(6.0) , m_bLWHIsRoom(FALSE) { UIDataCache::Read(_T("%d%d%d%d%d%d%d%s"), _T("CLXFZDlg") , &m_dH , &m_dW , &m_dL , &m_dW1 , &m_dL1 , &m_dT , &m_dX , &m_sCrossSectionScr); } CLXFZDlg::~CLXFZDlg() { } void CLXFZDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_STATIC_BMP, m_wndStaBmp); DDX_Text(pDX, IDC_EDIT1, m_dH); DDX_Text(pDX, IDC_EDIT2, m_dW); DDX_Text(pDX, IDC_EDIT10, m_dL); DDX_Text(pDX, IDC_EDIT34, m_dW1); DDX_Text(pDX, IDC_EDIT35, m_dL1); DDX_Text(pDX, IDC_EDIT36, m_dT); DDX_Text(pDX, IDC_EDIT38, m_dX); DDX_Check(pDX, IDC_CHECK1, m_bLWHIsRoom); } BEGIN_MESSAGE_MAP(CLXFZDlg, CDialog) ON_BN_CLICKED(IDOK, &CLXFZDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CLXFZDlg::OnBnClickedButton1) END_MESSAGE_MAP() BOOL CLXFZDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("房子")); return TRUE; } void CLXFZDlg::OnBnClickedOk() { UpdateData(TRUE); if (m_dL < m_dL1) { AfxMessageBox(_T("L型房子大尺寸数据比小尺寸数据小!")); return; } if (m_dL < 0.1 || m_dL1 < 0.1 || m_dW < 0.1 || m_dH < 0.1 || m_dT < 0.1) { AfxMessageBox(_T("房子尺寸数据太小!")); return; } UIDataCache::Write(_T("%d%d%d%d%d%d%d%s"), _T("CLXFZDlg") , &m_dH, &m_dW, &m_dL, &m_dW1, &m_dL1, &m_dT, &m_dX , &m_sCrossSectionScr); OnOK(); } extern void GetEarthWormHeightWidthAndThick(LPCTSTR pszCrossSectionScr,AcGePoint2d& ptHW,AcGePoint2d& ptOIW); int CLXFZDlg::GetX3dPart(AecDbX3dPart*& pPart) { AcGePoint2d ptHW,ptOIW; GetEarthWormHeightWidthAndThick(m_sCrossSectionScr,ptHW,ptOIW); double dHeight = ptHW.x; double dWidth = ptHW.y; double dOutW = ptOIW.x; double dIntW = ptOIW.y; if (pPart != NULL) { pPart->RemoveAll3dSolidRec(); } else { pPart = new AecDbX3dPart; } double dH = m_dH + (m_bLWHIsRoom ? m_dT : 0.0); double dW = m_dW + (m_bLWHIsRoom ? 2.0 * m_dT : 0.0); double dL = m_dL + (m_bLWHIsRoom ? 2.0 * m_dT : 0.0); double dW1 = m_dW1 + (m_bLWHIsRoom ? -1.0 * m_dT : 0.0); double dL1 = m_dL1 + (m_bLWHIsRoom ? 2.0 * m_dT : 0.0); AcGePoint3d ptOrg; ptOrg.set(m_dX,0,dHeight * 0.5); AcGeVector3d vtZ = AcGeVector3d::kZAxis; CString sText,sPoints = _T(""); AcGePoint2d pt2d(0,0); sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y); sPoints += sText; pt2d.x += dL; sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y); sPoints += sText; pt2d.y += dW; sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y); sPoints += sText; pt2d.x -= (dL - dL1); sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y); sPoints += sText; pt2d.y += dW1; sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y); sPoints += sText; pt2d.x -= dL1; sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y); sPoints += sText; pt2d.set(0,0); sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y); sPoints += sText; AcDbX3dSolid* pXSolid = new AcDbX3dSolid; pXSolid->CreateExtrude(AcGePoint3d(0,0,0),vtZ,sPoints,dH,m_dT); AcGeVector3d vtMove(m_dX,0,0); pXSolid->AddMove(vtMove); vtMove.set(0,0,dHeight / 2.0); pXSolid->AddMove(vtMove); vtMove.set(0,-0.5 * dWidth,0.0); pXSolid->AddMove(vtMove); pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite); pPart->SetOrgPoint( ptOrg ); pPart->SetAxis(X,AcGeVector3d::kXAxis); pPart->SetAxis(Y,AcGeVector3d::kYAxis); pPart->SetAxis(Z,AcGeVector3d::kZAxis); 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_dW1"),m_dW1); pPart->GetSpecialtyData()->SetAt(_T("m_dL1"),m_dL1); pPart->GetSpecialtyData()->SetAt(_T("m_dT"),m_dT); pPart->GetSpecialtyData()->SetAt(_T("m_dX"),m_dX); pPart->GetSpecialtyData()->SetAt(_T("m_sCrossSectionScr"),m_sCrossSectionScr); pPart->GetSpecialtyData()->SetAt(_T("m_bLWHIsRoom"),m_bLWHIsRoom); pPart->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData); return TRUE; } void CLXFZDlg::OnBnClickedButton1() { CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("房子")); }