1451 lines
47 KiB
C++
1451 lines
47 KiB
C++
// VerticalSectionFeedDlg.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
|
||
#include <DbVerticalSectionFeed.h>
|
||
#include <DbWell.h>
|
||
#include <DbPipeFitting.h>
|
||
#include <DbStake.h>
|
||
|
||
#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<TFeedWellData> &lstWellSys, int iScaleX, int iScaleY, double nGridScale, double nDeepStart);
|
||
extern void DrawVerticalSectionFeed(DList<TFeedWellData> &lstWellSys, int iScaleX, int iScaleY, double nGridScale, double nDeepStart, bool bDimEle, bool bDimDist, const std::map<TPipeSys::SysType,bool> &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<TPipeSys::SysType,bool> 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<TFeedWellData> 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<TPipeSys::SysType,bool>::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<TPipeSys::SysType,bool>::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<TFeedWellData> &lstWellSys, double dDeep)
|
||
{
|
||
for(int i=1;i<lstWellSys.Length();i++){
|
||
if(lstWellSys[i]->m_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;m<num;m++){
|
||
TPipeInterface iFace;
|
||
pEquip->GetInterface(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;j<len;j++){
|
||
AcDbObjectId idPipe = *lstWellSys[i]->m_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;i<lstWellSys.Length()-1;i++){
|
||
if(lstWellSys[i]->m_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;m<num;m++){
|
||
TPipeInterface iFace;
|
||
pEquip->GetInterface(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<TWellData> &lstWellSys, DList<TFeedWellData> &lstFeedWellSys)
|
||
{
|
||
BOOL bRet = TRUE;
|
||
for(int i=0;i<lstFeedWellSys.Length();i++){
|
||
int len2 = lstFeedWellSys[i]->m_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;j<len2;j++){
|
||
TWellData *pList = new TWellData();
|
||
pList->m_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<TWellData> &lstWellSys, DList<TFeedWellData> &lstFeedWellSys)
|
||
{
|
||
BOOL bRet = TRUE;
|
||
int len = lstWellSys.Length();
|
||
for(int i=0;i<len;i++){
|
||
if(lstWellSys[i]->m_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<TFeedWellData> &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;i<m_lstFeedWellSys.Length()-1;i++){
|
||
if(m_lstFeedWellSys[i]->m_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;i<m_lstFeedWellSys.Length();i++){
|
||
if(!m_lstFeedWellSys[i]->m_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;m<m_lstFeedWellSys[i]->m_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<TWellData> lstWellSys;
|
||
// GetRainWellListData(lstWellSys, m_lstFeedWellSys);
|
||
|
||
// zxl 2013.12.5 modify
|
||
//DrawVerticalSectionFeed(m_lstFeedWellSys, m_iX, m_iY, nGridScale, dDeep);
|
||
std::map<TPipeSys::SysType,bool> 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;i<m_lstFeedWellSys.Length();i++){
|
||
if(m_lstFeedWellSys[i]->m_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;m<num;m++){
|
||
TPipeInterface iFace;
|
||
pEquip->GetInterface(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;m<m_lstFeedWellSys[i]->m_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;j<idArray.length();j++){
|
||
AcDbObjectId idTmp = idArray[j];
|
||
OPENOBJ_BEGIN(idTmp, AcDb::kForRead, TDbPipeFitting, pNode);
|
||
if(pNode){
|
||
int num = pNode->GetInterfaceNum();
|
||
XPoint ptLoc = pNode->GetLocation();
|
||
XPoint ptLoc2 = ptLoc;
|
||
ptLoc2.z = 0;
|
||
for(int k=0;k<num;k++){
|
||
TPipeInterface iFace;
|
||
pNode->GetInterface(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;i<len;i++){
|
||
AcDbObjectId idTmp = idArray[i];
|
||
if(idTmp == id)
|
||
return FALSE;
|
||
}
|
||
idArray.append(id);
|
||
return TRUE;
|
||
}
|
||
|
||
//void CVerticalSectionFeedDlg::OnButtonTodwg()
|
||
//{
|
||
// UpdateData(TRUE);
|
||
// if(m_lstWellSys.Length() < 3)
|
||
// return;
|
||
//
|
||
// HideDialog(this, TRUE);
|
||
// TCHAR szTmp[32];
|
||
//
|
||
//
|
||
//
|
||
// for(int i=0;i<m_lstWellSys.Length();i++){
|
||
// if(m_lstWellSys[i]->m_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;m<num;m++){
|
||
// TPipeInterface iFace;
|
||
// pEquip->GetInterface(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;i<m_lstFeedWellSys.Length();i++){
|
||
TFeedWellData *pList = new TFeedWellData();
|
||
pList->m_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;i<m_lstFeedWellSys.Length();i++){
|
||
m_lstFeedWellSys[i]->m_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;i<m_lstFeedWellSys.Length();i++){
|
||
if(m_lstFeedWellSys[i]->m_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<TPtOnStake> &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;i<m_lstFeedWellSys.Length();i++){
|
||
if(m_lstFeedWellSys[i]->m_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;j<ss.Length();j++)
|
||
{
|
||
Entity ent = ss[j];
|
||
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbStake, pEquip);
|
||
if(pEquip){
|
||
pEquip->GetStakeBeforeChar(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<TPtOnStake> arStake2;
|
||
PickSet ssStake(SS_FREE);
|
||
GetCurveFPick(entCurve, ssStake, rbMask);
|
||
int len = ssStake.Length();
|
||
for(long m=0;m<len;m++)
|
||
{
|
||
Entity ent = ssStake[m];
|
||
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbStake, pEquip);
|
||
if(pEquip){
|
||
|
||
XPoint pt = pEquip->GetLocation();
|
||
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;i<m_lstFeedWellSys.Length();i++){
|
||
if(m_lstFeedWellSys[i]->m_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<arStake2.length();n++)
|
||
{
|
||
if((dParmWell - arStake2.at(n).m_dParm) > -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<TPipeSys::SysType,bool> &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<TPipeSys::SysType,bool> &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];
|
||
} |