// PrinciplePubFeedDlg.cpp : implementation file // #include "stdafx.h" #include "DbEquipment.h" #include "AcDbObjectPtr.h" #include "PickEntSet.h" #include "dbpipe.h" #include "PrinciplePubFeedDlg.h" #include "DistFloorDlg.h" #include "SanitaryDangDlg.h" #include "SantaryIndustryDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern void DrawFloorLine(XPoint p1, XPoint p2, const TCHAR*szPipeLayer, const TCHAR*szText, double nHeight, const TCHAR*szSerial); ///////////////////////////////////////////////////////////////////////////// // 工业建筑给水原理 ///////////////////////////////////////////////////////////////////////////// extern AcDbObjectId InitLayer(const TCHAR *szLayer, AcDbDatabase *pDb = NULL); extern AcDbObjectId DrawSysPipeByLayer(XPoint ptStart, XPoint ptEnd, const TCHAR *szLayer, int iLevel = 0); extern AcDbObjectId InsEquipmentByName(const TCHAR *szName, XPoint pt, double nAng, const TCHAR *szLayer, BOOL bReversal, BOOL bHidePipe); extern TCHAR *LAY_PIPE_FEED; extern TCHAR *LAY_EQ_FEED; void PrincipleIndustryFeed() { CTemporaryResourceOverride vTemp; CPrinciplePubFeedDlg dlg(1); if(dlg.DoModal() != IDOK) return; CString csLayer = LAY_PIPE_FEED; GlobalFunc::InitPipeLayer(LAY_PIPE_FEED); InitLayer(LAY_EQ_FEED); XPoint ptIns, ptStart, ptEnd, ptFloor; xg_getvar(_T("VIEWCTR"), ptIns); ptIns = GlobalFunc::Ucs2Wcs(ptIns); PickSet ss(SS_FREE); ss.IncludeBegin(); ptStart = ptIns; ads_polar(ptStart, PI/2*3, 1000, ptStart); ptFloor = ptIns; CString csDwb = g_csDwbPath + _T("TwtSys"); double nCountHeight(0); GlobalFunc::InitTwtTextStyle(g_Option::instance().g_csTwtDimStyle); int idx(1); for(int i=0;im_dHeight; for(int j=0;jm_iNum;j++){ ptStart = ptFloor; XPoint ptVerPipeS, ptVerPipeE; ads_polar(ptStart, PI/2, dlg.m_nElevation*1000, ptVerPipeS); ads_polar(ptVerPipeS, PI/2*3, dCurFloorHeight, ptVerPipeE); //绘制每层立管 AcDbObjectId idPipe = DrawSysPipeByLayer(ptVerPipeE, ptVerPipeS, LAY_PIPE_FEED); OPENOBJ_BEGIN(idPipe, AcDb::kForWrite, CDbPipe, pPipe); if(pPipe){ pPipe->SetSysLabel(XString(_T("%d楼立管-1"), idx)); } OPENOBJ_END(); if(dlg.m_bFloor){ //楼板线和字 ads_polar(ptStart, PI, dlg.m_nFloorLen*6, ptStart); ads_polar(ptFloor, 0, dlg.m_nFloorLen, ptEnd); CString csText; csText.Format(_T("%d楼"), idx); DrawFloorLine(ptStart, ptEnd, csLayer, csText, nCountHeight,_T("")); nCountHeight += dCurFloorHeight/1000; } //干管 XPoint ptPipeS, ptPipeE, ptValve, ptAmmeter; ads_polar(ptFloor, PI/2, dlg.m_nElevation*1000, ptPipeS); BOOL bLeft = FALSE; double nRotate(0); int len = dlg.m_lstData[i]->m_lstFloor.Length(); for(int m=0;mm_lstFloor[m]->m_csName; int iNum = dlg.m_lstData[i]->m_lstFloor[m]->m_iNum; double dNg = dlg.m_lstData[i]->m_lstFloor[m]->m_dNg; double dQ = dlg.m_lstData[i]->m_lstFloor[m]->m_dQ; CString csBlkRec; if(csName == _T("大便器(延时自闭式冲洗阀)") || csName == _T("大便器自闭式冲洗阀")) csBlkRec = _T("00000291"); else if(csName == _T("小便器") || csName.Find(_T("小便器")) > -1) csBlkRec = _T("00000046"); else if(csName == _T("洗手盆") || csName == _T("洗脸盆") || csName.Find(_T("洗脸盆")) > -1) csBlkRec = _T("00000038"); else if(csName.Find(_T("洗涤盆")) > -1) csBlkRec = _T("00000037"); else if(csName.Find(_T("大便器(冲洗水箱浮球阀)")) > -1 || csName.Find(_T("大便器冲洗水箱")) > -1) csBlkRec = _T("00000296"); else if(csName == _T("浴盆") || csName == _T("淋浴器") || csName.Find(_T("淋浴器")) > -1) csBlkRec = _T("00000048"); if(csBlkRec == _T("")) continue; for(int m=0;mSetDang(dNg); pEquipTmp->SetSpare(dQ); } OPENOBJ_END(); ptPipeS = ptPipeE; } } idx++; if(j == dlg.m_lstData[i]->m_iNum - 1){ if(i != dlg.m_lstData.Length() -1){ dCurFloorHeight = dlg.m_lstData[i+1]->m_dHeight; } } ads_polar(ptFloor, PI/2, dCurFloorHeight, ptFloor); } } ss.IncludeEnd(); PickSet ssCopy(SS_FREE); for(long m=0;mSetMaterial(dlg.m_iMaterial); } OPENOBJ_END(); } int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_END|OS_NEA|OS_MID; XPushVar vOsMode(_T("OSMODE"), nOsMode); ptIns = GlobalFunc::Wcs2Ucs(ptIns); ss.Redraw(2); XPoint ptFinal; actrTransactionManager->flushGraphics(); //acad 刷新 int nRet = GlobalFunc::DragMovePickSet(ss, _T("\n请点取系统图位置<退出>: "), ptIns, ptFinal); if(nRet != RTNORM){ ss.Erase(); //TPipePerDocData *pData = GetCurPipeDocData(); //pData->EnableWork(FALSE); return; } ss.Redraw(1); } ///////////////////////////////////////////////////////////////////////////// // 公共建筑给水原理 ///////////////////////////////////////////////////////////////////////////// void PrinciplePubFeed() { CTemporaryResourceOverride vTemp; CPrinciplePubFeedDlg dlg(0); if(dlg.DoModal() != IDOK) return; CString csLayer = LAY_PIPE_FEED; GlobalFunc::InitPipeLayer(LAY_PIPE_FEED); InitLayer(LAY_EQ_FEED); XPoint ptIns, ptStart, ptEnd, ptFloor; xg_getvar(_T("VIEWCTR"), ptIns); ptIns = GlobalFunc::Ucs2Wcs(ptIns); PickSet ss(SS_FREE); ss.IncludeBegin(); ptStart = ptIns; ads_polar(ptStart, PI/2*3, 1000, ptStart); ptFloor = ptIns; CString csDwb = g_csDwbPath + _T("TwtSys"); double nCountHeight(0); GlobalFunc::InitTwtTextStyle(g_Option::instance().g_csTwtDimStyle); int idx(1); for(int i=0;im_dHeight; for(int j=0;jm_iNum;j++){ ptStart = ptFloor; XPoint ptVerPipeS, ptVerPipeE; ads_polar(ptStart, PI/2, dlg.m_nElevation*1000, ptVerPipeS); ads_polar(ptVerPipeS, PI/2*3, dCurFloorHeight, ptVerPipeE); //绘制每层立管 AcDbObjectId idPipe = DrawSysPipeByLayer(ptVerPipeE, ptVerPipeS, LAY_PIPE_FEED); OPENOBJ_BEGIN(idPipe, AcDb::kForWrite, CDbPipe, pPipe); if(pPipe){ pPipe->SetSysLabel(XString(_T("%d楼立管-1"), idx)); } OPENOBJ_END(); if(dlg.m_bFloor){ //楼板线和字 ads_polar(ptStart, PI, dlg.m_nFloorLen*6, ptStart); ads_polar(ptFloor, 0, dlg.m_nFloorLen, ptEnd); CString csText; csText.Format(_T("%d楼"), idx); DrawFloorLine(ptStart, ptEnd, csLayer, csText, nCountHeight,_T("")); nCountHeight += dCurFloorHeight/1000; } //干管 XPoint ptPipeS, ptPipeE, ptValve, ptAmmeter; ads_polar(ptFloor, PI/2, dlg.m_nElevation*1000, ptPipeS); BOOL bLeft = FALSE; double nRotate(0); int len = dlg.m_lstData[i]->m_lstFloor.Length(); for(int m=0;mm_lstFloor[m]->m_csName; int iNum = dlg.m_lstData[i]->m_lstFloor[m]->m_iNum; double dNg = dlg.m_lstData[i]->m_lstFloor[m]->m_dNg; double dQ = dlg.m_lstData[i]->m_lstFloor[m]->m_dQ; CString csBlkRec; if(csName == _T("大便器(延时自闭式冲洗阀)")) csBlkRec = _T("00000291"); else if(csName == _T("小便器")) csBlkRec = _T("00000046"); else if(csName == _T("洗手盆") || csName == _T("洗脸盆")) csBlkRec = _T("00000038"); else if(csName.Find(_T("洗涤盆")) > -1) csBlkRec = _T("00000037"); else if(csName.Find(_T("大便器(冲洗水箱浮球阀)")) > -1) csBlkRec = _T("00000296"); else if(csName == _T("浴盆") || csName == _T("淋浴器")) csBlkRec = _T("00000048"); if(csBlkRec == _T("")) continue; for(int m=0;mSetDang(dNg); pEquipTmp->SetSpare(dQ); } OPENOBJ_END(); ptPipeS = ptPipeE; } } idx++; if(j == dlg.m_lstData[i]->m_iNum - 1){ if(i != dlg.m_lstData.Length() -1){ dCurFloorHeight = dlg.m_lstData[i+1]->m_dHeight; } } ads_polar(ptFloor, PI/2, dCurFloorHeight, ptFloor); } } ss.IncludeEnd(); PickSet ssCopy(SS_FREE); for(long m=0;mSetMaterial(dlg.m_iMaterial); } OPENOBJ_END(); } int nOsMode=0; xg_getvar(_T("OSMODE"), &nOsMode); nOsMode &= ~0x4000; nOsMode |= OS_INT|OS_END|OS_NEA|OS_MID; XPushVar vOsMode(_T("OSMODE"), nOsMode); ptIns = GlobalFunc::Wcs2Ucs(ptIns); ss.Redraw(2); XPoint ptFinal; actrTransactionManager->flushGraphics(); //acad 刷新 int nRet = GlobalFunc::DragMovePickSet(ss, _T("\n请点取系统图位置<退出>: "), ptIns, ptFinal); if(nRet != RTNORM){ ss.Erase(); //TPipePerDocData *pData = GetCurPipeDocData(); //pData->EnableWork(FALSE); return; } ss.Redraw(1); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// TGridPubFeed::TGridPubFeed() { m_iOld=0; } void TGridPubFeed::OnCurChanged() { WDGrid::OnCurChanged(); int idx = GetCurRowIndex(); if(IsValidRow(idx)) { CPrinciplePubFeedDlg *pDlg=(CPrinciplePubFeedDlg*)GetParent(); if(pDlg!=NULL){ pDlg->UpdateSanGrid2List(); pDlg->UpdateSanGrid(); pDlg->UpdateGrid2List(); m_iOld = idx; } } } ///////////////////////////////////////////////////////////////////////////// // CPrinciplePubFeedDlg dialog CString CPrinciplePubFeedDlg::m_csMaterial = ""; CPrinciplePubFeedDlg::CPrinciplePubFeedDlg(int mode, CWnd* pParent /*=NULL*/) : CDialog(CPrinciplePubFeedDlg::IDD, pParent), m_spinLen(50) { m_iMode = mode; //{{AFX_DATA_INIT(CPrinciplePubFeedDlg) m_nLen = 800; m_nFloorLen = 500; m_nElevation = 0.3; m_bFloor = TRUE; m_iMaterial = -1; //}}AFX_DATA_INIT } void CPrinciplePubFeedDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPrinciplePubFeedDlg) DDX_Control(pDX, IDC_COMBO_MATERIAL, m_comboMat); DDX_Control(pDX, IDC_SPIN_LEN, m_spinLen); DDX_Text(pDX, IDC_FLOOR_LEN, m_nLen); DDX_Text(pDX, IDC_FLOOR_LEN2, m_nFloorLen); DDX_Text(pDX, IDC_EDIT_ELEVATION, m_nElevation); DDX_Check(pDX, IDC_CHECK_FLOOR, m_bFloor); DDX_CBIndex(pDX, IDC_COMBO_MATERIAL, m_iMaterial); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPrinciplePubFeedDlg, CDialog) //{{AFX_MSG_MAP(CPrinciplePubFeedDlg) ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) ON_WM_PAINT() ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel) ON_BN_CLICKED(IDC_BUTTON_ADD2, OnButtonAdd2) ON_BN_CLICKED(IDC_BUTTON_DEL2, OnButtonDel2) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPrinciplePubFeedDlg message handlers BOOL CPrinciplePubFeedDlg::OnInitDialog() { CDialog::OnInitDialog(); m_spinLen.SetRange(50, 5000); if(m_iMode == 0) { this->SetWindowText(_T("绘制公共建筑给水原理图")); m_grid.AppendCol(_T("卫生器具"), 160); m_grid.AppendCol(_T("数量"), 50); m_grid.AppendCol(_T("当量"), 50); m_grid.AppendCol(_T("额定流量"), 50); } else { this->SetWindowText(_T("绘制工业建筑给水原理图")); m_grid.AppendCol(_T("卫生器具"), 150); m_grid.AppendCol(_T("数量"), 30); m_grid.AppendCol(_T("同时给水百分数"), 80); m_grid.AppendCol(_T("额定流量"), 50); } m_grid.Clear(); m_grid.Create(this, IDC_LIST_FLOOR); m_grid.FitLastCol(); m_grid.SetNoAppendButton(TRUE); m_grid.SetNoDefaultMenu(true); m_grid.Refresh(); ////////////////////////////////////////////////// m_gridFloor.AppendCol(_T("楼层"), 30); m_gridFloor.AppendCol(_T("标准层数"), 50); m_gridFloor.AppendCol(_T("层高"), 50); m_gridFloor.Clear(); m_gridFloor.Create(this, IDC_LIST_LAYER); m_gridFloor.FitLastCol(); m_gridFloor.SetNoAppendButton(TRUE); m_gridFloor.SetNoDefaultMenu(true); m_gridFloor.Refresh(); TPubFeedData *pData = new TPubFeedData(); pData->m_csName = _T("1层"); pData->m_iNum = 6; pData->m_dHeight = 3000; m_lstData.Append(pData); UpdateGrid(); m_gridFloor.SetCurRowIndex(0); XStringList lstMat; GlobalFunc::GetPipeMaterialList(lstMat); for(int i=0;im_lstFloor.Length(); for(int i=0;im_lstFloor[i]->m_csName); CString csNum, csNg, csQ; csNum.Format(_T("%d"), m_lstData[idx]->m_lstFloor[i]->m_iNum); m_grid.GetCell(i, 1).SetText(csNum); csNg.Format(_T("%.2f"), m_lstData[idx]->m_lstFloor[i]->m_dNg); m_grid.GetCell(i, 2).SetText(csNg); csQ.Format(_T("%.2f"), m_lstData[idx]->m_lstFloor[i]->m_dQ); m_grid.GetCell(i, 3).SetText(csQ); } } void CPrinciplePubFeedDlg::UpdateGrid() { m_gridFloor.Clear(); int len = m_lstData.Length(); for(int i=0;im_csName); CString csNum, csHeight; csNum.Format(_T("%d"), m_lstData[i]->m_iNum); m_gridFloor.GetCell(i, 1).SetText(csNum); csHeight.Format(_T("%.0f"), m_lstData[i]->m_dHeight); m_gridFloor.GetCell(i, 2).SetText(csHeight); } } void CPrinciplePubFeedDlg::UpdateSanGrid2List() { UpdateData(TRUE); long idx = m_gridFloor.m_iOld; if(idx < 0) return; for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csName = (LPCTSTR)(*pRow)[0].GetText(); CString csNum = (LPCTSTR)(*pRow)[1].GetText(); CString csNg = (LPCTSTR)(*pRow)[2].GetText(); CString csQ = (LPCTSTR)(*pRow)[3].GetText(); int iRow = pRow->GetIndex(); m_lstData[idx]->m_lstFloor[iRow]->m_iNum = _ttoi(csNum); m_lstData[idx]->m_lstFloor[iRow]->m_dNg = _tstof(csNg); m_lstData[idx]->m_lstFloor[iRow]->m_dQ = _tstof(csQ); } } void CPrinciplePubFeedDlg::UpdateGrid2List() { UpdateData(TRUE); for(m_gridFloor.MoveToFirst(); !m_gridFloor.IsOut(); m_gridFloor.MoveToNext()){ WDGridRow *pRow = m_gridFloor.CurRow(); CString csName = (LPCTSTR)(*pRow)[0].GetText(); CString csNum = (LPCTSTR)(*pRow)[1].GetText(); CString csHeight = (LPCTSTR)(*pRow)[2].GetText(); int iRow = pRow->GetIndex(); m_lstData[iRow]->m_csName = csName; m_lstData[iRow]->m_iNum = _ttoi(csNum); m_lstData[iRow]->m_dHeight = _tstof(csHeight); } } void CPrinciplePubFeedDlg::OnButtonAdd2() { UpdateGrid2List(); int len = m_lstData.Length(); TPubFeedData *pData = new TPubFeedData(); pData->m_csName = XString(_T("%d层"), len+1); pData->m_iNum = 1; pData->m_dHeight = 3000; m_lstData.Append(pData); UpdateGrid(); } void CPrinciplePubFeedDlg::OnButtonDel2() { UpdateGrid2List(); long idx = m_gridFloor.GetCurRowIndex(); if(idx < 0) return; if(m_lstData.Length() < 1) return; m_gridFloor.m_iOld = -1; m_lstData.Remove(idx); UpdateGrid(); } void CPrinciplePubFeedDlg::OnButtonAdd() { UpdateSanGrid2List(); long idx = m_gridFloor.GetCurRowIndex(); if(idx < 0) return; if(m_lstData.Length() < 1) return; UpdateData(); if(m_iMode == 0) { CTemporaryResourceOverride vTemp; CSanitaryDangDlg dlg; if(dlg.DoModal() == IDOK){ TPubFeedFloorData *pData = new TPubFeedFloorData(); pData->m_csName = dlg.m_csRetName; pData->m_dNg = dlg.m_nRet; pData->m_dQ = dlg.m_nRet2; pData->m_iNum = 1; m_lstData[idx]->m_lstFloor.Append(pData); UpdateSanGrid(); } } else { CTemporaryResourceOverride vTemp; CSantaryIndustryDlg dlg; if(dlg.DoModal() == IDOK){ TPubFeedFloorData *pData = new TPubFeedFloorData(); pData->m_csName = dlg.m_csRetName; pData->m_dNg = dlg.m_nRet; pData->m_dQ = dlg.m_nRet2; pData->m_iNum = 1; m_lstData[idx]->m_lstFloor.Append(pData); UpdateSanGrid(); } } } void CPrinciplePubFeedDlg::OnButtonDel() { UpdateSanGrid2List(); long idx = m_gridFloor.GetCurRowIndex(); if(idx < 0) return; if(m_lstData.Length() < 1) return; long idx2 = m_grid.GetCurRowIndex(); if(idx2 < 0 || !m_grid.IsValidRow(idx2)){ MessageBox(_T("没有选中的行!请点击表格左侧的行标!")); return; } m_lstData[idx]->m_lstFloor.Remove(idx2); UpdateSanGrid(); } void CPrinciplePubFeedDlg::OnPaint() { CPaintDC dc(this); // device context for painting } void CPrinciplePubFeedDlg::OnOK() { UpdateData(TRUE); UpdateSanGrid2List(); UpdateGrid2List(); m_comboMat.GetLBText(m_iMaterial, m_csMaterial); BOOL bHasEq(FALSE); for(int i=0;im_lstFloor.Length(); if(len > 0){ bHasEq = TRUE; break; } } if(!bHasEq){ AfxMessageBox(_T("\n公建给水系统没有用水设备!")); return; } CDialog::OnOK(); }