// VerticalSectionFeedDlg.cpp : implementation file // #include "stdafx.h" #include #include #include #include #include "VerticalSectionFeedDlg.h" #include "WellCalcModifyEleDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern BOOL SearchOutdoorWell(Entity ent, Entity entEnd, SSearchPipeList *pListAll, PickSet &ssAll, BOOL bFeedSys); //extern void DrawVerticalSectionFeed(DList &lstWellSys, int iScaleX, int iScaleY, double nGridScale, double nDeepStart); extern void DrawVerticalSectionFeed(DList &lstWellSys, int iScaleX, int iScaleY, double nGridScale, double nDeepStart, bool bDimEle, bool bDimDist, const std::map &data); extern void SetPipeLabelType(TDbPipe *pPipe); //*************************************************************************************************** // 编辑给水纵断 //*************************************************************************************************** int EditVerticalSectionFeed(AcDbObjectId id) { if(!id) return RTERROR; CTemporaryResourceOverride vTemp; CVerticalSectionFeedDlg dlg(1); // zxl 2013.12.5 add std::map data; data[TPipeSys::kFeedWater] = false; data[TPipeSys::kDirtWater] = false; data[TPipeSys::kUselessWater] = false; data[TPipeSys::kRainWater] = false; data[TPipeSys::kUsedWater] = false; data[TPipeSys::kFireFighting] = false; data[TPipeSys::kOther] = false; // DList lstWellSys; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbVerticalSectionFeed, pVS); if(pVS){ dlg.m_bDimEle = pVS->IsDimEle(); dlg.m_bDimDist = pVS->IsDimDist(); dlg.m_csSheetHead = pVS->GetSheetHead(); // zxl 2012.08.20 add pVS->GetWellDatas(dlg.m_lstFeedWellSys); dlg.m_iX = pVS->GetScaleX(); dlg.m_iY = pVS->GetScaleY(); if(fabs(pVS->GetGridScale() - 0.5) < 0.01) dlg.m_iGridScale = 0; else if(fabs(pVS->GetGridScale() - 1) < 0.01) dlg.m_iGridScale = 1; else if(fabs(pVS->GetGridScale() - 2) < 0.01) dlg.m_iGridScale = 2; else if(fabs(pVS->GetGridScale()) < 0.01) dlg.m_iGridScale = 3; // zxl 2013.12.5 add std::map::iterator it; for (it = data.begin(); it != data.end(); it++) { (*it).second = pVS->IsShowCrossPipe(it->first); } } OPENOBJ_END(); // dlg.GetFeedWellListData(lstWellSys, dlg.m_lstFeedWellSys); OPENOBJ_BEGIN(dlg.m_lstFeedWellSys[0]->m_ID, AcDb::kForRead, TDbWell, pWell); if(!pWell){ adsout << _T("\n平面图信息已经丢失!请确认平面图和纵断面图在一张DWG中。"); return RTERROR; } OPENOBJ_END(); dlg.SetShowPipeData(data);// zxl 2013.12.5 add if(dlg.DoModal() == IDOK){ // lstWellSys.Reset(); // dlg.GetRainWellListData(lstWellSys, dlg.m_lstFeedWellSys); dlg.GetShowPipeData(data);// zxl 2013.12.5 add OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbVerticalSectionFeed, pVS); if(pVS){ if(dlg.m_iGridScale == 0) pVS->SetGridScale(0.5); else if(dlg.m_iGridScale == 1) pVS->SetGridScale(1); else if(dlg.m_iGridScale == 2) pVS->SetGridScale(2); else if(dlg.m_iGridScale == 3) pVS->SetGridScale(0); pVS->SetWellDatas(dlg.m_lstFeedWellSys); pVS->SetScaleX(dlg.m_iX); pVS->SetScaleY(dlg.m_iY); pVS->Calc(); // zxl 2013.12.5 add pVS->SetDimEle(dlg.m_bDimEle ? true : false); pVS->SetDimDist(dlg.m_bDimDist ? true : false); std::map::iterator it; for (it = data.begin(); it != data.end(); it++) { pVS->SetShowCrossPipe(it->first,it->second); } } OPENOBJ_END(); } return 1; } //*************************************************************************************************** // 给水纵断 //*************************************************************************************************** void VerticalSectionFeed(Entity entStartWell) { Entity entEndWell; RBList rbMask(RTDXF0, _T("ATS_WELL"), 8, LAY_WELL_FEED, NULL); SelectEntity(_T("\n请选择终止井:<自动搜索>"), entEndWell, rbMask); SSearchPipeList *pListAll = new SSearchPipeList(); PickSet ssAll(SS_FREE); ssAll += entStartWell; if(!SearchOutdoorWell(entStartWell, entEndWell, pListAll, ssAll, TRUE)){ delete pListAll; return; } if(ssAll.Length() < 3){ AfxMessageBox(_T("系统数据不全, 请检查管线是否标注管径, 管线流动方向是否不一致!")); delete pListAll; return; } actrTransactionManager->flushGraphics(); //acad 刷新 ssAll.Redraw(3); long len = ssAll.Length(); TCHAR szTmp[256]; int rett = ads_getstring(NULL, _T("\n需要计算的管网系统已高亮显示:<计算>"), szTmp); if(rett == RTCAN){ ssAll.Redraw(4); delete pListAll; return; } CTemporaryResourceOverride vTemp; CVerticalSectionFeedDlg dlg(0); double dDeep(1); if(fabs(pListAll->m_nStartPress) < 0.0001){//没有进行过计算 ads_getreal(_T("\n请输入覆土厚度<1米>:"), &dDeep); } else dDeep = 0; BOOL bRet = dlg.GetFeedWellListData(pListAll, dlg.m_lstFeedWellSys); if(!bRet){ AfxMessageBox(_T("2管线相交,系统要求必须有井或节点!")); delete pListAll; //删除链头 ssAll.Redraw(4); return; } delete pListAll; //删除链头 dlg.GetWellEleInfo(dlg.m_lstFeedWellSys, dDeep); dlg.m_ssAll += ssAll; dlg.DoModal(); ssAll.Redraw(4); return; } ///////////////////////////////////////////////////////////////////////////// // CVerticalSectionFeedDlg dialog const UINT nMenuId = 100; // zxl 2013.12.5 add const UINT nMenuTypeId = 1000; // zxl 2013.12.5 add int CVerticalSectionFeedDlg::m_iLengthType = 0;// zxl 2013.12.5 add CVerticalSectionFeedDlg::CVerticalSectionFeedDlg(int mode, CWnd* pParent /*=NULL*/) : CDialog(CVerticalSectionFeedDlg::IDD, pParent), m_ssAll(SS_FREE) { //{{AFX_DATA_INIT(CVerticalSectionFeedDlg) m_iGridScale = 0; m_csX = _T("100"); m_csY = _T("50"); m_csText = _T("覆土厚度(m)"); m_iType = 1; m_csSheetHead = _T(""); //}}AFX_DATA_INIT m_iOpenMode = mode; // zxl 2013.12.5 add m_bDimEle = FALSE; m_bDimDist = FALSE; InitMapData(); m_pMenu = NULL; m_pMenuLength = NULL; } void CVerticalSectionFeedDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CVerticalSectionFeedDlg) DDX_CBIndex(pDX, IDC_COMBO_GRID, m_iGridScale); DDX_CBString(pDX, IDC_COMBO_X, m_csX); DDX_CBString(pDX, IDC_COMBO_Y, m_csY); DDX_Text(pDX, IDC_STATIC_TEXT, m_csText); DDX_Radio(pDX, IDC_RADIO_TYPE, m_iType); DDX_Check(pDX, IDC_CHECK_DIMELE, m_bDimEle); DDX_Check(pDX, IDC_CHECK_DIMDIST, m_bDimDist); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CVerticalSectionFeedDlg, CDialog) //{{AFX_MSG_MAP(CVerticalSectionFeedDlg) //ON_BN_CLICKED(IDC_BUTTON_TODWG, OnButtonTodwg) ON_BN_CLICKED(IDC_RADIO_TYPE, OnRadioType) ON_BN_CLICKED(IDC_RADIO_TYPE2, OnRadioType2) ON_BN_CLICKED(IDC_BUTTON_MODIFYELE, OnButtonModifyele) ON_BN_CLICKED(IDC_BUTTON_SHOW, OnButtonShow) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CVerticalSectionFeedDlg message handlers BOOL CVerticalSectionFeedDlg::OnInitDialog() { CDialog::OnInitDialog(); if(m_iOpenMode == 1){//编辑对话框 CWnd *pWnd2 = GetDlgItem(IDOK); pWnd2->SetWindowText(_T("更新")); } // m_csText = "覆土厚度(m)"; // UpdateData(FALSE); m_grid.Clear(); m_grid.Create(this, IDC_LIST_PIPE); m_grid.AppendCol(_T("起点"), 40); m_grid.AppendCol(_T("终点"), 40); m_grid.AppendCol(_T("管长m"), 66); m_grid.AppendCol(_T("管径mm"), 66); m_grid.AppendCol(_T("起点"), 60); m_grid.AppendCol(_T("终点"), 60); m_grid.AppendCol(_T("起点"), 60); m_grid.AppendCol(_T("终点"), 60); COLORREF color = RGB(255,0,0); m_grid.GetCol(3).SetTextColor(color); // m_grid.GetCol(4).SetTextColor(color); // m_grid.GetCol(5).SetTextColor(color); m_grid.GetCol(6).SetTextColor(color); m_grid.GetCol(7).SetTextColor(color); m_grid.GetCol(0).SetReadOnly(); m_grid.GetCol(1).SetReadOnly(); m_grid.GetCol(2).SetReadOnly(); m_grid.GetCol(4).SetReadOnly(); m_grid.GetCol(5).SetReadOnly(); m_grid.FitLastCol(); m_grid.SetNoAppendButton(TRUE); m_grid.SetNoDefaultMenu(true); UpdateGrid(); if(m_iOpenMode == 1){//编辑对话框 m_csX.Format(_T("%d"), m_iX); m_csY.Format(_T("%d"), m_iY); UpdateData(FALSE); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CVerticalSectionFeedDlg::OnRadioType() { UpdateData(TRUE); m_csText = "管中标高(m)"; UpdateData(FALSE); UpdateGrid(); } void CVerticalSectionFeedDlg::OnRadioType2() { UpdateData(TRUE); m_csText = "覆土厚度(m)"; UpdateData(FALSE); UpdateGrid(); } void CVerticalSectionFeedDlg::GetWellEleInfo(DList &lstWellSys, double dDeep) { for(int i=1;im_bIsWell){ //井 CString csName1 = lstWellSys[i-2]->m_csName; CString csName2 = lstWellSys[i]->m_csName; if(csName1 == _T("") || csName2 == _T("")){ break; } CString csName = csName1 + csName2; if(dDeep > 0.001){ double dDn = (double)lstWellSys[i-1]->m_iDn/2000.0; double dFrontEle = lstWellSys[i]->m_nUpEle - dDeep - dDn; lstWellSys[i]->m_nFrondDownEle = dFrontEle; } else{ AcDbObjectId id = lstWellSys[i]->m_ID; OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbWell, pEquip); if(pEquip){ int num = pEquip->GetInterfaceNum(); for(int m=0;mGetInterface(m, iFace); AcDbObjectId idPipe = iFace.m_idPipe; CString csPipeName; OPENOBJ_BEGIN(idPipe, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ csPipeName = pPipe->GetSysLabel(); } OPENOBJ_END(); CString csLabel = pEquip->GetISysLabel(m); if(csPipeName == csName) lstWellSys[i]->m_nFrondDownEle = _tstof(csLabel); } } OPENOBJ_END(); } } else {//得到管线的详细信息 int len = lstWellSys[i]->m_lstID.Length(); lstWellSys[i]->m_iDn = 0; for(int j=0;jm_lstID[j]; OPENOBJ_BEGIN(idPipe, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ int iDn = (int)pPipe->GetDnDiameter(); lstWellSys[i]->m_iDn = iDn; double dPipeLen = pPipe->Length(); lstWellSys[i]->m_nLength += dPipeLen; } OPENOBJ_END(); } // if(!DocGetMeterUnitDraw()) // lstWellSys[i]->m_nLength = lstWellSys[i]->m_nLength/1000; } } for(i=0;im_bIsWell){ //井 CString csName1 = lstWellSys[i]->m_csName; CString csName2 = lstWellSys[i+2]->m_csName; if(csName1 == _T("") || csName2 == _T("")){ break; } CString csName = csName1 + csName2; if(dDeep > 0.001){ double dDn = (double)lstWellSys[i+1]->m_iDn/2000.0; double dFrontEle = lstWellSys[i]->m_nUpEle - dDeep - dDn; lstWellSys[i]->m_nDownEle = dFrontEle; } else{ AcDbObjectId id = lstWellSys[i]->m_ID; OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbWell, pEquip); if(pEquip){ int num = pEquip->GetInterfaceNum(); for(int m=0;mGetInterface(m, iFace); AcDbObjectId idPipe = iFace.m_idPipe; CString csPipeName; OPENOBJ_BEGIN(idPipe, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ csPipeName = pPipe->GetSysLabel(); } OPENOBJ_END(); CString csLabel = pEquip->GetISysLabel(m); if(csPipeName == csName) lstWellSys[i]->m_nDownEle = _tstof(csLabel); } } OPENOBJ_END(); } } } } /* //已知给水系统链表lstFeedWellSys, 返回雨水系统链表lstWellSys BOOL CVerticalSectionFeedDlg::GetRainWellListData(DList &lstWellSys, DList &lstFeedWellSys) { BOOL bRet = TRUE; for(int i=0;im_lstID.Length(); if(lstFeedWellSys[i]->m_bIsWell || len2 == 1){ TWellData *pList = new TWellData(); pList->m_csName = lstFeedWellSys[i]->m_csName; pList->m_iDn = lstFeedWellSys[i]->m_iDn; pList->m_nLength = lstFeedWellSys[i]->m_nLength; pList->m_nGroundEle = lstFeedWellSys[i]->m_nGroundEle; pList->m_nUpEle = lstFeedWellSys[i]->m_nUpEle; pList->m_nDownEle = lstFeedWellSys[i]->m_nDownEle; pList->m_nFrondDownEle = lstFeedWellSys[i]->m_nFrondDownEle; pList->m_nDeep = lstFeedWellSys[i]->m_nDeep; pList->m_bIsWell = lstFeedWellSys[i]->m_bIsWell; pList->m_bIsDropWell = lstFeedWellSys[i]->m_bIsDropWell;; pList->m_nWellRadius = lstFeedWellSys[i]->m_nWellRadius; if(lstFeedWellSys[i]->m_bIsWell) pList->m_ID = lstFeedWellSys[i]->m_ID; else pList->m_ID = *lstFeedWellSys[i]->m_lstID[0]; pList->m_nI = lstFeedWellSys[i]->m_nI; pList->m_nSpare = lstFeedWellSys[i]->m_nSpare; lstWellSys.Append(pList); } else{ for(int j=0;jm_csName = lstFeedWellSys[i]->m_csName; pList->m_nGroundEle = lstFeedWellSys[i]->m_nGroundEle; pList->m_nUpEle = lstFeedWellSys[i]->m_nUpEle; pList->m_nDownEle = lstFeedWellSys[i]->m_nDownEle; pList->m_nFrondDownEle = lstFeedWellSys[i]->m_nFrondDownEle; pList->m_nDeep = lstFeedWellSys[i]->m_nDeep; pList->m_bIsWell = lstFeedWellSys[i]->m_bIsWell; pList->m_bIsDropWell = lstFeedWellSys[i]->m_bIsDropWell;; pList->m_nWellRadius = lstFeedWellSys[i]->m_nWellRadius; pList->m_ID = *lstFeedWellSys[i]->m_lstID[j]; OPENOBJ_BEGIN(pList->m_ID, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ pList->m_nLength = pPipe->Length(); // if(!DocGetMeterUnitDraw()) // pList->m_nLength = pList->m_nLength/1000; } OPENOBJ_END(); // pList->m_nLength = lstFeedWellSys[i]->m_nLength; pList->m_iDn = lstFeedWellSys[i]->m_iDn; pList->m_nI = lstFeedWellSys[i]->m_nI; pList->m_nSpare = lstFeedWellSys[i]->m_nSpare; lstWellSys.Append(pList); } } } return bRet; } // 已知雨水系统链表lstWellSys,返回给水系统链表lstFeedWellSys BOOL CVerticalSectionFeedDlg::GetFeedWellListData(DList &lstWellSys, DList &lstFeedWellSys) { BOOL bRet = TRUE; int len = lstWellSys.Length(); for(int i=0;im_bIsWell){ TFeedWellData *pNewList = new TFeedWellData(); pNewList->m_csName = lstWellSys[i]->m_csName; pNewList->m_iDn = lstWellSys[i]->m_iDn; pNewList->m_nLength = lstWellSys[i]->m_nLength; pNewList->m_nGroundEle = lstWellSys[i]->m_nGroundEle; pNewList->m_nUpEle = lstWellSys[i]->m_nUpEle; pNewList->m_nDownEle = lstWellSys[i]->m_nDownEle; pNewList->m_nFrondDownEle = lstWellSys[i]->m_nFrondDownEle; pNewList->m_nDeep = lstWellSys[i]->m_nDeep; pNewList->m_bIsWell = lstWellSys[i]->m_bIsWell; pNewList->m_bIsDropWell = lstWellSys[i]->m_bIsDropWell;; pNewList->m_nWellRadius = lstWellSys[i]->m_nWellRadius; pNewList->m_ID = lstWellSys[i]->m_ID; pNewList->m_nI = lstWellSys[i]->m_nI; pNewList->m_nSpare = lstWellSys[i]->m_nSpare; lstFeedWellSys.Append(pNewList); } else{ //管线 TFeedWellData *pNewList = new TFeedWellData(); pNewList->m_csName = lstWellSys[i]->m_csName; pNewList->m_iDn = lstWellSys[i]->m_iDn; pNewList->m_nGroundEle = lstWellSys[i]->m_nGroundEle; pNewList->m_nUpEle = lstWellSys[i]->m_nUpEle; pNewList->m_nDownEle = lstWellSys[i]->m_nDownEle; pNewList->m_nFrondDownEle = lstWellSys[i]->m_nFrondDownEle; pNewList->m_nDeep = lstWellSys[i]->m_nDeep; pNewList->m_bIsWell = lstWellSys[i]->m_bIsWell; pNewList->m_bIsDropWell = lstWellSys[i]->m_bIsDropWell;; pNewList->m_nWellRadius = lstWellSys[i]->m_nWellRadius; pNewList->m_nI = lstWellSys[i]->m_nI; pNewList->m_nSpare = lstWellSys[i]->m_nSpare; int idx = i; pNewList->m_nLength = 0; while (idx < len) { AcDbSoftPointerId id = lstWellSys[idx]->m_ID; pNewList->m_nLength += lstWellSys[idx]->m_nLength; pNewList->m_lstID.Append(new AcDbSoftPointerId(id)); i = idx; idx ++; if(lstWellSys[idx]->m_bIsWell) break; } lstFeedWellSys.Append(pNewList); } } return bRet; } */ // 已知管线系统链表pListAll, 返回给水系统链表lstWellSys, 如果 dDeep>0, 则作为默认覆土厚度 BOOL CVerticalSectionFeedDlg::GetFeedWellListData(SSearchPipeList *pListAll, DList &lstWellSys) { BOOL bRet = TRUE; while(1){ TFeedWellData *pNewList = new TFeedWellData(); if(pListAll->m_iType == 3){ //井 pNewList->m_bIsWell = TRUE; AcDbObjectId id = pListAll->m_ID; ads_name ent; acdbGetAdsName(ent, id); CString csWellRadius = ReadXdata(ent, _T("TG-WELL-RADIUS")); pNewList->m_nWellRadius = _tstof(csWellRadius)/2.0; //转化为半径 if(pNewList->m_nWellRadius < 0.1) pNewList->m_nWellRadius = 600; pNewList->m_nSpare = 150;//沉沙井 pNewList->m_ID = id; pNewList->m_csName = pListAll->m_csName; pNewList->m_nUpEle = pListAll->m_nDang; //井地面标高 pNewList->m_nDownEle = pListAll->m_nStartPress; //跌水井底标高 pNewList->m_nFrondDownEle = 0; //跌水井底标高 // if(dDeep > 0.0001){ // pNewList->m_nDownEle = pNewList->m_nUpEle - dDeep; // pNewList->m_nFrondDownEle = pNewList->m_nDownEle; // } CString csGroundEle = ReadXdata(ent, _T("TG-WELL-GroundEle")); pNewList->m_nGroundEle = _tstof(csGroundEle); if(csGroundEle == "") pNewList->m_nGroundEle = pNewList->m_nUpEle; } else if(pListAll->m_iType == 0){ //管 // pNewList->m_iDn = pListAll->m_iDn; // pNewList->m_nLength = pListAll->m_nLength; // if(!DocGetMeterUnitDraw()) pNewList->m_nLength = 0; pNewList->m_bIsWell = FALSE; AcDbSoftPointerId id = pListAll->m_ID; pNewList->m_ID = id;// zxl 2013.12.5 add pNewList->m_lstID.Append(new AcDbSoftPointerId(id)); if(pListAll->m_lstNode.Length() > 1) return FALSE; else if(pListAll->m_lstNode.Length() == 0) break; SSearchPipeList *pList = pListAll->m_lstNode[0]; while(pList->m_iType == -1){//继续得到下段管线 if(pList->m_lstNode.Length() > 1) return FALSE; else if(pList->m_lstNode.Length() == 0) return FALSE; pList = pList->m_lstNode[0]; if(pList->m_iType == 0){ AcDbSoftPointerId id2 = pList->m_ID; pListAll = pList; pNewList->m_lstID.Append(new AcDbSoftPointerId(id2)); if(pList->m_lstNode.Length() > 1) return FALSE; else if(pList->m_lstNode.Length() == 0) return FALSE; pList = pList->m_lstNode[0]; } else break; } } lstWellSys.Append(pNewList); long len = pListAll->m_lstNode.Length(); if(len > 1) return FALSE; else if(len == 0) break; pListAll = pListAll->m_lstNode[0]; } return bRet; } void CVerticalSectionFeedDlg::UpdateGrid() { m_grid.Clear(); int idx = 0; for(int i=0;im_bIsWell){ //井 if(i == m_lstFeedWellSys.Length()-2) break; CString csName1 = m_lstFeedWellSys[i]->m_csName; CString csName2 = m_lstFeedWellSys[i+2]->m_csName; double dDn = m_lstFeedWellSys[i+1]->m_iDn; if(csName1 == _T("") || csName2 == _T("")){ MessageBox(_T("请检查井是否都编号。")); break; } m_grid.AppendRow(); m_grid.GetCell(idx, 0).SetText(csName1); m_grid.GetCell(idx, 1).SetText(csName2); double nEle = m_lstFeedWellSys[i]->m_nUpEle; double nDownEle = m_lstFeedWellSys[i]->m_nDownEle; if(m_iType == 1){ nDownEle = nEle - nDownEle - dDn/2000.0; } CString csWellUpEle, csDeep, csDownEle, csWellUpEle2, csDeep2, csDownEle2; csDownEle.Format(_T("%.3f"), nDownEle); csWellUpEle.Format(_T("%.3f"), nEle); nEle = m_lstFeedWellSys[i+2]->m_nUpEle; nDownEle = m_lstFeedWellSys[i+2]->m_nFrondDownEle; if(m_iType == 1){ nDownEle = nEle - nDownEle - dDn/2000.0; } csDownEle2.Format(_T("%.3f"), nDownEle); csWellUpEle2.Format(_T("%.3f"), nEle); m_grid.GetCell(idx, 4).SetText(csWellUpEle); m_grid.GetCell(idx, 5).SetText(csWellUpEle2); m_grid.GetCell(idx, 6).SetText(csDownEle); m_grid.GetCell(idx, 7).SetText(csDownEle2); } else{ //管 if(i == m_lstFeedWellSys.Length() - 1) continue; int iDn = m_lstFeedWellSys[i]->m_iDn; CString csDn, csPipeLen; if(iDn > 0) csDn.Format(_T("%d"), iDn); csPipeLen.Format(_T("%.2f"), m_lstFeedWellSys[i]->m_nLength); m_grid.GetCell(idx, 2).SetText(csPipeLen); m_grid.GetCell(idx, 3).SetText(csDn); idx++; } } } void CVerticalSectionFeedDlg::OnOK() { UpdateData(TRUE); double dDeep(0); for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csName1 = (*pRow)[0].GetText().cs(); CString csName2 = (*pRow)[1].GetText().cs(); CString csName; CString csDn = (*pRow)[3].GetText().cs(); csName = csName1 + csName2; if(csName == _T("")) break; CString csUpEle = (*pRow)[4].GetText().cs(); CString csDownEle = (*pRow)[6].GetText().cs(); CString csUpEle2 = (*pRow)[5].GetText().cs(); CString csDownEle2 = (*pRow)[7].GetText().cs(); double dDownEle1 = _tstof(csDownEle); double dDownEle2 = _tstof(csDownEle2); double dUpEle1 = _tstof(csUpEle); double dUpEle2 = _tstof(csUpEle2); if(m_iType == 1){//把覆土厚度换算为管中标高 dDownEle1 = dUpEle1 - dDownEle1 - _tstof(csDn)/2000.0; dDownEle2 = dUpEle2 - dDownEle2 - _tstof(csDn)/2000.0; } for(int i=0;im_bIsWell){ CString csNameF = m_lstFeedWellSys[i-1]->m_csName; CString csNameB = m_lstFeedWellSys[i+1]->m_csName; if(csName == csNameF+csNameB){ m_lstFeedWellSys[i]->m_iDn = _ttoi(csDn); for(int m=0;mm_lstID.Length();m++){ OPENOBJ_BEGIN(*m_lstFeedWellSys[i]->m_lstID[m], AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->SetSysLabel(csName); } OPENOBJ_END(); } } } else{ m_lstFeedWellSys[i]->m_bIsDropWell = TRUE; if(m_lstFeedWellSys[i]->m_csName == csName1){ m_lstFeedWellSys[i]->m_nUpEle = dUpEle1; m_lstFeedWellSys[i]->m_nDownEle = dDownEle1; } else if(m_lstFeedWellSys[i]->m_csName == csName2){ m_lstFeedWellSys[i]->m_nUpEle = dUpEle2; m_lstFeedWellSys[i]->m_nFrondDownEle = dDownEle2; if(i == m_lstFeedWellSys.Length()-1) m_lstFeedWellSys[i]->m_nDownEle = dDownEle2; } } } } OnButtonTodwg(); m_iX = _ttoi(m_csX); m_iY = _ttoi(m_csY); ResetWellStake();// zxl 2012.08.20 add if(m_iOpenMode == 1){ CDialog::OnOK(); return; } if(m_lstFeedWellSys.Length() < 2) return; if(m_iX < 1 || m_iY < 1) return; dDeep = m_lstFeedWellSys[0]->m_nUpEle - m_lstFeedWellSys[0]->m_nDownEle; double nGridScale(0); if(m_iGridScale == 0) nGridScale = 0.5; else if(m_iGridScale == 1) nGridScale = 1; else if(m_iGridScale == 2) nGridScale = 2; else if(m_iGridScale == 3) nGridScale = 0; CDialog::OnOK(); // DList lstWellSys; // GetRainWellListData(lstWellSys, m_lstFeedWellSys); // zxl 2013.12.5 modify //DrawVerticalSectionFeed(m_lstFeedWellSys, m_iX, m_iY, nGridScale, dDeep); std::map data; GetShowPipeData(data); DrawVerticalSectionFeed(m_lstFeedWellSys, m_iX, m_iY, nGridScale, dDeep, m_bDimEle ? true : false, m_bDimDist ? true : false, data); } void CVerticalSectionFeedDlg::OnButtonTodwg() { UpdateData(TRUE); if(m_lstFeedWellSys.Length() < 3) return; HideDialog(this, TRUE); for(int i=0;im_bIsWell){ //井 AcDbObjectId id = m_lstFeedWellSys[i]->m_ID; XPoint ptLoc; CString csEleLow, csEleUp; csEleLow.Format(_T("%.2f"), m_lstFeedWellSys[i]->m_nDownEle); csEleUp.Format(_T("%.2f"), m_lstFeedWellSys[i]->m_nUpEle); ads_name ent; acdbGetAdsName(ent, id); WriteXdata(ent, _T("TG-WELL-GroundEle"), XString(_T("%.3f"), m_lstFeedWellSys[i]->m_nGroundEle)); // cet 2012.6.6 add 更新井半径 CString strWellRadius; strWellRadius.Format(_T("%f"), m_lstFeedWellSys[i]->m_nWellRadius * 2); WriteXdata(ent, _T("TG-WELL-RADIUS"), strWellRadius); OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbWell, pEquip); if(pEquip){ pEquip->SetDropWell(TRUE); double nPipeDownEle = m_lstFeedWellSys[i]->m_nFrondDownEle; double nPipeDownEle2 = m_lstFeedWellSys[i]->m_nDownEle; if(i>1){ //设置前管道 管底标高 int lenPipe = m_lstFeedWellSys[i-1]->m_lstID.Length(); AcDbObjectId idPipe = *m_lstFeedWellSys[i-1]->m_lstID[lenPipe-1]; pEquip->SetPipeEndEle(idPipe, XString(_T("%.3f"), m_lstFeedWellSys[i]->m_nFrondDownEle)); } if(i < m_lstFeedWellSys.Length()-1){ //设置后管道 管底标高 AcDbObjectId idPipe = *m_lstFeedWellSys[i+1]->m_lstID[0]; pEquip->SetPipeEndEle(idPipe, XString(_T("%.3f"), m_lstFeedWellSys[i]->m_nDownEle)); } ptLoc = pEquip->GetLocation(); //搜索这个井其他连接管,最低标高才是井标高 int num = pEquip->GetInterfaceNum(); double nEleOther = m_lstFeedWellSys[i]->m_nDownEle; for(int m=0;mGetInterface(m, iFace); CString csLabel = pEquip->GetISysLabel(m); if(csLabel != _T("") && nEleOther - _tstof(csLabel) > 0.001) nEleOther = _tstof(csLabel); } if(fabs(nEleOther - m_lstFeedWellSys[i]->m_nDownEle) < 0.001) pEquip->SetWellEleDown(m_lstFeedWellSys[i]->m_nDownEle); pEquip->SetWellEleUp(m_lstFeedWellSys[i]->m_nUpEle); } OPENOBJ_END(); } else{ int iDn = m_lstFeedWellSys[i]->m_iDn; double nEleDown = m_lstFeedWellSys[i-1]->m_nDownEle; double nEleDown2 = m_lstFeedWellSys[i+1]->m_nFrondDownEle; double dPipeAllLen = m_lstFeedWellSys[i]->m_nLength; double dI = (nEleDown - nEleDown2) / dPipeAllLen; double dCurEle = nEleDown; AcDbObjectIdArray idArray; for(int m=0;mm_lstID.Length();m++){ ads_name ent; BOOL bDrawLabel = FALSE;// zxl 2012.12.26 add 记录初始设置 acdbGetAdsName(ent, *m_lstFeedWellSys[i]->m_lstID[m]); OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe){ pPipe->SetDnDiameter(iDn); double dPipeLen = pPipe->Length(); // if(!DocGetMeterUnitDraw()) // dPipeLen = dPipeLen/1000; double dLastEnd = dCurEle - dI * dPipeLen; XPoint pt1(pPipe->GetStartPoint()), pt2(pPipe->GetEndPoint()); if(DocGetMeterUnitDraw()) {//米 if(pPipe->GetFlowDir() == TPipeSys::kFromStart){ pt1.z = dCurEle; pt2.z = dLastEnd; } else{ pt2.z = dCurEle; pt1.z = dLastEnd; } } else { if(pPipe->GetFlowDir() == TPipeSys::kFromStart){ pt1.z = dCurEle*1000; pt2.z = dLastEnd*1000; } else{ pt2.z = dCurEle*1000; pt1.z = dLastEnd*1000; } } // if(pPipe->GetFlowDir() == TPipeSys::kFromStart){ // pt1.z = dCurEle*1000; // pt2.z = dLastEnd*1000; // } // else{ // pt2.z = dCurEle*1000; // pt1.z = dLastEnd*1000; // } pPipe->SetStartPoint(pt1); pPipe->SetEndPoint(pt2); // cet 2011.8.30 modify // pPipe->SetSpare((double)g_iDimPipeGradientType); if (!pPipe->IsDrawLabel()) { SetPipeLabelType(pPipe); } bDrawLabel = pPipe->IsDrawLabel();// zxl 2012.12.26 add dCurEle = dLastEnd; ////////////////////////////////////////////////////////////////// //还要考虑支管的标高也要同时改变 sr 2008-7-8 AcDbObjectId idNode1 = pPipe->GetNode(0); AcDbObjectId idNode2 = pPipe->GetNode(1); AppendIdArray(idArray, idNode1); AppendIdArray(idArray, idNode2); XPoint pt3, pt4; pt3 = pt1; pt3.z = 0; pt4 = pt2; pt4.z = 0; //先把节点附件的标高改过来 OPENOBJ_BEGIN(idNode1, AcDb::kForWrite, TDbPipeFitting, pNode); if(pNode){ XPoint ptLoc = pNode->GetLocation(); ptLoc.z = 0; if(ptLoc == pt3) pNode->SetLocation(pt1); else if(ptLoc == pt4) pNode->SetLocation(pt2); } OPENOBJ_END(); OPENOBJ_BEGIN(idNode2, AcDb::kForWrite, TDbPipeFitting, pNode); if(pNode){ XPoint ptLoc = pNode->GetLocation(); ptLoc.z = 0; if(ptLoc == pt3) pNode->SetLocation(pt1); else if(ptLoc == pt4) pNode->SetLocation(pt2); } OPENOBJ_END(); } OPENOBJ_END(); // zxl 2012.12.25 modify //DoDimPipeDn(ent, iDn, _T("自动"), g_nPipeDnHeight, FALSE); DoDimPipeDn(ent, iDn, _T("自动"), g_nPipeDnHeight, FALSE, TRUE); OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbPipe, pPipe); if(pPipe) { pPipe->EnableDrawLabel(bDrawLabel); } OPENOBJ_END(); } //处理节点里面的支管标高, 如果节点所连接管线端点标高不等于节点标高,就把它改过来 for(int j=0;jGetInterfaceNum(); XPoint ptLoc = pNode->GetLocation(); XPoint ptLoc2 = ptLoc; ptLoc2.z = 0; for(int k=0;kGetInterface(k, iFace); AcDbObjectId nextPipeId = iFace.m_idPipe; OPENOBJ_BEGIN(nextPipeId, AcDb::kForRead, TDbPipe, pPipe); if(pPipe){ XPoint ptS = pPipe->StartPoint(); XPoint ptE = pPipe->EndPoint(); if(ptS == ptLoc || ptE == ptLoc) continue; ptS.z = 0; ptE.z = 0; if(pPipe->upgradeOpen()==Acad::eOk) { if(ptS == ptLoc2) pPipe->SetStartPoint(ptLoc); else if(ptE == ptLoc2) pPipe->SetEndPoint(ptLoc); pPipe->downgradeOpen(); } } OPENOBJ_END(); } } OPENOBJ_END(); } } } actrTransactionManager->flushGraphics(); //acad 刷新 UpdateMultDim(); // ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp); HideDialog(this, FALSE); } BOOL CVerticalSectionFeedDlg::AppendIdArray(AcDbObjectIdArray &idArray, AcDbObjectId id) { BOOL bFlag = FALSE; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbPipeFitting, pNode); if(pNode){ if(pNode->GetInterfaceNum() > 2) bFlag = TRUE; } OPENOBJ_END(); if(!bFlag) return FALSE; int len = idArray.length(); for(int i=0;im_bIsWell){ //井 // AcDbObjectId id = m_lstWellSys[i]->m_ID; // XPoint ptLoc; // CString csEleLow, csEleUp; // csEleLow.Format(_T("%.2f"), m_lstWellSys[i]->m_nDownEle); // csEleUp.Format(_T("%.2f"), m_lstWellSys[i]->m_nUpEle); // OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbWell, pEquip); // if(pEquip){ // pEquip->SetDropWell(TRUE); // double nPipeDownEle = m_lstWellSys[i]->m_nFrondDownEle; // double nPipeDownEle2 = m_lstWellSys[i]->m_nDownEle; // if(i>1){ //设置前管道 管底标高 // AcDbObjectId idPipe = m_lstWellSys[i-1]->m_ID; // pEquip->SetPipeEndEle(idPipe, XString(_T("%.3f"), m_lstWellSys[i]->m_nFrondDownEle)); // } // if(i < m_lstWellSys.Length()-1){ //设置后管道 管底标高 // AcDbObjectId idPipe = m_lstWellSys[i+1]->m_ID; // pEquip->SetPipeEndEle(idPipe, XString(_T("%.3f"), m_lstWellSys[i]->m_nDownEle)); // } // ptLoc = pEquip->GetLocation(); // //搜索这个井其他连接管,最低标高才是井标高 // int num = pEquip->GetInterfaceNum(); // double nEleOther = m_lstWellSys[i]->m_nDownEle; // for(int m=0;mGetInterface(m, iFace); // CString csLabel = pEquip->GetISysLabel(m); // if(csLabel != _T("") && nEleOther - _tstof(csLabel) > 0.001) // nEleOther = _tstof(csLabel); // } // if(fabs(nEleOther - m_lstWellSys[i]->m_nDownEle) < 0.001) // pEquip->SetWellEleDown(m_lstWellSys[i]->m_nDownEle); // pEquip->SetWellEleUp(m_lstWellSys[i]->m_nUpEle); // } // OPENOBJ_END(); // } // else{ // int iDn = m_lstWellSys[i]->m_iDn; // double nEleDown = m_lstWellSys[i-1]->m_nDownEle; // double nEleDown2 = m_lstWellSys[i+1]->m_nFrondDownEle; // // ads_name ent; // acdbGetAdsName(ent, m_lstWellSys[i]->m_ID); // OPENOBJ_BEGIN(ent, AcDb::kForWrite, TDbPipe, pPipe); // if(pPipe){ // XPoint pt1(pPipe->StartPoint()), pt2(pPipe->EndPoint()); // if(pPipe->GetFlowDir() == TPipeSys::kFromStart){ // pt1.z = nEleDown*1000; // pt2.z = nEleDown2*1000; // } // else{ // pt2.z = nEleDown*1000; // pt1.z = nEleDown2*1000; // } // pPipe->SetStartPoint(pt1); // pPipe->SetEndPoint(pt2); // pPipe->SetSpare((double)g_iDimPipeGradientType); // } // OPENOBJ_END(); // DoDimPipeDn(ent, iDn, _T("自动"), g_nPipeDnHeight, FALSE); // } // } // // actrTransactionManager->flushGraphics(); //acad 刷新 // UpdateMultDim(); // ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp); // // HideDialog(this, FALSE); //} void CVerticalSectionFeedDlg::OnButtonModifyele() { CTemporaryResourceOverride vTemp; CWellCalcModifyEleDlg dlg(1); for(int i=0;im_bIsWell = m_lstFeedWellSys[i]->m_bIsWell; pList->m_nGroundEle = m_lstFeedWellSys[i]->m_nGroundEle; pList->m_bIsDropWell = m_lstFeedWellSys[i]->m_bIsDropWell;; pList->m_csName = m_lstFeedWellSys[i]->m_csName; pList->m_nUpEle = m_lstFeedWellSys[i]->m_nUpEle; pList->m_nDownEle = m_lstFeedWellSys[i]->m_nDownEle; pList->m_nWellRadius = m_lstFeedWellSys[i]->m_nWellRadius; pList->m_nSpare = m_lstFeedWellSys[i]->m_nSpare; dlg.m_lstFeedWellSys.Append(pList); } if(dlg.DoModal() == IDOK){ for(int i=0;im_nUpEle = dlg.m_lstFeedWellSys[i]->m_nUpEle; m_lstFeedWellSys[i]->m_nWellRadius = dlg.m_lstFeedWellSys[i]->m_nWellRadius; m_lstFeedWellSys[i]->m_nGroundEle = dlg.m_lstFeedWellSys[i]->m_nGroundEle; m_lstFeedWellSys[i]->m_nSpare = dlg.m_lstFeedWellSys[i]->m_nSpare; } } if(m_iType == 1){//如果是覆土厚度,则根据新井面标高,重新计算井低标高 for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csName1 = (*pRow)[0].GetText().cs(); CString csName2 = (*pRow)[1].GetText().cs(); CString csName; CString csDn = (*pRow)[3].GetText().cs(); csName = csName1 + csName2; if(csName == _T("")) break; CString csDownEle1 = (*pRow)[6].GetText().cs(); CString csDownEle2 = (*pRow)[7].GetText().cs(); double dDownEle1 = _tstof(csDownEle1); double dDownEle2 = _tstof(csDownEle2); for(int i=0;im_bIsWell){ if(m_lstFeedWellSys[i]->m_csName == csName1){//把覆土厚度换算为管中标高 dDownEle1 = m_lstFeedWellSys[i]->m_nUpEle - dDownEle1 - _tstof(csDn)/2000.0; m_lstFeedWellSys[i]->m_nDownEle = dDownEle1; } else if(m_lstFeedWellSys[i]->m_csName == csName2){ dDownEle2 = m_lstFeedWellSys[i]->m_nUpEle - dDownEle2 - _tstof(csDn)/2000.0; m_lstFeedWellSys[i]->m_nFrondDownEle = dDownEle2; // if(i == m_lstFeedWellSys.Length()-1) // m_lstFeedWellSys[i]->m_nDownEle = dDownEle2; } } } // dDownEle1 = dUpEle1 - dDownEle1 - _tstof(csDn)/2000.0; // dDownEle2 = dUpEle2 - dDownEle2 - _tstof(csDn)/2000.0; } } UpdateGrid(); } //std::vector 的回调函数 extern bool GreaterByParm(TPtOnStake item1, TPtOnStake item2); //对桩进行排序 extern BOOL SortStakePoints(AcArray &arStake, AcDbCurve * pCurve); //已知桩号数字,返回标注内容, 如:820 返回K0+825 extern CString GetStakeName(double dTextValue, CString sStakePrefix); //更新井的桩号 zxl 2012.08.20 add void CVerticalSectionFeedDlg::ResetWellStake() { RBList rbMask(RTDXF0, _T("ATS_STAKE"), NULL); RBList rbMask2(RTDXF0, _T("LINE,ARC,LWPOLYLINE"), NULL); PickSet ss(SS_FREE); ss.Get(_T("X"), NULL, NULL, rbMask); long dd = ss.Length(); if(ss.Length() < 2) //本图根本就没有桩号 return; if(m_iOpenMode == 1){ if(m_csSheetHead.Find(_T("桩号")) < 0) return; } else { if(g_csVerticalSectionHeadFeed.Find(_T("桩号")) < 0) return; } //1. 得到桩号所经过的路径曲线 CString csStakeHead = _T("K"); Entity entCurve; for(int i=0;im_bIsWell){ //井 AcDbObjectId id = m_lstFeedWellSys[i]->m_ID; XPoint ptWell, ptStake; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip){ ptWell = pEquip->GetLocation(); ptWell.z = 0; } OPENOBJ_END(); //得到该井最近的1桩号 double dDist = -1; Entity entStake; for(long j=0;jGetStakeBeforeChar(csStakeHead); XPoint pt = pEquip->GetLocation(); pt.z = 0; double dDistTmp = ads_distance(pt, ptWell); if(dDist < 0 || dDist > dDistTmp) { dDist = dDistTmp; ptStake = pt; entStake = ent; } } OPENOBJ_END(); } PickSet ssCurve(SS_FREE); AssureInCurrentView_New(ptStake, ptStake); GetPointPickSet(ptStake, ssCurve, rbMask2); long len3 = ssCurve.Length(); if(ssCurve.Length() == 1) { entCurve = ssCurve[0L]; break; } else if(ssCurve.Length() == 2) { TCHAR szLay1[256]; TCHAR szLay2[256]; Entity ent1 = ssCurve[0L]; Entity ent2 = ssCurve[1L]; ent1.GetData(8, szLay1); ent2.GetData(8, szLay2); if(_tcsicmp(szLay1, _T("TWT_STAKE")) == 0) entCurve = ent2; if(_tcsicmp(szLay2, _T("TWT_STAKE")) == 0) entCurve = ent1; } } } if(!entCurve) return; //2. 得到通过该曲线所有的桩号,并把他们放到桩号容器中arStake AcArray arStake2; PickSet ssStake(SS_FREE); GetCurveFPick(entCurve, ssStake, rbMask); int len = ssStake.Length(); for(long m=0;mGetLocation(); pt.z = 0; AcDbObjectId id = pEquip->objectId(); TPtOnStake ptOnStake; ptOnStake.m_ptGeOn = pt; ptOnStake.m_dVal = pEquip->GetStakeValue(); arStake2.append(ptOnStake); } OPENOBJ_END(); } //3. 对容器中的桩号,按曲线进行排序(倒序) OPENOBJ_BEGIN(entCurve, AcDb::kForRead, AcDbCurve, pCurve); if(pCurve) { SortStakePoints(arStake2, pCurve); //4. 求每个井的桩号(先投影到曲线上,然后根据前后2桩号,差值求桩号) for(i=0;im_bIsWell){ //井 AcDbObjectId id = m_lstFeedWellSys[i]->m_ID; XPoint ptWell, ptStake; OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip){ ptWell = pEquip->GetLocation(); ptWell.z = 0; } OPENOBJ_END(); pCurve->getClosestPointTo(ptWell, ptWell, Adesk::kTrue); double dParmWell(0); pCurve->getParamAtPoint(ptWell, dParmWell); int iIdx1(-1), iIdx2(-1); for(int n=0;n -0.001) { iIdx1 = n; break; } } iIdx2 = iIdx1-1; if(iIdx1 > -1 && iIdx2 > -1 && iIdx1 < arStake2.length()) { double dVal1 = arStake2.at(iIdx1).m_dVal; double dVal2 = arStake2.at(iIdx2).m_dVal; double dValRet = GetValBetween2(dVal1, dVal2, arStake2.at(iIdx1).m_dParm, arStake2.at(iIdx2).m_dParm, dParmWell); CString csText = GetStakeName(dValRet, csStakeHead); // 求出来的桩号写入井的扩展数据,自定义绘制的时候会自动取 ads_name entWell; acdbGetAdsName(entWell, id); WriteXdata(entWell, _T("TWT-STAKEVALUE"), csText); } } } } OPENOBJ_END(); } void CVerticalSectionFeedDlg::GetCurveFPick(Entity ent, PickSet &ss, RBList &rbMask) { if(ent.Is(_T("LINE"))){ XLine line(ent); AssureInCurrentView_New(line.StartPoint(), line.EndPoint()); line.TransUCS(Groups(0),Groups(1)); // 把 UCS 转为 WCS RBList rbPoint = ads_buildlist(RT3DPOINT, &line.StartPoint(), RT3DPOINT, &line.EndPoint(), NULL); ss.Get(_T("F"), rbPoint, NULL, rbMask); } else if(ent.Is(_T("ARC"))){ XArc arc(ent); XCurveSegment seg; seg = arc; XPoly2D xPline; seg.AsPoly2D(xPline); XPoint pt1, pt2; pt1 = *xPline[0]; xPline.Length(); pt2 = *xPline[xPline.Length()-1]; AssureInCurrentView_New(pt1, pt2); xPline.TransUCS(Groups(0),Groups(1)); // 把 UCS 转为 WCS RBList rbPoint = xPline.Polygon(); ss.Get(_T("F"), rbPoint, NULL, rbMask); } else{ XPoly2D xPline(ent); XPoint pt1, pt2; pt1 = *xPline[0]; xPline.Length(); pt2 = *xPline[xPline.Length()-1]; AssureInCurrentView_New(pt1, pt2); xPline.TransUCS(Groups(0),Groups(1)); // 把 UCS 转为 WCS RBList rbPoint = xPline.Polygon(); ss.Get(_T("F"), rbPoint, NULL, rbMask); } } void CVerticalSectionFeedDlg::OnButtonShow() { CWnd *pWnd = GetDlgItem(IDC_BUTTON_SHOW); if (pWnd == NULL) { return; } CRect rc; pWnd->GetWindowRect(rc); if(m_pMenu == NULL) { m_pMenu = new CMenu; m_pMenu->CreatePopupMenu(); } else { m_pMenu->DestroyMenu(); m_pMenu->CreatePopupMenu(); } m_pMenu->AppendMenu(m_mapCheck[nMenuId + 1] ? MF_CHECKED : MF_UNCHECKED, nMenuId + 1, _T("给水管")); m_pMenu->AppendMenu(m_mapCheck[nMenuId + 2] ? MF_CHECKED : MF_UNCHECKED, nMenuId + 2, _T("污水管")); m_pMenu->AppendMenu(m_mapCheck[nMenuId + 3] ? MF_CHECKED : MF_UNCHECKED, nMenuId + 3, _T("废水管")); m_pMenu->AppendMenu(m_mapCheck[nMenuId + 4] ? MF_CHECKED : MF_UNCHECKED, nMenuId + 4, _T("雨水管")); m_pMenu->AppendMenu(m_mapCheck[nMenuId + 5] ? MF_CHECKED : MF_UNCHECKED, nMenuId + 5, _T("中水管")); m_pMenu->AppendMenu(m_mapCheck[nMenuId + 6] ? MF_CHECKED : MF_UNCHECKED, nMenuId + 6, _T("消防管")); m_pMenu->AppendMenu(m_mapCheck[nMenuId + 7] ? MF_CHECKED : MF_UNCHECKED, nMenuId + 7, _T("其他管")); m_pMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &rc); } BOOL CVerticalSectionFeedDlg::OnCommand(WPARAM wParam, LPARAM lParam) { UINT nID = LOWORD(wParam); if ((nID > nMenuId + 7 || nID < nMenuId + 1) && (nID > nMenuTypeId + 3 || nID < nMenuTypeId + 1)) { return CDialog::OnCommand(wParam, lParam); } if(m_pMenu != NULL && (nID < nMenuId + 8 && nID > nMenuId)) { m_mapCheck[nID] = !m_mapCheck[nID]; } if (m_pMenuLength != NULL && (nID < nMenuTypeId + 4 && nID > nMenuTypeId)) { m_iLengthType = nID - nMenuTypeId - 1; } return CDialog::OnCommand(wParam, lParam); } void CVerticalSectionFeedDlg::InitMapData() { m_mapCheck.insert(std::make_pair(nMenuId + 1, true)); m_mapCheck.insert(std::make_pair(nMenuId + 2, true)); m_mapCheck.insert(std::make_pair(nMenuId + 3, true)); m_mapCheck.insert(std::make_pair(nMenuId + 4, true)); m_mapCheck.insert(std::make_pair(nMenuId + 5, true)); m_mapCheck.insert(std::make_pair(nMenuId + 6, true)); m_mapCheck.insert(std::make_pair(nMenuId + 7, true)); } void CVerticalSectionFeedDlg::GetShowPipeData(std::map &data) { data.clear(); data[TPipeSys::kFeedWater] = m_mapCheck[nMenuId + 1]; data[TPipeSys::kDirtWater] = m_mapCheck[nMenuId + 2]; data[TPipeSys::kUselessWater] = m_mapCheck[nMenuId + 3]; data[TPipeSys::kRainWater] = m_mapCheck[nMenuId + 4]; data[TPipeSys::kUsedWater] = m_mapCheck[nMenuId + 5]; data[TPipeSys::kFireFighting] = m_mapCheck[nMenuId + 6]; data[TPipeSys::kOther] = m_mapCheck[nMenuId + 7]; } void CVerticalSectionFeedDlg::SetShowPipeData(std::map &data) { m_mapCheck[nMenuId + 1] = data[TPipeSys::kFeedWater]; m_mapCheck[nMenuId + 2] = data[TPipeSys::kDirtWater]; m_mapCheck[nMenuId + 3] = data[TPipeSys::kUselessWater]; m_mapCheck[nMenuId + 4] = data[TPipeSys::kRainWater]; m_mapCheck[nMenuId + 5] = data[TPipeSys::kUsedWater]; m_mapCheck[nMenuId + 6] = data[TPipeSys::kFireFighting]; m_mapCheck[nMenuId + 7] = data[TPipeSys::kOther]; }