#include "stdafx.h" #include "StdArx.h" #include "uihistory.h" #include "HDLGDlg.h" #include "CLGZJDlg.h" extern AcDbRegion* CreatePolygonRegionOnly(AcGePoint3d* pPoints,int nSize); IMPLEMENT_DYNAMIC(CHDLGDlg, CDialog) CHDLGDlg::CHDLGDlg(CWnd* pParent /*=NULL*/) : CDialog(CHDLGDlg::IDD, pParent) , m_dW(1000) , m_dH(900) , m_dt(240) , m_db(100) , m_dd(1680) , m_dh2(100) , m_bHasCover(TRUE) , m_dk(140) , m_sGKind(_T("甲型电缆沟")) , m_nAlign(1)//中 , m_dTopEl(0) , m_dRatio(1.5) { GET_CACHE(CHDLGDlg , %s%d%f%f%f%f%f%f%f%f , &m_sGKind , &m_bHasCover , &m_dW , &m_dH , &m_dt , &m_db , &m_dd , &m_dh2 , &m_dk , &m_dTopEl ); m_bEnableAlign = TRUE; m_bEleReadOnly = FALSE; m_bLoadLast = FALSE; m_bLock = false; m_bHasHolder = FALSE; ::memset(&m_lHolder, 0, sizeof(XHolder)); ::memset(&m_rHolder, 0, sizeof(XHolder)); } CHDLGDlg::~CHDLGDlg() { } void CHDLGDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_dW); DDX_Text(pDX, IDC_EDIT2, m_dH); DDX_Text(pDX, IDC_EDIT3, m_dt); DDX_Text(pDX, IDC_EDIT4, m_db); DDX_Text(pDX, IDC_EDIT5, m_dd); DDX_Text(pDX, IDC_EDIT6, m_dh2); DDX_Check(pDX, IDC_CHECK1, m_bHasCover); DDX_Text(pDX, IDC_EDIT8, m_dk); DDX_CBString(pDX, IDC_COMBO1, m_sGKind); DDX_Text(pDX, IDC_EDIT7, m_dTopEl); DDX_CBIndex(pDX, IDC_COMBO6, m_nAlign); DDX_Control(pDX, IDC_EDIT7, m_wndEditEl); } BEGIN_MESSAGE_MAP(CHDLGDlg, CDialog) ON_BN_CLICKED(IDOK, &CHDLGDlg::OnBnClickedOk) ON_CBN_SELCHANGE(IDC_COMBO1, &CHDLGDlg::OnCbnSelchangeCombo1) ON_BN_CLICKED(IDC_BUTTON1, &CHDLGDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CHDLGDlg::OnBnClickedButton2) END_MESSAGE_MAP() BOOL CHDLGDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndEditEl.SetReadOnly(m_bEleReadOnly); if (m_bLock)//锁定标高 { GetDlgItem(IDC_EDIT7)->EnableWindow(FALSE); } UpdateData(FALSE); return TRUE; } void CHDLGDlg::OnBnClickedOk() { UpdateData(); if ( (m_dW + 2.0 * m_dt - m_dd) > 1.e-3) { AfxMessageBox(_T("尺寸 d 太小,必须大于 w+2t !")); return; } if (m_dh2 < 1.e-3) { AfxMessageBox(_T("尺寸 h2 太小,必须大于 0 !")); return; } if (m_dk < 1.e-3 && m_bHasCover) { AfxMessageBox(_T("尺寸 k 太小,必须大于 0 !")); return; } if (m_dt < 1.e-3) { AfxMessageBox(_T("尺寸 t 太小,必须大于 0 !")); return; } if (m_db < 1.e-3) { AfxMessageBox(_T("尺寸 b 太小,必须大于 0 !")); return; } if (m_dH < 1.e-3) { AfxMessageBox(_T("尺寸 H 太小,必须大于 0 !")); return; } if (m_dW < 1.e-3) { AfxMessageBox(_T("尺寸 W 太小,必须大于 0 !")); return; } SET_CACHE(CHDLGDlg , %s%d%f%f%f%f%f%f%f%f , m_sGKind , m_bHasCover , m_dW , m_dH , m_dt , m_db , m_dd , m_dh2 , m_dk , m_dTopEl); OnOK(); } bool FormatRect(AcGePoint3d* pptGe,double dw,double dt) { pptGe[0].set(0,0,0); pptGe[0].x -= dw; pptGe[0].y += 0.5 * dt; pptGe[1] = pptGe[0]; pptGe[1].x += dw; pptGe[2] = pptGe[1]; pptGe[2].y -= dt; pptGe[3] = pptGe[0]; pptGe[3].y -= dt; pptGe[4] = pptGe[0]; return true; } bool CHDLGDlg::GetDLGData(DlgData& data,AcArray& arRegEl) { data.m_dW = m_dW; data.m_dH = m_dH; data.m_dt = m_dt; data.m_db = m_db; data.m_dd = m_dd; data.m_dh2 = m_dh2; data.m_bHasCover = m_bHasCover; data.m_dk = m_dk; data.m_dRatio = 1.5; _tcscpy(data.m_sGKind,(LPCTSTR)m_sGKind); data.m_dTopEl = m_dTopEl; data.m_nAlign = m_nAlign; AcDbRegion* pRegion = NULL; //原始位置为原点 //底板 AcDbVoidPtrArray arLnPtrs; RegionAndEl rel; rel.pReg = NULL; _tcscpy(rel.m_szMat,_T("混凝土")); AcGePoint3d ptGe[5]; FormatRect(ptGe,m_dd,m_db); pRegion = CreatePolygonRegionOnly(ptGe,5); if (pRegion == NULL) { return false; } rel.m_dZ = m_dTopEl; rel.m_dZ -= m_dk; rel.m_dZ -= m_dH; rel.m_dZ -= 0.5 * m_db; rel.pReg = pRegion; rel.nType = 1;//板 rel.m_dX = 0.0;//偏移 rel.dSize[0] = m_dd; rel.dSize[1] = m_db; rel.dSize[2] = 0.0; arRegEl.append(rel); //侧面墙体 FormatRect(ptGe,m_dt,(m_dH - m_dh2)); pRegion = CreatePolygonRegionOnly(ptGe,5); if (pRegion == NULL) { return false; } _tcscpy(rel.m_szMat,_T("砌砖墙体")); rel.m_dZ = m_dTopEl; rel.m_dZ -= m_dk; rel.m_dZ -= m_dh2; rel.m_dZ -= 0.5 * ( m_dH - m_dh2); rel.m_dX = 0.0; rel.m_dX -= 0.5 * m_dW; rel.m_dX -= 0.5 * m_dt; rel.pReg = pRegion; rel.nType = 2;//墙 rel.dSize[0] = m_dt; rel.dSize[1] = (m_dH - m_dh2); rel.dSize[2] = 0.0; arRegEl.append(rel); //侧面墙体2 rel.m_dX += (m_dW + m_dt); arRegEl.append(rel); //压顶 FormatRect(ptGe,m_dt,m_dh2); pRegion = CreatePolygonRegionOnly(ptGe,5); if (pRegion == NULL) { return false; } _tcscpy(rel.m_szMat,_T("混凝土")); rel.m_dZ = m_dTopEl; rel.m_dZ -= m_dk; rel.m_dZ -= 0.5 * m_dh2; rel.pReg = pRegion; rel.nType = 2; rel.m_dX = 0.0; rel.m_dX -= 0.5 * m_dW; rel.m_dX -= 0.5 * m_dt; rel.dSize[0] = m_dt; rel.dSize[1] = m_dh2; rel.dSize[2] = 0.0; arRegEl.append(rel); rel.m_dX += (m_dW + m_dt); arRegEl.append(rel); //盖板 if (m_bHasCover) { FormatRect(ptGe,m_dW + 2.0 * m_dt,m_dk); pRegion = CreatePolygonRegionOnly(ptGe,5); if (pRegion == NULL) { return false; } _tcscpy(rel.m_szMat,_T("钢筋混凝土盖板")); rel.m_dZ = m_dTopEl; rel.m_dZ -= 0.5 * m_dk; rel.m_dX = 0.0; rel.nType = 1;// 板 rel.pReg = pRegion; rel.dSize[0] = m_dW + 2.0 * m_dt; rel.dSize[1] = m_dk; rel.dSize[2] = 0.0; arRegEl.append(rel); } return true; } bool CHDLGDlg::GetDLGData(DlgData &data) { data.m_dW = m_dW; data.m_dH = m_dH; data.m_dt = m_dt; data.m_db = m_db; data.m_dd = m_dd; data.m_dh2 = m_dh2; data.m_bHasCover = m_bHasCover; data.m_dk = m_dk; _tcscpy(data.m_sGKind, (LPCTSTR)m_sGKind); data.m_dTopEl = m_dTopEl; data.m_nAlign = m_nAlign; data.m_dRatio = m_dRatio; return true; } BOOL CHDLGDlg::GetXHolder(XHolder &lHolder, XHolder &rHolder) { memcpy(&lHolder, &m_lHolder, sizeof(XHolder)); memcpy(&rHolder, &m_rHolder, sizeof(XHolder)); return m_bHasHolder; } void CHDLGDlg::SetXHolder(XHolder &lHolder, XHolder &rHolder) { memcpy(&m_lHolder, &lHolder, sizeof(XHolder)); memcpy(&m_rHolder, &rHolder, sizeof(XHolder)); } void CHDLGDlg::SetEleReadOnly(BOOL bEleReadOnly, double dTopEl) { m_bEleReadOnly = bEleReadOnly; m_dTopEl = dTopEl; } void CHDLGDlg::EnableLoadLast(BOOL bLoadLast) { m_bLoadLast = bLoadLast; } void CHDLGDlg::GetPipeParam(AecHvac::DuctParam *pParam) { if (pParam != NULL) { memset(pParam, 0, sizeof(AecHvac::DuctParam)); pParam->eType = eRect; pParam->m_app = WPipe::eTrench; pParam->dSize[0] = m_dW;// +2.0 * m_dt;按照内径 pParam->dSize[1] = m_dH + m_db + m_dk;//w pParam->dSize[2] = m_dt; struct resbuf rb; acedGetVar(_T("INSUNITS"), &rb); if (rb.resval.rint == AcDb::kUnitsMeters) { pParam->dSize[0] *= 0.001; pParam->dSize[1] *= 0.001; pParam->dSize[2] *= 0.001; } pParam->m_nAlign = m_nAlign; pParam->m_dEl = m_dTopEl - pParam->dSize[1];//BOMEL //调整到中心 pParam->m_dEl += 0.5 * pParam->dSize[1]; pParam->m_dRatio = 1.0; pParam->m_bCover = TRUE; pParam->m_bSpart = FALSE; pParam->m_bCenDraw = FALSE; pParam->m_dFullPer = 0.75; _tcscpy(pParam->szMat, _T("--")); _tcscpy(pParam->szFat, _T("现场")); _tcscpy(pParam->szType, m_sGKind); _tcscpy(pParam->szSys, _T("电缆沟")); _tcscpy(pParam->szRem, _T("--")); //附属电缆沟数据 pParam->dSize[4] = m_dW; pParam->dSize[5] = m_dH; pParam->dSize[6] = m_dt; pParam->dSize[7] = m_db; pParam->dSize[8] = m_dd; pParam->dSize[9] = m_dh2; pParam->dSize[10] = m_dk; if (rb.resval.rint == AcDb::kUnitsMeters) { for(int n = 4;n < 11;n++) { pParam->dSize[n] *= 0.001; } } pParam->dSize[11] = m_dTopEl; } } void CHDLGDlg::SetShowParam(const AecHvac::DuctParam ¶m) { /* * pParam->dSize[0] = m_dW;// +2.0 * m_dt;按照内径 pParam->dSize[1] = m_dH + m_db + m_dk;//w pParam->dSize[2] = m_dt; */ m_dW = param.dSize[4]; m_dH = param.dSize[5]; m_dt = param.dSize[6]; m_db = param.dSize[7]; m_dd = param.dSize[8]; m_dh2 = param.dSize[9]; m_dk = param.dSize[10]; struct resbuf rb; acedGetVar(_T("INSUNITS"), &rb); if (rb.resval.rint == AcDb::kUnitsMeters) { m_dW *= 1000.0; m_dH *= 1000.0; m_dt *= 1000.0; m_db *= 1000.0; m_dd *= 1000.0; m_dh2 *= 1000.0; m_dk *= 1000.0; } m_sGKind = param.szType; m_dTopEl = param.dSize[11]; m_nAlign = param.m_nAlign; m_dRatio = param.m_dRatio; m_bHasCover = param.m_bCover; } void CHDLGDlg::OnCbnSelchangeCombo1() { } void CHDLGDlg::OnBnClickedButton1() { CLGZJDlg dlg; dlg.SetXHolder(m_lHolder); if (IDOK == dlg.DoModal()) { dlg.GetXHolder(m_lHolder); m_bHasHolder = TRUE; } } void CHDLGDlg::OnBnClickedButton2() { CLGZJDlg dlg; dlg.SetXHolder(m_rHolder); if (IDOK == dlg.DoModal()) { // dlg.GetXHolder(m_rHolder); m_bHasHolder = TRUE; } }