// PrincipleFeedDlg.cpp : implementation file // #include "stdafx.h" #include #include //#include #include #include "PrincipleFeedDlg.h" #include "DistFloorDlg.h" #include "SanitaryDangDlg.h" #include "DangFloorDlg.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); ///////////////////////////////////////////////////////////////////////////////////////////// // 住宅给水原理 ///////////////////////////////////////////////////////////////////////////////////////////// void PrincipleFeed() { CTemporaryResourceOverride vTemp; CPrincipleFeedDlg dlg; if(dlg.DoModal() != IDOK) return; CString csLayer = LAY_PIPE_FEED; InitPipeLayer(LAY_PIPE_FEED); InitLayer(LAY_EQ_FEED); XPoint ptIns, ptStart, ptEnd, ptFloor; xg_getvar(_T("VIEWCTR"), ptIns); ptIns = Ucs2Wcs(ptIns); PickSet ss(SS_FREE); ss.IncludeBegin(); double nAllHeight = dlg.m_nAllHeight; double nBraLength = dlg.m_nFloorLen; ptStart = ptIns; ads_polar(ptStart, PI/2*3, dlg.m_nHeight*1000, ptStart); ptFloor = ptIns; CString csDwb = g_csDwbPath + _T("TwtSys"); XString xsTmp, xsTmp2, xsTmp4, xsTmp5, xsTmp7; if(LoadDwbBlock(csDwb, _T("00000132"), xsTmp) != RTNORM) //断线 return; if(dlg.m_iStyle == 1){ if(LoadDwbBlock(csDwb, _T("00000005"), xsTmp7) != RTNORM) //水龙头 return; } csDwb = g_csDwbPath + _T("valve"); if(LoadDwbBlock(csDwb, _T("00000295"), xsTmp5) != RTNORM) //阀门 return; ads_polar(ptStart, PI/2, dlg.m_nHeight*1000/2, ptEnd); InsValveByName((const TCHAR*)xsTmp5, ptEnd, csLayer); if(dlg.m_bValve){ if(LoadDwbBlock(csDwb, _T("00000497"), xsTmp2) != RTNORM) //截止阀 return; } if(dlg.m_bAmmeter){ if(LoadDwbBlock(csDwb, _T("00000752"), xsTmp4) != RTNORM) //水表 return; } double nCountHeight = dlg.m_nMinEle; Entity entLast; InitTwtTextStyle(g_csTwtDimStyle); for(int i=0;iSetSysLabel(XString(_T("%d楼立管-1"), i+1)); // pPipe->SetSpareStr(_T("1#立管")); } OPENOBJ_END(); if(dlg.m_bFloor){ //楼板线和字 ads_polar(ptStart, PI, dlg.m_nHeight*1500, ptStart); ads_polar(ptFloor, 0, dlg.m_nFloorLen, ptEnd); CString csText; if(i == dlg.m_iNum) csText = _T("屋面"); else csText = dlg.m_lstName[i]; double nLastHeight(0); if(i > 0) nLastHeight = _tstof(dlg.m_lstHeight[i-1]); nCountHeight += nLastHeight; DrawFloorLine(ptStart, ptEnd, csLayer, csText, nCountHeight,_T("")); } if(i == dlg.m_iNum) break; //干管 XPoint ptPipeS, ptPipeE, ptValve, ptAmmeter; ads_polar(ptFloor, PI/2, dlg.m_nElevation*1000, ptPipeS); BOOL bLeft = FALSE; double nRotate(0); if(dlg.m_iMode == 0) nRotate = 0; else if(dlg.m_iMode == 1){ nRotate = PI; bLeft = TRUE; } //仅绘制一边 公共建筑 或 2户以下的住宅 if(dlg.m_iDoorNum == 1){ ads_polar(ptPipeS, nRotate, dlg.m_nLen, ptPipeE); ads_polar(ptPipeS, nRotate, dlg.m_nLen/4, ptValve); ads_polar(ptPipeS, nRotate, dlg.m_nLen/5*3, ptAmmeter); if(bLeft) DrawSysPipeByLayer(ptPipeE, ptPipeS, csLayer); else DrawSysPipeByLayer(ptPipeS, ptPipeE, csLayer); entLast.GetLast(); OPENOBJ_BEGIN(entLast, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->SetSysLabel(XString(_T("%d楼-1"), i+1)); } OPENOBJ_END(); if(dlg.m_iStyle == 0) InsEquipmentByName(xsTmp, ptPipeE, nRotate, LAY_EQ_FEED, FALSE, FALSE); else{ if(dlg.m_iMode == 0) InsEquipmentByName(xsTmp7, ptPipeE, 0, LAY_EQ_FEED, FALSE, FALSE); else if(dlg.m_iMode == 1) InsEquipmentByName(xsTmp7, ptPipeE, 0, LAY_EQ_FEED, TRUE, FALSE); } entLast.GetLast();//输入住宅参数 OPENOBJ_BEGIN(entLast, AcDb::kForWrite, TDbEquipment, pEquipTmp); if(pEquipTmp){ pEquipTmp->SetDang(dlg.m_nNg); //总当量 pEquipTmp->SetPipeLength(dlg.m_nNumPeople); //每户人数 pEquipTmp->SetNumber(XString(_T("%.2f"), dlg.m_nFactor)); //小时变化系数 pEquipTmp->SetSysBlock(XString(_T("%.d"), dlg.m_iRation));//用水定额 } OPENOBJ_END(); CString csDim; csDim.Format(_T("%.1f人每户/q0=%d/Ng=%.1f每户/Kh=%.1f"), dlg.m_nNumPeople, dlg.m_iRation, dlg.m_nNg, dlg.m_nFactor); XPoint ptText; ads_polar(ptPipeE, 0, g_nTwtDimHeight * DocGetPScale(), ptText); XText text(csDim, ptText, g_nTwtDimHeight * DocGetPScale(), g_nDimScale, g_csTwtDimStyle, LAY_CALC_TEXT); if(bLeft) text.Draw(AcDb::kTextBase, AcDb::kTextRight); else text.Draw(); entLast.GetLast(); WriteXdata(entLast, _T("TG-LAYER"), csLayer); if(dlg.m_bValve) InsValveByName((const TCHAR*)xsTmp2, ptValve, csLayer); if(dlg.m_bAmmeter) InsValveByName((const TCHAR*)xsTmp4, ptAmmeter, csLayer, ptPipeS, ptPipeE); } //2户以上的住宅 else if(dlg.m_iDoorNum > 1){ if(dlg.m_iFloorDir == 0) ads_polar(ptPipeS, nRotate, dlg.m_nLen, ptPipeE); else ads_polar(ptPipeS, nRotate, dlg.m_nLen*dlg.m_iDoorNum, ptPipeE); if(bLeft) DrawSysPipeByLayer(ptPipeE, ptPipeS, csLayer); else DrawSysPipeByLayer(ptPipeS, ptPipeE, csLayer); entLast.GetLast(); OPENOBJ_BEGIN(entLast, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->SetSysLabel(XString(_T("%d楼-1"), i+1)); } OPENOBJ_END(); if(dlg.m_bValve) { XPoint ptMid; ads_polar(ptPipeS, nRotate, dlg.m_nLen/2, ptMid); InsValveByName((const TCHAR*)xsTmp2, ptMid, csLayer); } Entity entLast; entLast.GetLast(); OPENOBJ_BEGIN(entLast, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->SetSysLabel(XString(_T("%d楼-1"), i+1)); } OPENOBJ_END(); if(dlg.m_iFloorDir == 0) //横向绘制 { double nDist = (dlg.m_iDoorNum-1) * 500; XPoint ptBraS, ptBraE, ptBraTmp; ads_polar(ptPipeE, PI/2, nDist/2, ptBraS); ads_polar(ptPipeE, PI/2, -nDist/2, ptBraE); DrawSysPipeByLayer(ptBraS, ptBraE, LAY_PIPE_FEED); ptBraTmp = ptBraS; for(int m=0;mSetDang(dlg.m_nNg); //总当量 pEquipTmp->SetPipeLength(dlg.m_nNumPeople); //每户人数 pEquipTmp->SetNumber(XString(_T("%.2f"), dlg.m_nFactor)); //小时变化系数 pEquipTmp->SetSysBlock(XString(_T("%.d"), dlg.m_iRation));//用水定额 // pEquipTmp->SetDang(-1); } OPENOBJ_END(); CString csDim; csDim.Format(_T("%.1f人每户/q0=%d/Ng=%.1f每户/Kh=%.1f"), dlg.m_nNumPeople, dlg.m_iRation, dlg.m_nNg, dlg.m_nFactor); XPoint ptText; ads_polar(ptBraE, 0, g_nTwtDimHeight * DocGetPScale(), ptText); XText text(csDim, ptText, g_nTwtDimHeight * DocGetPScale(), g_nDimScale, g_csTwtDimStyle, LAY_CALC_TEXT); if(bLeft) text.Draw(AcDb::kTextBase, AcDb::kTextRight); else text.Draw(); entLast.GetLast(); WriteXdata(entLast, _T("TG-LAYER"), csLayer); if(dlg.m_bValve) InsValveByName((const TCHAR*)xsTmp2, ptValve, csLayer); if(dlg.m_bAmmeter) InsValveByName((const TCHAR*)xsTmp4, ptAmmeter, csLayer, ptPipeS, ptPipeE); } } else{ //竖向绘制 XPoint ptBraS, ptBraE, ptBraTmp; for(int m=0;mSetDang(dlg.m_nNg); //总当量 pEquipTmp->SetPipeLength(dlg.m_nNumPeople); //每户人数 pEquipTmp->SetNumber(XString(_T("%.2f"), dlg.m_nFactor)); //小时变化系数 pEquipTmp->SetSysBlock(XString(_T("%.d"), dlg.m_iRation));//用水定额 } OPENOBJ_END(); if(dlg.m_bValve) InsValveByName((const TCHAR*)xsTmp2, ptValve, csLayer); if(dlg.m_bAmmeter) InsValveByName((const TCHAR*)xsTmp4, ptAmmeter, csLayer, ptPipeS, ptPipeE); } } } ads_polar(ptFloor, PI/2, _tstof(dlg.m_lstHeight[i])*1000, 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 = Wcs2Ucs(ptIns); ss.Redraw(2); XPoint ptFinal; actrTransactionManager->flushGraphics(); //acad 刷新 int nRet = DragMovePickSet(ss, _T("\n请点取系统图位置<退出>: "), ptIns, ptFinal); if(nRet != RTNORM){ ss.Erase(); TPipePerDocData *pData = GetCurPipeDocData(); pData->EnableWork(FALSE); return; } ss.Redraw(1); if(dlg.m_iVPipeNum > 1){ if(dlg.m_iFeedDir == 0) ads_polar(ptFinal, PI/2*3, dlg.m_nHeight*1000-dlg.m_nElevation*1000, ptFinal); else ads_polar(ptFinal, PI/2, dlg.m_nHeight*1000*dlg.m_iNum+dlg.m_nElevation*1000, ptFinal); XPoint ptMove = ptFinal; XPushVar vOsMode3(_T("OSMODE"), 0); for(int m=0;mSetSysLabel(XString(_T("干管-%d"),m+1)); } OPENOBJ_END(); entLast.GetLast(); if(dlg.m_iFeedDir == 0) WriteXdata(entLast, _T("TG-FEED-DIR"), _T("自下而上")); else WriteXdata(entLast, _T("TG-FEED-DIR"), _T("自上而下")); if(m == dlg.m_iVPipeNum-1) continue; ssNew2.IncludeBegin(); SHads_command(RTSTR, _T("COPY"), RTPICKS, (TLong_ptr *)ssCopy, RTSTR, _T(""), RT3DPOINT, &ptFinal, RT3DPOINT, &ptMove, RTNONE); ssNew2.IncludeEnd(); for(long n=0;nGetSysLabel(); int idx = csFloor.Find(_T("-")); if(idx > -1){ CString csLeft = csFloor.Left(idx); csLeft.Format(_T("%s-%d"), csLeft, m+2); pPipe->SetSysLabel(csLeft); } } OPENOBJ_END(); } } } } ///////////////////////////////////////////////////////////////////////////// // CPrincipleFeedDlg dialog BOOL CPrincipleFeedDlg::m_bFloor = TRUE; int CPrincipleFeedDlg::m_iNum = 6; CString CPrincipleFeedDlg::m_csMaterial = ""; double CPrincipleFeedDlg::m_nNumPeople = 4; double CPrincipleFeedDlg::m_nFactor = 2.8; int CPrincipleFeedDlg::m_iRation = 250; double CPrincipleFeedDlg::m_nNg = 4; CPrincipleFeedDlg::CPrincipleFeedDlg(CWnd* pParent /*=NULL*/) : CDialog(CPrincipleFeedDlg::IDD, pParent), m_spinFloor(1), m_spinLen(50), m_spinDoor(1) { //{{AFX_DATA_INIT(CPrincipleFeedDlg) m_iMode = 0; m_iStyle = 0; m_bValve = TRUE; m_bAmmeter = FALSE; m_nFloorLen = 500; m_nHeight = 3; m_nElevation = 0.3; m_nLen = 600; m_iDoorNum = 1; m_iMaterial = -1; m_iVPipeDist = 10000; m_iVPipeNum = 1; m_iFeedDir = 0; m_iFloorDir = 0; //}}AFX_DATA_INIT m_nAllHeight = 0; m_nMinEle = 0; } void CPrincipleFeedDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPrincipleFeedDlg) DDX_Control(pDX, IDC_COMBO_MATERIAL, m_comboMat); DDX_Control(pDX, IDC_SPIN_DOORNUM, m_spinDoor); DDX_Control(pDX, IDC_SPIN_LEN, m_spinLen); DDX_Control(pDX, IDC_SPIN_FLOOR, m_spinFloor); DDX_Radio(pDX, IDC_RADIO_TYPE1, m_iMode); DDX_Radio(pDX, IDC_RADIO_STYLE1, m_iStyle); DDX_Check(pDX, IDC_CHECK_VALVE, m_bValve); DDX_Check(pDX, IDC_CHECK_AMMETER, m_bAmmeter); DDX_Text(pDX, IDC_FLOOR_LEN2, m_nFloorLen); DDX_Text(pDX, IDC_EDIT_FOOR_HEIGHT, m_nHeight); DDX_Text(pDX, IDC_EDIT_ELEVATION, m_nElevation); DDX_Text(pDX, IDC_FLOOR_LEN, m_nLen); DDX_Text(pDX, IDC_EDIT_DOORNUM, m_iDoorNum); DDX_CBIndex(pDX, IDC_COMBO_MATERIAL, m_iMaterial); DDX_Text(pDX, IDC_VPIPE_DIST, m_iVPipeDist); DDX_Text(pDX, IDC_VPIPE_NUM, m_iVPipeNum); DDX_Radio(pDX, IDC_RADIO_FEEDDIR, m_iFeedDir); DDX_Text(pDX, IDC_EDIT_RATION, m_iRation); DDX_Text(pDX, IDC_EDIT_HOUR_FACTOR, m_nFactor); DDX_Text(pDX, IDC_EDIT_PEOPLE_NUM, m_nNumPeople); DDX_Text(pDX, IDC_FLOOR_NUM, m_iNum); DDX_Check(pDX, IDC_CHECK_FLOOR, m_bFloor); DDX_Text(pDX, IDC_EDIT_DOOR_DANG, m_nNg); DDX_CBIndex(pDX, IDC_COMBO_FLOOR_DIR, m_iFloorDir); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPrincipleFeedDlg, CDialog) //{{AFX_MSG_MAP(CPrincipleFeedDlg) ON_WM_PAINT() ON_BN_CLICKED(IDC_RADIO_TYPE1, OnRadioType1) ON_BN_CLICKED(IDC_RADIO_TYPE2, OnRadioType2) ON_BN_CLICKED(IDC_BUTTON_HEIGHT, OnButtonHeight) ON_BN_CLICKED(IDC_BUTTON_RATION, OnButtonRation) ON_BN_CLICKED(IDC_BUTTON_FACTOR, OnButtonFactor) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPrincipleFeedDlg message handlers BOOL CPrincipleFeedDlg::OnInitDialog() { CDialog::OnInitDialog(); m_spinFloor.SetRange(1, 50); m_spinLen.SetRange(50, 5000); m_spinDoor.SetRange(1, 50); XStringList lstMat; GetPipeMaterialList(lstMat); for(int i=0;i -1) if(csText.Find(_T("地下")) > -1 || csText.Find(_T("-")) > -1)//添加-1F -2F表示楼层 zxl 2011.10.20 add m_nMinEle -= _tstof(m_lstHeight[i]); } if(m_nLen < 1) m_nLen = 10; if(m_bAmmeter && m_bValve && m_nLen < 10) m_nLen = 600; CDialog::OnOK(); } void CPrincipleFeedDlg::OnButtonRation() { //AfxMessageBox(_T("住宅最高日生活用水定额\n\n1.普通住宅Ⅰ (有大便器、洗涤盆) 85~150\n2.普通住宅Ⅱ(有大便器、洗脸盆、洗涤盆、洗衣机、 热水器和沐浴设备) 130~300\n3.普通住宅Ⅲ(有大便器、洗脸盆、洗涤盆、洗衣机、 集中热水供应和沐浴设备) 180~320\n4.别墅 (有大便器、洗脸盆、洗涤盆、洗衣机、洒水栓,家用热水机组和沐浴设备) 200~350\n\n")); RBList rbCmd=ads_buildlist(RTSTR, _T("IPrincipleFeed"), NULL); resbuf *rbRes=NULL; if(ads_invoke(rbCmd, &rbRes) == RTNORM && rbRes) { ads_relrb(rbRes); } } void CPrincipleFeedDlg::OnButtonFactor() { //AfxMessageBox(_T("住宅最高日生活用水小时变化系数Kh\n\n1.普通住宅Ⅰ (有大便器、洗涤盆) 3.0~2.5\n2.普通住宅Ⅱ(有大便器、洗脸盆、洗涤盆、洗衣机、 热水器和沐浴设备) 2.8~2.3\n3.普通住宅Ⅲ(有大便器、洗脸盆、洗涤盆、洗衣机、 集中热水供应和沐浴设备) 2.5~2.0\n4.别墅 (有大便器、洗脸盆、洗涤盆、洗衣机、洒水栓,家用热水机组和沐浴设备) 2.3~1.8\n\n")); RBList rbCmd=ads_buildlist(RTSTR, _T("IPrincipleFeed"), NULL); resbuf *rbRes=NULL; if(ads_invoke(rbCmd, &rbRes) == RTNORM && rbRes) { ads_relrb(rbRes); } }