2845 lines
81 KiB
C++
2845 lines
81 KiB
C++
#include "stdafx.h"
|
||
#include "AcDbObjectPtr.h"
|
||
#include "GeCurveInline.h"
|
||
#include "RBGroups.h"
|
||
#include "DbWell.h"
|
||
#include "xtext.h"
|
||
#include "dbgridsheet.h"
|
||
#include "DbPool.h"
|
||
#include "DbVerticalSection.h"
|
||
#include "DbVerticalSectionFeed.h"
|
||
#include <vector>
|
||
#include <algorithm>
|
||
#include "DbStake.h"
|
||
#include <stack>
|
||
#include "DbPipe.h"
|
||
#include "SHAcDbBlockTableRecPtr.h"
|
||
#include "WellCalcSettingDlg.h"
|
||
#include "WellCalcModifyEleDlg.h"
|
||
#include "layerdef.h"
|
||
|
||
extern AcDbObjectId InitLayer(const TCHAR *szLayer, BOOL bApplyChange = TRUE);
|
||
extern void InsertWellCalcSheet(DList<TWellData> &lstWellSys);
|
||
extern void SetPipeLabelType(CDbPipe *pPipe);
|
||
|
||
namespace
|
||
{
|
||
AcDbObjectId InitDoteLayer(const TCHAR* szLay)
|
||
{
|
||
AcDbObjectId idLay = GlobalFunc::GetLayerIdFromString(szLay);
|
||
if (!!idLay)
|
||
return idLay;
|
||
|
||
AcDbObjectId id = InitLayer(szLay);
|
||
GlobalFunc::AddLineType(_T("CENTER2"));
|
||
AcDbLinetypeTable *pLinetypeTbl;
|
||
AcDbObjectId ltId;
|
||
Acad::ErrorStatus es = acdbCurDwg()->getLinetypeTable(pLinetypeTbl, AcDb::kForRead);
|
||
if (es != Acad::eOk) {
|
||
return NULL;
|
||
}
|
||
if ((pLinetypeTbl->getAt(_T("CENTER2"), ltId)) != Acad::eOk) {
|
||
pLinetypeTbl->close();
|
||
return NULL;
|
||
}
|
||
pLinetypeTbl->close();
|
||
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, AcDbLayerTableRecord, pRec);
|
||
if (pRec) {
|
||
pRec->setLinetypeObjectId(ltId);
|
||
}
|
||
OPENOBJ_END();
|
||
return id;
|
||
}
|
||
|
||
|
||
|
||
AcDbObjectId GetHitSheet(XPoint ptHit)
|
||
{
|
||
AcDbObjectId id;
|
||
PickSet ss(SS_FREE);
|
||
RBList mask(RTDXF0, _T("AEC_ZT_SHEET"), NULL);
|
||
if (GlobalFunc::GetEntByDxf(ss, _T("AEC_ZT_SHEET")) == Acad::eOk) {
|
||
long lCount = ss.Length();
|
||
for (long i = 0L; i < lCount; i++) {
|
||
Entity ent = ss[i];
|
||
OPENOBJ_BEGIN(ent, AcDb::kForRead, CDbSheet, pSheet);
|
||
if (pSheet && pSheet->IsValid()) {
|
||
XPoly2D poly;
|
||
pSheet->GetBorder(poly);
|
||
if ((ptHit & poly) == PR_INSIDE) {
|
||
acdbGetObjectId(id, ent.name);
|
||
break;
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
return id;
|
||
}
|
||
}
|
||
|
||
//***************************************************************************************************
|
||
// 纵断面图
|
||
//***************************************************************************************************
|
||
|
||
// cet 2013.3.1 add 获得池子名
|
||
CString GetPoolName(const AcDbObjectId &id)
|
||
{
|
||
CString sName;
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbPool, pPool);
|
||
if (pPool != NULL)
|
||
{
|
||
sName = pPool->GetLabel();
|
||
}
|
||
OPENOBJ_END();
|
||
return sName;
|
||
}
|
||
|
||
void InsertOtherWellSheet(AcDbObjectId idSheet, DList<TWellData> &lstWellSys)
|
||
{
|
||
OPENOBJ_BEGIN(idSheet, AcDb::kForWrite, CDbSheet, pSheet);
|
||
if (pSheet) {
|
||
int nRowAll, nColAll;
|
||
CString csText;
|
||
nRowAll = pSheet->GetRowNum();
|
||
nColAll = pSheet->GetColumnNum();
|
||
pSheet->AddRowAt(nRowAll);
|
||
GridCell &cell59 = *(*pSheet)(nRowAll - 1, 0);
|
||
CString csIdx = cell59.GetText();
|
||
int idx2 = _ttoi(csIdx);
|
||
int idx = nRowAll + 1;
|
||
for (int i = 0; i < lstWellSys.Length() - 1; i++) {
|
||
if (i % 2 == 0) {
|
||
nRowAll = pSheet->GetRowNum();
|
||
pSheet->AddRowAt(nRowAll);
|
||
}
|
||
else if ((i + 1) % 2 == 0) {
|
||
GridCell &cell50 = *(*pSheet)(idx, 0);
|
||
cell50.SetText(XString(_T("%d"), ++idx2));
|
||
idx++;
|
||
}
|
||
|
||
if (lstWellSys[i]->m_bIsWell) { //井
|
||
|
||
double nEle = lstWellSys[i]->m_nUpEle;
|
||
double nDeep = lstWellSys[i]->m_nDeep;
|
||
double nDownEle = lstWellSys[i]->m_nDownEle;
|
||
CString csWellUpEle, csDeep, csDownEle, csWellUpEle2, csDeep2, csDownEle2;
|
||
csDeep.Format(_T("%.2f"), nDeep);
|
||
csDownEle.Format(_T("%.2f"), nDownEle);
|
||
csWellUpEle.Format(_T("%.3f"), nEle);
|
||
nEle = lstWellSys[i + 2]->m_nUpEle;
|
||
nDeep = lstWellSys[i + 2]->m_nDeep;
|
||
nDownEle = lstWellSys[i + 2]->m_nDownEle;
|
||
csDeep2.Format(_T("%.2f"), nDeep);
|
||
csDownEle2.Format(_T("%.2f"), nDownEle);
|
||
csWellUpEle2.Format(_T("%.3f"), nEle);
|
||
|
||
|
||
GridCell &cell31 = *(*pSheet)(idx, 1);
|
||
cell31.SetText(lstWellSys[i]->m_csName);
|
||
GridCell &cell32 = *(*pSheet)(idx, 7);
|
||
cell32.SetText(csWellUpEle);
|
||
GridCell &cell33 = *(*pSheet)(idx, 11);
|
||
cell33.SetText(csDeep);
|
||
GridCell &cell34 = *(*pSheet)(idx, 9);
|
||
cell34.SetText(csDownEle);
|
||
|
||
|
||
GridCell &cell51 = *(*pSheet)(idx, 2);
|
||
cell51.SetText(lstWellSys[i + 2]->m_csName);
|
||
GridCell &cell52 = *(*pSheet)(idx, 8);
|
||
cell52.SetText(csWellUpEle2);
|
||
GridCell &cell53 = *(*pSheet)(idx, 12);
|
||
cell53.SetText(csDeep2);
|
||
GridCell &cell54 = *(*pSheet)(idx, 10);
|
||
cell54.SetText(csDownEle2);
|
||
if (lstWellSys[i + 2]->m_bIsDropWell) {
|
||
GridCell &cell55 = *(*pSheet)(idx, 13);
|
||
cell55.SetText(_T("跌水"));
|
||
}
|
||
|
||
|
||
}
|
||
else { //管
|
||
|
||
int iDn = lstWellSys[i]->m_iDn;
|
||
CString csDn, csPipeLen, csI, csI2;
|
||
csDn.Format(_T("%d"), iDn);
|
||
csI2.Format(_T("%.3f"), lstWellSys[i]->m_nI * lstWellSys[i]->m_nLength);
|
||
int iTmpI = (int)(lstWellSys[i]->m_nI * 1000);
|
||
if (lstWellSys[i]->m_nI * 1000 > iTmpI)
|
||
csI.Format(_T("%.4f"), lstWellSys[i]->m_nI);
|
||
else
|
||
csI.Format(_T("%.3f"), lstWellSys[i]->m_nI);
|
||
csPipeLen.Format(_T("%.2f"), lstWellSys[i]->m_nLength);
|
||
GridCell &cell61 = *(*pSheet)(idx - 1, 3);
|
||
cell61.SetText(csDn);
|
||
GridCell &cell62 = *(*pSheet)(idx - 1, 4);
|
||
cell62.SetText(csPipeLen);
|
||
GridCell &cell63 = *(*pSheet)(idx - 1, 5);
|
||
cell63.SetText(csI);
|
||
GridCell &cell64 = *(*pSheet)(idx - 1, 6);
|
||
cell64.SetText(csI2);
|
||
}
|
||
}
|
||
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
|
||
//绘制高程表
|
||
void InsertWellCalcSheet(DList<TWellData> &lstWellSys)
|
||
{
|
||
XPoint pt;
|
||
int ret = XGetPoint(NULL, _T("点取高程表位置\n"), pt);
|
||
if (ret != RTNORM) {
|
||
return;
|
||
}
|
||
AcDbObjectId idSheet = NULL;
|
||
idSheet = GetHitSheet(pt);
|
||
BOOL bContinue = FALSE;
|
||
if (idSheet != NULL) {
|
||
OPENOBJ_BEGIN(idSheet, AcDb::kForRead, CDbSheet, pSheet);
|
||
if (pSheet) {
|
||
int nRowAll, nColAll;
|
||
CString csText;
|
||
nRowAll = pSheet->GetRowNum();
|
||
nColAll = pSheet->GetColumnNum();
|
||
SheetTitle &title = pSheet->GetTitle();
|
||
csText = title.GetText();
|
||
if (csText == _T("高程表") && nColAll == 14)
|
||
bContinue = TRUE;
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
|
||
if (bContinue) {
|
||
InsertOtherWellSheet(idSheet, lstWellSys);
|
||
return;
|
||
}
|
||
|
||
AcDbObjectId idTextStyle = GlobalFunc::InitTwtTextStyle(g_Option::instance().g_csSheetStyle);
|
||
CDbSheet *pSheet = new CDbSheet;
|
||
pSheet->SetRotation(GlobalFunc::Ucs2Wcs(0.0));//add by sr
|
||
GridStyle gridStyle;
|
||
gridStyle.SetOverrideAll(TRUE);
|
||
gridStyle.SetTextHeight(g_Option::instance().g_nSheetHeight);
|
||
gridStyle.SetTextStyleId(idTextStyle);
|
||
|
||
SheetTitle &title = pSheet->GetTitle();
|
||
title.GetGridStyle().SetTextHeight(7.0);//设置标题文字高度 zxl 2011.11.29 add
|
||
title.SetHeight(7.0);
|
||
title.SetText(_T("高程表"));
|
||
|
||
DividerStyle &style = title.GetDividerStyle();
|
||
style.SetDividerFlag(DividerStyle::kNone);
|
||
|
||
gridStyle.SetHorMode(AcDb::kTextCenter);
|
||
gridStyle.SetVerMode(AcDb::kTextVertMid);
|
||
gridStyle.SetLineSpaceFactor(0.2);
|
||
gridStyle.SetTextWrap(FALSE);
|
||
pSheet->SetGridStyle(gridStyle);
|
||
pSheet->SetRowHeight(g_Option::instance().g_nSheetHeight + 2);
|
||
int rows = lstWellSys.Length() / 2 + 2;
|
||
if (!lstWellSys[lstWellSys.Length() - 1]->m_bIsWell)
|
||
rows--;
|
||
pSheet->InitSheet(rows, 14, g_Option::instance().g_nSheetHeight + 2, 50);
|
||
|
||
//zxl 0.11.11.25 add 设置外框线宽为中宽
|
||
DividerStyle &styleBorder = pSheet->GetBorderStyle();
|
||
styleBorder.SetLineWidth(0.2);
|
||
SheetRow *pRow = pSheet->GetRow(1);
|
||
if (pRow != NULL)
|
||
{
|
||
DividerStyle &styleRow = pRow->GetDividerStyle();
|
||
styleRow.SetLineWidth(0.2);
|
||
styleRow.SetDividerFlag(DividerStyle::kLocal);
|
||
}
|
||
|
||
SheetColumn column;
|
||
column.SetWidth(12);
|
||
pSheet->SetColumnAt(0, column);
|
||
GridCell &cell = *(*pSheet)(0, 0);
|
||
cell.SetText(_T("序号"));
|
||
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(1, column);
|
||
GridCell &cell2 = *(*pSheet)(0, 1);
|
||
cell2.SetText(_T("管段井号"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(2, column);
|
||
GridCell &cell3 = *(*pSheet)(0, 2);
|
||
cell3.SetText(_T("管段井号"));
|
||
|
||
pSheet->MergeCells(0, 1, 0, 2);
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(3, column);
|
||
GridCell &cell4 = *(*pSheet)(0, 3);
|
||
cell4.SetText(_T("管径(mm)"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(4, column);
|
||
GridCell &cell5 = *(*pSheet)(0, 4);
|
||
cell5.SetText(_T("管长(m)"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(5, column);
|
||
GridCell &cell6 = *(*pSheet)(0, 5);
|
||
cell6.SetText(_T("坡度"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(6, column);
|
||
GridCell &cell7 = *(*pSheet)(0, 6);
|
||
cell7.SetText(_T("管底坡降"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(7, column);
|
||
GridCell &cell8 = *(*pSheet)(0, 7);
|
||
cell8.SetText(_T("设计地面标高(m)"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(8, column);
|
||
GridCell &cell9 = *(*pSheet)(0, 8);
|
||
cell9.SetText(_T("设计地面标高(m)"));
|
||
pSheet->MergeCells(0, 7, 0, 8);
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(9, column);
|
||
GridCell &cell10 = *(*pSheet)(0, 9);
|
||
cell10.SetText(_T("管内底标高(m)"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(10, column);
|
||
GridCell &cell11 = *(*pSheet)(0, 10);
|
||
cell11.SetText(_T("管内底标高(m)"));
|
||
pSheet->MergeCells(0, 9, 0, 10);
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(11, column);
|
||
GridCell &cell12 = *(*pSheet)(0, 11);
|
||
cell12.SetText(_T("埋深(m)"));
|
||
|
||
column.SetWidth(15);
|
||
pSheet->SetColumnAt(12, column);
|
||
GridCell &cell13 = *(*pSheet)(0, 12);
|
||
cell13.SetText(_T("埋深(m)"));
|
||
pSheet->MergeCells(0, 11, 0, 12);
|
||
|
||
column.SetWidth(30);
|
||
pSheet->SetColumnAt(13, column);
|
||
GridCell &cell14 = *(*pSheet)(0, 13);
|
||
cell14.SetText(_T("备注"));
|
||
|
||
pSheet->MergeCells(0, 0, 1, 0);
|
||
|
||
GridCell &cell15 = *(*pSheet)(1, 1);
|
||
cell15.SetText(_T("起始"));
|
||
GridCell &cell16 = *(*pSheet)(1, 2);
|
||
cell16.SetText(_T("终止"));
|
||
|
||
pSheet->MergeCells(0, 3, 1, 3);
|
||
pSheet->MergeCells(0, 4, 1, 4);
|
||
pSheet->MergeCells(0, 5, 1, 5);
|
||
pSheet->MergeCells(0, 6, 1, 6);
|
||
pSheet->MergeCells(0, 13, 1, 13);
|
||
|
||
GridCell &cell17 = *(*pSheet)(1, 7);
|
||
cell17.SetText(_T("起始"));
|
||
GridCell &cell18 = *(*pSheet)(1, 8);
|
||
cell18.SetText(_T("终止"));
|
||
GridCell &cell19 = *(*pSheet)(1, 9);
|
||
cell19.SetText(_T("起始"));
|
||
GridCell &cell20 = *(*pSheet)(1, 10);
|
||
cell20.SetText(_T("终止"));
|
||
GridCell &cell21 = *(*pSheet)(1, 11);
|
||
cell21.SetText(_T("起始"));
|
||
GridCell &cell22 = *(*pSheet)(1, 12);
|
||
cell22.SetText(_T("终止"));
|
||
|
||
int idx = 2;
|
||
for (int i = 0; i < lstWellSys.Length() - 1; i++) {
|
||
if ((i + 1) % 2 == 0) {
|
||
GridCell &cell50 = *(*pSheet)(idx, 0);
|
||
cell50.SetText(XString(_T("%d"), idx - 2));
|
||
idx++;
|
||
}
|
||
|
||
if (lstWellSys[i]->m_bIsWell) { //井
|
||
|
||
if (i == lstWellSys.Length() - 2)
|
||
break;
|
||
|
||
CString csName1 = lstWellSys[i]->m_csName;
|
||
CString csName2 = lstWellSys[i + 2]->m_csName;
|
||
// cet 2013.3.1 modify 读取池的实际名称
|
||
// if(csName2 == _T("HC"))
|
||
// csName2 = _T("HC进");
|
||
// if(csName1 == _T("HC"))
|
||
// csName1 = _T("HC出");
|
||
if (csName2 == _T("HC"))
|
||
csName2 = GetPoolName(lstWellSys[i + 2]->m_ID) + _T("进");
|
||
if (csName1 == _T("HC"))
|
||
csName1 = GetPoolName(lstWellSys[i]->m_ID) + _T("出");
|
||
|
||
double nEle = lstWellSys[i]->m_nUpEle;
|
||
double nDeep = lstWellSys[i]->m_nDeep;
|
||
double nDownEle = lstWellSys[i]->m_nDownEle;
|
||
CString csWellUpEle, csDeep, csDownEle, csWellUpEle2, csDeep2, csDownEle2;
|
||
// csDeep.Format(_T("%.3f"), nDeep);
|
||
csDeep = GlobalFunc::GetDimWellDeep(nDeep);
|
||
|
||
//csDownEle.Format(_T("%.3f"), nDownEle);
|
||
csDownEle = GlobalFunc::GetDimWellDeep(nDownEle);
|
||
csWellUpEle = GlobalFunc::GetDimWellDeep(nEle);
|
||
|
||
// csWellUpEle.Format(_T("%.3f"), nEle);
|
||
nEle = lstWellSys[i + 2]->m_nUpEle;
|
||
nDeep = lstWellSys[i + 2]->m_nDeep;
|
||
nDownEle = lstWellSys[i + 2]->m_nFrondDownEle;
|
||
// csDeep2.Format(_T("%.3f"), nEle-nDownEle);
|
||
// csDownEle2.Format(_T("%.3f"), nDownEle);
|
||
// csWellUpEle2.Format(_T("%.3f"), nEle);
|
||
csDeep2 = GlobalFunc::GetDimWellDeep(nEle - nDownEle);
|
||
csDownEle2 = GlobalFunc::GetDimWellDeep(nDownEle);
|
||
csWellUpEle2 = GlobalFunc::GetDimWellDeep(nEle);
|
||
|
||
|
||
GridCell &cell31 = *(*pSheet)(idx, 1);
|
||
cell31.SetText(csName1);
|
||
GridCell &cell32 = *(*pSheet)(idx, 7);
|
||
cell32.SetText(csWellUpEle);
|
||
GridCell &cell33 = *(*pSheet)(idx, 11);
|
||
cell33.SetText(csDeep);
|
||
GridCell &cell34 = *(*pSheet)(idx, 9);
|
||
cell34.SetText(csDownEle);
|
||
|
||
|
||
GridCell &cell51 = *(*pSheet)(idx, 2);
|
||
cell51.SetText(csName2);
|
||
GridCell &cell52 = *(*pSheet)(idx, 8);
|
||
cell52.SetText(csWellUpEle2);
|
||
GridCell &cell53 = *(*pSheet)(idx, 12);
|
||
cell53.SetText(csDeep2);
|
||
GridCell &cell54 = *(*pSheet)(idx, 10);
|
||
cell54.SetText(csDownEle2);
|
||
if (lstWellSys[i + 2]->m_bIsDropWell) {
|
||
GridCell &cell55 = *(*pSheet)(idx, 13);
|
||
|
||
// 跌水0.000时,不显示跌水值 zxl 2011.11.16 add
|
||
double dDropHeight = nDeep - (nEle - nDownEle);
|
||
if (fabs(dDropHeight - 0.0) < 0.001)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
cell55.SetText(XString(_T("跌水%.3f"), nDeep - (nEle - nDownEle)));
|
||
}
|
||
|
||
|
||
}
|
||
else { //管
|
||
CString csDnType;
|
||
OPENOBJ_BEGIN(lstWellSys[i]->m_ID, AcDb::kForRead, CDbPipe, pPipe);
|
||
if (pPipe) {
|
||
CString csMat = GlobalFunc::GetPipeMaterialByIdx(pPipe->GetMaterial());
|
||
csDnType = GlobalFunc::GetDnByMat(csMat); // 2009-9-16 增加DN
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
int iDn = lstWellSys[i]->m_iDn;
|
||
CString csDn, csPipeLen, csI, csI2;
|
||
csDn.Format(_T("%s%d"), csDnType, iDn);
|
||
csI2.Format(_T("%.3f"), lstWellSys[i]->m_nI * lstWellSys[i]->m_nLength);
|
||
int iTmpI = (int)(lstWellSys[i]->m_nI * 1000);
|
||
double nTmpI = iTmpI + 0.01;
|
||
if (lstWellSys[i]->m_nI * 1000 > nTmpI)
|
||
csI.Format(_T("%.4f"), lstWellSys[i]->m_nI);
|
||
else
|
||
csI.Format(_T("%.3f"), lstWellSys[i]->m_nI);
|
||
//csPipeLen.Format(_T("%.2f"), lstWellSys[i]->m_nLength);
|
||
csPipeLen = GlobalFunc::GetDimPipeLen(lstWellSys[i]->m_nLength);
|
||
|
||
GridCell &cell61 = *(*pSheet)(idx - 1, 3);
|
||
cell61.SetText(csDn);
|
||
GridCell &cell62 = *(*pSheet)(idx - 1, 4);
|
||
cell62.SetText(csPipeLen);
|
||
GridCell &cell63 = *(*pSheet)(idx - 1, 5);
|
||
cell63.SetText(csI);
|
||
GridCell &cell64 = *(*pSheet)(idx - 1, 6);
|
||
cell64.SetText(csI2);
|
||
}
|
||
}
|
||
|
||
pSheet->SetLocation(GlobalFunc::Ucs2Wcs(pt));
|
||
//pSheet->AddToCSpace(TRUE);
|
||
GlobalFunc::AddToCurrentSpace(pSheet, TRUE);
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
//绘制纵断面图
|
||
//void DrawVerticalSection(DList<TWellData> &lstWellSys, int iScaleX, int iScaleY, double nGridScale, int iMode, double nDeepStart) cet 2011.6.3 modify 添加控制是否显示碰撞标高
|
||
//void DrawVerticalSection(DList<TWellData> &lstWellSys, int iScaleX, int iScaleY, double nGridScale, int iMode, double nDeepStart, bool bDimEle) // cet 2011.12.5 modify 添加控制交叉管是否显示
|
||
//void DrawVerticalSection(DList<TWellData> &lstWellSys, int iScaleX, int iScaleY, double nGridScale, int iMode, double nDeepStart, bool bDimEle, const std::map<TPipeSys::SysType,bool> &data)// zxl 2013.12.10 modify
|
||
void DrawVerticalSection(DList<TWellData> &lstWellSys, int iScaleX, int iScaleY, double nGridScale, int iMode, double nDeepStart, bool bDimEle, bool bDimDist, const std::map<TPipeSys::SysType, bool> &data)
|
||
{
|
||
InitLayer(_T("0"));
|
||
GlobalFunc::PushVarStr clayer(_T("CLAYER"), _T("0"));
|
||
|
||
XPoint ptIns, ptStart, ptEnd;
|
||
xg_getvar(_T("VIEWCTR"), ptIns);
|
||
ptIns = GlobalFunc::Ucs2Wcs(ptIns);
|
||
PickSet ssDraw(SS_FREE);
|
||
ssDraw.IncludeBegin();
|
||
|
||
CDbVerticalSection *pSect = new CDbVerticalSection;
|
||
pSect->SetLayoutRotation(GlobalFunc::Ucs2Wcs(0.0));
|
||
pSect->SetInsert(ptIns);
|
||
pSect->SetGridScale(nGridScale);
|
||
pSect->SetScaleX(iScaleX);
|
||
pSect->SetScaleY(iScaleY);
|
||
pSect->SetDimEle(bDimEle);
|
||
pSect->SetDimDist(bDimDist);
|
||
|
||
// cet 2011.12.5 add 控制交叉管显示
|
||
std::map<TPipeSys::SysType, bool>::const_iterator it;
|
||
for (it = data.begin(); it != data.end(); it++)
|
||
{
|
||
pSect->SetShowCrossPipe(it->first, it->second);
|
||
}
|
||
|
||
pSect->SetCalcMode(iMode);
|
||
pSect->SetTextHeight(g_Option::instance().g_nTwtDimHeight);
|
||
pSect->SetTextStyleId(GlobalFunc::InitTwtTextStyle(g_Option::instance().g_csTwtDimStyle));
|
||
pSect->SetDoteLayer(InitDoteLayer(LAY_TWT_DOTE));
|
||
pSect->SetWellDatas(lstWellSys);
|
||
pSect->setColor(AcCmColor()); //随层
|
||
pSect->SetStartDeep(nDeepStart);
|
||
pSect->SetTextLayer(InitLayer(LAY_TEXT));
|
||
pSect->SetGridLayer(GlobalFunc::InitGridLayer(LAY_TWT_GRID));
|
||
pSect->SetSectLayer(InitLayer(LAY_TWT_SECTION));
|
||
if (iMode == 3) //给水系统
|
||
pSect->SetSheetHead(g_Option::instance().g_csVerticalSectionHeadFeed);
|
||
else
|
||
pSect->SetSheetHead(g_Option::instance().g_csVerticalSectionHead);
|
||
pSect->Calc();
|
||
double nHighEle = pSect->GetMaxDeep();
|
||
double nLowEle = pSect->GetMinDeep();
|
||
AcDbObjectId id = GlobalFunc::AddToCurrentSpace(pSect, Adesk::kTrue);
|
||
ssDraw.IncludeEnd();
|
||
ssDraw.Redraw(2);
|
||
ptIns = GlobalFunc::Wcs2Ucs(ptIns);
|
||
actrTransactionManager->flushGraphics(); //acad 刷新
|
||
XPoint xp;
|
||
if (GlobalFunc::DragMovePickSet(ssDraw, _T("\n请点取纵断面图位置<退出>: "), ptIns, xp) != RTNORM)
|
||
ssDraw.Erase();
|
||
|
||
}
|
||
|
||
//绘制给水纵断面图
|
||
void DrawVerticalSectionFeed(DList<TFeedWellData> &lstWellSys, int iScaleX, int iScaleY, double nGridScale, double nDeepStart, bool bDimEle, bool bDimDist, const std::map<TPipeSys::SysType, bool> &data)
|
||
{
|
||
InitLayer(_T("0"));
|
||
GlobalFunc::PushVarStr clayer(_T("CLAYER"), _T("0"));
|
||
|
||
XPoint ptIns, ptStart, ptEnd;
|
||
xg_getvar(_T("VIEWCTR"), ptIns);
|
||
ptIns = GlobalFunc::Ucs2Wcs(ptIns);
|
||
PickSet ssDraw(SS_FREE);
|
||
ssDraw.IncludeBegin();
|
||
|
||
CDbVerticalSectionFeed *pSect = new CDbVerticalSectionFeed;
|
||
pSect->SetLayoutRotation(GlobalFunc::Ucs2Wcs(0.0));
|
||
pSect->SetInsert(ptIns);
|
||
pSect->SetGridScale(nGridScale);
|
||
pSect->SetScaleX(iScaleX);
|
||
pSect->SetScaleY(iScaleY);
|
||
|
||
// zxl 2013.12.5 add 控制交叉管显示
|
||
pSect->SetDimEle(bDimEle);
|
||
pSect->SetDimDist(bDimDist);
|
||
std::map<TPipeSys::SysType, bool>::const_iterator it;
|
||
for (it = data.begin(); it != data.end(); it++)
|
||
{
|
||
pSect->SetShowCrossPipe(it->first, it->second);
|
||
}
|
||
|
||
|
||
pSect->SetCalcMode(0);
|
||
pSect->SetTextHeight(g_Option::instance().g_nTwtDimHeight);
|
||
pSect->SetTextStyleId(GlobalFunc::InitTwtTextStyle(g_Option::instance().g_csTwtDimStyle));
|
||
pSect->SetDoteLayer(InitDoteLayer(LAY_TWT_DOTE));
|
||
pSect->SetWellDatas(lstWellSys);
|
||
pSect->setColor(AcCmColor()); //随层
|
||
pSect->SetStartDeep(nDeepStart);
|
||
pSect->SetTextLayer(InitLayer(LAY_TEXT));
|
||
pSect->SetGridLayer(GlobalFunc::InitGridLayer(LAY_TWT_GRID));
|
||
pSect->SetSectLayer(InitLayer(LAY_TWT_SECTION));
|
||
|
||
pSect->SetSheetHead(g_Option::instance().g_csVerticalSectionHeadFeed);
|
||
|
||
pSect->Calc();
|
||
double nHighEle = pSect->GetMaxDeep();
|
||
double nLowEle = pSect->GetMinDeep();
|
||
AcDbObjectId id = GlobalFunc::AddToCurrentSpace(pSect, Adesk::kTrue);
|
||
ssDraw.IncludeEnd();
|
||
ssDraw.Redraw(2);
|
||
ptIns = GlobalFunc::Wcs2Ucs(ptIns);
|
||
actrTransactionManager->flushGraphics(); //acad 刷新
|
||
XPoint xp;
|
||
if (GlobalFunc::DragMovePickSet(ssDraw, _T("\n请点取纵断面图位置<退出>: "), ptIns, xp) != RTNORM)
|
||
ssDraw.Erase();
|
||
|
||
}
|
||
|
||
// cet 2012.7.24 add 管网是否已经计算过
|
||
bool IsCalced(SSearchPipeList *pList, bool bFromImport = true)
|
||
{
|
||
std::stack<SSearchPipeList*> stackItem;
|
||
stackItem.push(pList);
|
||
SSearchPipeList *pLstTemp = NULL;
|
||
double dGradient = 0.0; // 坡度
|
||
XPoint ptS, ptE, ptFront;
|
||
while (!stackItem.empty())
|
||
{
|
||
pLstTemp = stackItem.top();
|
||
stackItem.pop();
|
||
if (pLstTemp->m_iType == 0)
|
||
{
|
||
OPENOBJ_BEGIN(pLstTemp->m_ID, AcDb::kForRead, CDbPipe, pPipe);
|
||
if (pPipe != NULL)
|
||
{
|
||
dGradient = pPipe->GetPipeGradient();
|
||
ptS = pPipe->StartPoint();
|
||
ptE = pPipe->EndPoint();
|
||
TPipeSys::FlowDirection flowDir = pPipe->GetFlowDir();
|
||
// 流向
|
||
if (pLstTemp->m_pPrevious != NULL)
|
||
{
|
||
OPENOBJ_BEGIN(pLstTemp->m_pPrevious->m_ID, AcDb::kForRead, CDbPipeNode, pNode);
|
||
if (pNode != NULL)
|
||
{
|
||
ptFront = pNode->GetLocation();
|
||
CDbPool *pPool = CDbPool::cast(pNode);
|
||
if (pPool != NULL)
|
||
{
|
||
int nNum = pPool->GetInterfaceNum();
|
||
for (int i = 0; i < nNum; i++)
|
||
{
|
||
const CPipeInterface &face = pPool->GetInterface(i);
|
||
if (face.m_idPipe == pLstTemp->m_ID)
|
||
{
|
||
ptFront = face.m_ptLocation;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
if (ptFront.Distance2d(ptS) < 0.001)
|
||
{
|
||
if (bFromImport && (flowDir == TPipeSys::kFromEnd)
|
||
|| !bFromImport && (flowDir == TPipeSys::kFromStart))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
else if (ptFront.Distance2d(ptE) < 0.001)
|
||
{
|
||
if (bFromImport && (flowDir == TPipeSys::kFromStart)
|
||
|| !bFromImport && (flowDir == TPipeSys::kFromEnd))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
// 管道坡度为零或起始点标高相等视为未计算过
|
||
if (fabs(dGradient) < 1e-6 || fabs(ptS.z - ptE.z) < 0.0001)
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
|
||
for (int i = 0; i < pLstTemp->m_lstNode.Length(); i++)
|
||
{
|
||
stackItem.push(pLstTemp->m_lstNode[i]);
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
// 内径改为工程直径,和图面赋值保持一致 zxl 2013.10.12 modify
|
||
// cet 2012.7.26 add 管内底标高
|
||
double GetPipeDownEle(const AcDbObjectId &idPipe, const AcDbObjectId &idWell)
|
||
{
|
||
// 获得与管道相连的点
|
||
XPoint ptWell;
|
||
AcDbEntity *pEnt = NULL;
|
||
acdbOpenObject(pEnt, idWell, AcDb::kForRead);
|
||
if (pEnt != NULL)
|
||
{
|
||
AecXDbWell *pWell = AecXDbWell::cast(pEnt);
|
||
CDbPool *pPool = CDbPool::cast(pEnt);
|
||
if (pWell != NULL)
|
||
{
|
||
ptWell = pWell->GetLocation();
|
||
}
|
||
else if (pPool != NULL)
|
||
{
|
||
int nNum = pPool->GetInterfaceNum();
|
||
for (int i = 0; i < nNum; i++)
|
||
{
|
||
const CPipeInterface &face = pPool->GetInterface(i);
|
||
if (face.m_idPipe == idPipe)
|
||
{
|
||
ptWell = face.m_ptLocation;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
pEnt->close();
|
||
}
|
||
|
||
double dEle = 0.0;
|
||
OPENOBJ_BEGIN(idPipe, AcDb::kForRead, CDbPipe, pPipe);
|
||
if (pPipe != NULL)
|
||
{
|
||
// 内径改为工程直径,和图面赋值保持一致 zxl 2013.10.12 modify
|
||
//CString sMaterial = GlobalFunc::GetPipeMaterialByIdx(pPipe->GetMaterial());
|
||
//double dDn = pPipe->GetDnDiameter();
|
||
//double dRadius = GetPipeDjByDn(sMaterial, static_cast<int>(dDn)) * 0.5;
|
||
double dUnit = 1.0;
|
||
if (!GlobalFunc::DocGetMeterUnitDraw())
|
||
{
|
||
dUnit = 0.001;
|
||
}
|
||
double dDn = pPipe->GetDnDiameter();
|
||
double dRadius = dDn * 0.001 * 0.5;
|
||
XPoint ptS = pPipe->StartPoint();
|
||
XPoint ptE = pPipe->EndPoint();
|
||
|
||
if (ptS.Distance2d(ptWell) < 0.001)
|
||
{
|
||
dEle = ptS.z * dUnit - dRadius;
|
||
}
|
||
else if (ptE.Distance2d(ptWell) < 0.001)
|
||
{
|
||
dEle = ptE.z * dUnit - dRadius;
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
return dEle;
|
||
}
|
||
|
||
//把树结构的数据转化为DLIST链表结构
|
||
BOOL GetWellListData2(SSearchPipeList *pListAll, DList<TWellData> &lstWellSys)
|
||
{
|
||
if (pListAll->m_iType == -1)
|
||
return FALSE;
|
||
TWellData *pList = new TWellData();
|
||
pList->m_iDn = pListAll->m_iDn;
|
||
if (pListAll->m_iType == 0)
|
||
{
|
||
OPENOBJ_BEGIN(pListAll->m_ID, AcDb::kForRead, CDbPipe, pPipe);
|
||
if (pPipe) {
|
||
CString csMat = GlobalFunc::GetPipeMaterialByIdx(pPipe->GetMaterial());
|
||
double nDnOut = GlobalFunc::GetPipeOutDByDn(csMat, pList->m_iDn) * 1000;
|
||
pList->m_iSpare = (int)nDnOut;
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
}
|
||
|
||
if (pListAll->m_iType == 3 || pListAll->m_iType == 4) {
|
||
pList->m_bIsWell = TRUE;
|
||
AcDbObjectId id = pListAll->m_ID;
|
||
ads_name ent;
|
||
acdbGetAdsName(ent, id);
|
||
CString csWellRadius = GlobalFunc::ReadXdata(ent, _T("TG-WELL-RADIUS"));
|
||
CString csGroundEle = GlobalFunc::ReadXdata(ent, _T("TG-WELL-GroundEle"));
|
||
BOOL bIsRectWell = FALSE;
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbEquipment, pEquip);
|
||
if (pEquip) {
|
||
AcDbObjectId idRec = pEquip->GetBlock2d();
|
||
if (_tcsicmp(GlobalFunc::GetBlkNameById(idRec), _T("$TwtSys$00000336")) == 0)
|
||
bIsRectWell = TRUE;
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
pList->m_nGroundEle = _tstof(csGroundEle);
|
||
pList->m_nWellRadius = _tstof(csWellRadius) / 2.0; //转化为半径
|
||
if (fabs(pList->m_nWellRadius) < 0.1)
|
||
pList->m_nWellRadius = 350;
|
||
if (bIsRectWell)
|
||
pList->m_nWellRadius *= (-1);
|
||
}
|
||
else
|
||
pList->m_bIsWell = FALSE;
|
||
if (pListAll->m_iNum == 4)
|
||
pList->m_bIsDropWell = TRUE;
|
||
|
||
//如果接化粪池,管线长度要减去化粪池遮挡的部分
|
||
if (pListAll->m_iType == 0) {
|
||
SSearchPipeList *pListPrevious = pListAll->m_pPrevious;
|
||
BOOL bFlag = FALSE;
|
||
if (pListPrevious != NULL && pListPrevious->m_iType == 4) {
|
||
bFlag = TRUE;
|
||
}
|
||
else if (pListAll->m_lstNode.Length() == 1) {
|
||
pListPrevious = pListAll->m_lstNode[0];
|
||
if (pListPrevious != NULL && pListPrevious->m_iType == 4) //4:化粪池
|
||
bFlag = TRUE;
|
||
}
|
||
if (bFlag) {
|
||
AcDbObjectId id = pListPrevious->m_ID;
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbPool, pEquip);
|
||
if (pEquip) {
|
||
double nXScale = pEquip->GetSizeX();
|
||
if (!GlobalFunc::DocGetMeterUnitDraw())
|
||
nXScale = nXScale / 2000;
|
||
else
|
||
nXScale = nXScale / 2.0;
|
||
|
||
pListAll->m_nSpare = pListAll->m_nLength + nXScale;//管长=对象长-池长度/2
|
||
// pListAll->m_nLength = pListAll->m_nLength - nXScale/2000;//管长=对象长-池长度/2
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
}
|
||
}
|
||
|
||
|
||
pList->m_csName = pListAll->m_csName;
|
||
pList->m_ID = pListAll->m_ID;
|
||
pList->m_nI = pListAll->m_nI;
|
||
pList->m_nUpEle = pListAll->m_nDang; //井地面标高
|
||
// cet 2012.7.26 add 化粪池地面标高
|
||
if (pListAll->m_iType == 4)
|
||
{
|
||
CDbPool *pPool = NULL;
|
||
acdbOpenObject(pPool, pListAll->m_ID, AcDb::kForRead);
|
||
if (pPool != NULL)
|
||
{
|
||
pList->m_nUpEle = pPool->GetGroundEle();
|
||
pPool->close();
|
||
}
|
||
}
|
||
pList->m_nDownEle = pListAll->m_nStartPress; //跌水井底标高
|
||
pList->m_nLength = pListAll->m_nLength;
|
||
pList->m_dRealLength = pListAll->m_nSpare; //真实管长用m_nSpare存放
|
||
// if(!GlobalFunc::DocGetMeterUnitDraw())
|
||
// pList->m_nLength = pList->m_nLength/1000;
|
||
|
||
lstWellSys.Append(pList);
|
||
BOOL bRet = TRUE;
|
||
long len = pListAll->m_lstNode.Length();
|
||
for (long i = 0; i < len; i++) {
|
||
SSearchPipeList *pList = pListAll->m_lstNode[i];
|
||
bRet = GetWellListData2(pList, lstWellSys);
|
||
}
|
||
return bRet;
|
||
}
|
||
|
||
// cet 2012.7.24 add 读取已计算管网信息
|
||
void GetCalcedWellListData(SSearchPipeList *pListAll, DList<TWellData> &lstWellSys, int nMode)
|
||
{
|
||
if (!GetWellListData2(pListAll, lstWellSys))
|
||
{
|
||
return;
|
||
}
|
||
|
||
double dDeepStart = 0.0;
|
||
double dPipeLen(0), dI(0), dFrontPipeEle(0);
|
||
double dEleStart = 0.0;
|
||
XPoint ptWell;
|
||
for (int i = 0; i < lstWellSys.Length(); i++)
|
||
{
|
||
if (lstWellSys[i]->m_bIsWell) // 井
|
||
{
|
||
AcDbObjectId id = lstWellSys[i]->m_ID;
|
||
if (dPipeLen > 0)
|
||
{
|
||
if (i != lstWellSys.Length() - 1)
|
||
{
|
||
lstWellSys[i]->m_nDownEle = GetPipeDownEle(lstWellSys[i + 1]->m_ID, id);
|
||
}
|
||
|
||
if (i != 0)
|
||
{
|
||
lstWellSys[i]->m_nFrondDownEle = GetPipeDownEle(lstWellSys[i - 1]->m_ID, id);
|
||
}
|
||
|
||
double dWellEle = lstWellSys[i]->m_nUpEle;
|
||
double dWellDownEle = lstWellSys[i]->m_nDownEle;
|
||
double dWellDeep = dWellEle - dWellDownEle; // 埋深 地面-井底
|
||
|
||
if (lstWellSys[i]->m_bIsDropWell)
|
||
{
|
||
dDeepStart = lstWellSys[i]->m_nDownEle;
|
||
}
|
||
else
|
||
{
|
||
double dRadiusFront(0), dRadiusBack(0);
|
||
if (i != 0)
|
||
{
|
||
dRadiusFront = lstWellSys[i - 1]->m_iDn;
|
||
}
|
||
|
||
if (i != lstWellSys.Length() - 1)
|
||
{
|
||
dRadiusBack = lstWellSys[i + 1]->m_iDn;
|
||
}
|
||
// 得到外径
|
||
double dDifference(0);
|
||
if (dRadiusFront > 0 && dRadiusBack > 0) // 井前后管径差
|
||
{
|
||
dDifference = (dRadiusBack - dRadiusFront) / 1000;
|
||
}
|
||
if (nMode == 0) // 管顶平接
|
||
dDeepStart = dDeepStart - dI * dPipeLen - dDifference;
|
||
else if (nMode == 1) // 管底平接
|
||
dDeepStart = dDeepStart - dI * dPipeLen;
|
||
else if (nMode == 2 || nMode == 3) // 水面平接
|
||
dDeepStart = dDeepStart - dI * dPipeLen - dDifference / 2;
|
||
if (lstWellSys[i]->m_csName == _T("HC"))
|
||
{
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbPool, pEquip);
|
||
if (pEquip)
|
||
{
|
||
if (pEquip->GetSpare() > 0.01)
|
||
dDeepStart -= pEquip->GetSpare();
|
||
else
|
||
dDeepStart -= 0.1; // 化粪池
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
|
||
dWellDeep = dWellEle - dDeepStart;
|
||
lstWellSys[i]->m_nDeep = dWellDeep;
|
||
}
|
||
|
||
if (i == 0)
|
||
{
|
||
lstWellSys[i]->m_nDownEle = GetPipeDownEle(lstWellSys[i + 1]->m_ID, id);
|
||
lstWellSys[i]->m_nDeep = lstWellSys[i]->m_nUpEle - lstWellSys[i]->m_nDownEle;
|
||
dDeepStart = lstWellSys[i]->m_nDownEle;
|
||
}
|
||
}
|
||
else if (!lstWellSys[i]->m_bIsWell) // 管
|
||
{
|
||
dPipeLen = lstWellSys[i]->m_nLength;
|
||
dI = lstWellSys[i]->m_nI;
|
||
}
|
||
}
|
||
}
|
||
|
||
//重新确定水流方向, 链表第一个点为水入口 cet 2012.7.26 add
|
||
void ResetPipeDirFromImport(SSearchPipeList *pListAll)
|
||
{
|
||
if (pListAll == NULL)
|
||
{
|
||
return;
|
||
}
|
||
|
||
long len = pListAll->m_lstNode.Length();
|
||
if (pListAll->m_iType == 0)
|
||
{
|
||
XPoint ptFront;
|
||
if (pListAll->m_pPrevious != NULL)
|
||
{
|
||
OPENOBJ_BEGIN(pListAll->m_pPrevious->m_ID, AcDb::kForRead, CDbPipeNode, pNode);
|
||
if (pNode != NULL)
|
||
{
|
||
ptFront = pNode->GetLocation();
|
||
CDbPool *pPool = CDbPool::cast(pNode);
|
||
if (pPool != NULL)
|
||
{
|
||
int nNum = pPool->GetInterfaceNum();
|
||
for (int i = 0; i < nNum; i++)
|
||
{
|
||
const CPipeInterface &face = pPool->GetInterface(i);
|
||
if (face.m_idPipe == pListAll->m_ID)
|
||
{
|
||
ptFront = face.m_ptLocation;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
OPENOBJ_BEGIN(pListAll->m_ID, AcDb::kForWrite, CDbPipe, pPipe);
|
||
if (pPipe && !!ptFront)
|
||
{
|
||
XPoint p1 = ptFront;
|
||
p1.z = 0;
|
||
XPoint p2 = pPipe->StartPoint();
|
||
p2.z = 0;
|
||
if (pPipe->IsVertical())
|
||
{
|
||
if (pPipe->StartPoint().z > pPipe->EndPoint().z)
|
||
{
|
||
pPipe->SetFlowDir(TPipeSys::kFromEnd);
|
||
}
|
||
else
|
||
{
|
||
pPipe->SetFlowDir(TPipeSys::kFromStart);
|
||
}
|
||
}
|
||
else if (p1 == p2)
|
||
pPipe->SetFlowDir(TPipeSys::kFromStart);
|
||
else
|
||
pPipe->SetFlowDir(TPipeSys::kFromEnd);
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
|
||
for (long i = 0; i < len; i++)
|
||
{
|
||
SSearchPipeList *pList = pListAll->m_lstNode[i];
|
||
ResetPipeDirFromImport(pList);
|
||
}
|
||
}
|
||
|
||
//纵断面图主函数
|
||
void VerticalSection()
|
||
{
|
||
Entity entStartWell, entEndWell;
|
||
RBList rbMask(RTDXF0, _T("AEC_ZT_WELL"), NULL);
|
||
RBList rbMaskDim(RTDXF0, _T("AEC_ZT_WELLDIM"), NULL);
|
||
if (GlobalFunc::SelectEntity(_T("\n请选择起点井:<退出>"), entStartWell, rbMask) != RTNORM)
|
||
return;
|
||
|
||
TCHAR szLay[256];
|
||
entStartWell.GetData(8, szLay);
|
||
if (_tcsicmp(szLay, LAY_WELL_FEED) == 0)
|
||
{
|
||
//VerticalSectionFeed(entStartWell);
|
||
return;
|
||
}
|
||
|
||
|
||
GlobalFunc::SelectEntity(_T("\n请选择终止井:<自动搜索>"), entEndWell, rbMask);
|
||
|
||
SSearchPipeList *pListAll = new SSearchPipeList();
|
||
PickSet ssAll(SS_FREE);
|
||
ssAll += entStartWell;
|
||
|
||
//if (!SearchOutdoorWell(entStartWell, entEndWell, pListAll, ssAll, FALSE)) {
|
||
// g_Option::instance().adsout << _T("起点井和终止井没有正确相连\n");
|
||
// ssAll.Redraw(3);
|
||
// delete pListAll;
|
||
// return;
|
||
//}
|
||
if (ssAll.Length() < 3) {
|
||
AfxMessageBox(_T("系统数据不全, 请检查管线是否标注管径, 管线流动方向是否不一致!"));
|
||
delete pListAll;
|
||
return;
|
||
}
|
||
|
||
actrTransactionManager->flushGraphics(); //acad 刷新
|
||
ssAll.Redraw(3);
|
||
/* cet 2012.7.24 modify 根据管网是否已经计算过加以区分
|
||
long len = ssAll.Length();
|
||
TCHAR szTmp[256];
|
||
int rett = ads_getstring(NULL, _T("\n需要计算的管网系统已高亮显示:<计算>"), szTmp);
|
||
if(rett == RTCAN){
|
||
ssAll.Redraw(4);
|
||
delete pListAll;
|
||
return;
|
||
}
|
||
|
||
double nDeepStart(0.8);
|
||
CTemporaryResourceOverride vTemp;
|
||
CWellCalcSettingDlg dlg(0);
|
||
|
||
if(_tcsicmp(szLay, LAY_WELL_FEED) == 0)
|
||
dlg.m_iMode = 3;
|
||
|
||
GetWellListData(pListAll, dlg.m_lstWellSys);
|
||
*/
|
||
CTemporaryResourceOverride vTemp;
|
||
CWellCalcSettingDlg dlg(0);
|
||
dlg.SetListAll(pListAll);
|
||
if (_tcsicmp(szLay, LAY_WELL_FEED) == 0)
|
||
dlg.m_iMode = 3;
|
||
if (IsCalced(pListAll)) // 计算过
|
||
{
|
||
TCHAR szTmp[256];
|
||
int nRet = 0;
|
||
INITGET_BEG(0, _T("A"));
|
||
nRet = ads_getkword(_T("\n需要计算的管网系统已高亮显示[读取已经算信息(A)]<重新计算>:"), szTmp);
|
||
INITGET_END();
|
||
if (nRet == RTNONE)
|
||
{
|
||
GetWellListData2(pListAll, dlg.m_lstWellSys);
|
||
}
|
||
else if (nRet == RTNORM)
|
||
{
|
||
GetCalcedWellListData(pListAll, dlg.m_lstWellSys, dlg.m_iMode);
|
||
// 计算过的管网可直接进行图面赋值,高程表,纵断面
|
||
dlg.m_bCalc = TRUE;
|
||
}
|
||
else if (nRet == RTCAN)
|
||
{
|
||
ssAll.Redraw(4);
|
||
delete pListAll;
|
||
return;
|
||
}
|
||
}
|
||
else // 未计算
|
||
{
|
||
TCHAR szTmp[256];
|
||
int nRet = ads_getstring(NULL, _T("\n需要计算的管网系统已高亮显示:<计算>"), szTmp);
|
||
if (nRet == RTCAN)
|
||
{
|
||
ssAll.Redraw(4);
|
||
delete pListAll;
|
||
return;
|
||
}
|
||
GetWellListData2(pListAll, dlg.m_lstWellSys);
|
||
}
|
||
|
||
dlg.m_ssAll += ssAll;
|
||
XPoint ptLow3, ptUp3;
|
||
ssAll.GetExtend(ptLow3, ptUp3);
|
||
GlobalFunc::AssureInCurrentView_New(ptLow3, ptUp3);
|
||
|
||
if (dlg.DoModal() != IDOK) {
|
||
delete pListAll; //删除链头
|
||
ssAll.Redraw(4);
|
||
return;
|
||
}
|
||
delete pListAll; //删除链头
|
||
ssAll.Redraw(4);
|
||
return;
|
||
}
|
||
|
||
//***************************************************************************************************
|
||
// 编辑纵断
|
||
//***************************************************************************************************
|
||
//extern int EditVerticalSectionFeed(AcDbObjectId id);
|
||
|
||
int EditVerticalSection(AcDbObjectId id)
|
||
{
|
||
|
||
if (!id)
|
||
return RTERROR;
|
||
|
||
CTemporaryResourceOverride vTemp;
|
||
CWellCalcSettingDlg dlg(1);
|
||
// cet 2011.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;
|
||
// cet 2012.1.30 add 设置当前对话框为编辑纵断面图状态
|
||
dlg.EditVerticalSection(TRUE);
|
||
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbVerticalSection, pVS);
|
||
if (pVS) {
|
||
dlg.m_csSheetHead = pVS->GetSheetHead();
|
||
pVS->GetWellDatas(dlg.m_lstWellSys);
|
||
// dlg.m_dDeep = pVS->GetStartDeep();
|
||
dlg.m_csDeep.Format(_T("%.3f"), pVS->GetStartDeep());
|
||
dlg.m_iX = pVS->GetScaleX();
|
||
dlg.m_iY = pVS->GetScaleY();
|
||
int iMode = pVS->GetCalcMode();
|
||
if (iMode >= 100) {
|
||
iMode -= 100;
|
||
dlg.m_bFromRight = TRUE;
|
||
}
|
||
dlg.m_iMode = iMode;
|
||
dlg.m_bDimEle = pVS->IsDimEle(); // cet 2011.6.3 add
|
||
dlg.m_bDimDist = pVS->IsDimDist();// zxl 2013.12.10 add
|
||
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;
|
||
// cet 2011.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();
|
||
|
||
OPENOBJ_BEGIN(dlg.m_lstWellSys[0]->m_ID, AcDb::kForRead, AecXDbWell, pWell);
|
||
if (!pWell) {
|
||
g_Option::instance().adsout << _T("\n平面图信息已经丢失!请确认平面图和纵断面图在一张DWG中。");
|
||
return RTERROR;
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
dlg.SetShowPipeData(data); // cet 2011.12.5 add
|
||
if (dlg.DoModal() == IDOK) {
|
||
dlg.GetShowPipeData(data); // cet 2011.12.5 add
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, CDbVerticalSection, 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_lstWellSys);
|
||
pVS->SetStartDeep(_tstof(dlg.m_csDeep));
|
||
int iMode = dlg.m_iMode;
|
||
if (dlg.m_bFromRight && iMode != 3)
|
||
iMode += 100;
|
||
pVS->SetCalcMode(iMode);
|
||
pVS->SetScaleX(dlg.m_iX);
|
||
pVS->SetScaleY(dlg.m_iY);
|
||
pVS->SetDimEle(dlg.m_bDimEle ? true : false); // cet 2011.6.3 add
|
||
pVS->SetDimDist(dlg.m_bDimDist ? true : false);// zxl 2013.12.10 add
|
||
pVS->Calc();
|
||
// cet 2011.12.5 add
|
||
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;
|
||
}
|
||
|
||
|
||
//***************************************************************************************************
|
||
// 纵断标高
|
||
//***************************************************************************************************
|
||
|
||
|
||
//从纵断面图读取井的跌落高度 zxl 2011.11.17 add
|
||
void SetWellDropHeight(DList<TWellData> &lstWellSys)
|
||
{
|
||
double dLen = 0.0;
|
||
double dDI = 0.0;
|
||
double dDim1 = 0.0;
|
||
double dDim2 = 0.0;
|
||
for (int i = 1; i < lstWellSys.Length(); i++)
|
||
{
|
||
dLen = lstWellSys[i]->m_nLength;
|
||
dDI = lstWellSys[i]->m_nI;
|
||
dDim1 = lstWellSys[i]->m_nFrondDownEle;
|
||
dDim2 = lstWellSys[i]->m_nDownEle;
|
||
if (fabs(dDim1 + dDI * dLen - dDim2) > 0.001)
|
||
{
|
||
CString sTemp;
|
||
sTemp.Format(_T("%0.3f"), fabs(dDim1 + dDI * dLen - dDim2));
|
||
lstWellSys[i]->m_csSpare = sTemp;
|
||
}
|
||
}
|
||
}
|
||
|
||
void ModifyVericalSectionEle()
|
||
{
|
||
Entity ent;
|
||
RBList rbMask(RTDXF0, _T("AEC_ZT_VERTICALSECTION,AEC_ZT_VERTICALSECTION_FEED"), NULL);
|
||
if (GlobalFunc::SelectEntity(_T("\n请选择纵断面图<退出>:"), ent, rbMask) != RTNORM)
|
||
return;
|
||
if (ent.Is(_T("AEC_ZT_VERTICALSECTION")))
|
||
{
|
||
CTemporaryResourceOverride vTemp;
|
||
CWellCalcModifyEleDlg dlg(0);
|
||
OPENOBJ_BEGIN(ent, AcDb::kForRead, CDbVerticalSection, pVS);
|
||
if (pVS) {
|
||
pVS->GetWellDatas(dlg.m_lstWellSys);
|
||
SetWellDropHeight(dlg.m_lstWellSys);//从纵断面图读取井的跌落高度 zxl 2011.11.17 add
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
if (dlg.DoModal() == IDOK) {
|
||
OPENOBJ_BEGIN(ent, AcDb::kForWrite, CDbVerticalSection, pVS);
|
||
if (pVS) {
|
||
pVS->SetWellDatas(dlg.m_lstWellSys);
|
||
pVS->Calc();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
CTemporaryResourceOverride vTemp;
|
||
CWellCalcModifyEleDlg dlg(1);
|
||
OPENOBJ_BEGIN(ent, AcDb::kForRead, CDbVerticalSectionFeed, pVS);
|
||
if (pVS) {
|
||
pVS->GetWellDatas(dlg.m_lstFeedWellSys);
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
if (dlg.DoModal() == IDOK) {
|
||
OPENOBJ_BEGIN(ent, AcDb::kForWrite, CDbVerticalSectionFeed, pVS);
|
||
if (pVS) {
|
||
pVS->SetWellDatas(dlg.m_lstFeedWellSys);
|
||
pVS->Calc();
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
}
|
||
|
||
TGridWellDeep::TGridWellDeep()
|
||
{
|
||
AppendCol(_T("起点"), 35);
|
||
AppendCol(_T("终点"), 35);
|
||
AppendCol(_T("管长m"), 50);
|
||
AppendCol(_T("管径mm"), 50);
|
||
AppendCol(_T("坡度‰"), 55);
|
||
AppendCol(_T("管底坡降m"), 50);
|
||
AppendCol(_T("起点"), 45);
|
||
AppendCol(_T("终点"), 45);
|
||
AppendCol(_T("起点"), 45);
|
||
AppendCol(_T("终点"), 45);
|
||
AppendCol(_T("起点"), 45);
|
||
AppendCol(_T("终点"), 45);
|
||
SetColPosFix();
|
||
SetColFixLength();
|
||
SetColFixWidth(); //不响应调整列宽度操作
|
||
SetNoPaste();
|
||
FitLastCol();
|
||
GetCol(3).SetComboEdit();
|
||
GetCol(4).SetComboEdit();
|
||
|
||
COLORREF color = RGB(255, 0, 0);
|
||
GetCol(4).SetTextColor(color);
|
||
GetCol(3).SetTextColor(color);
|
||
|
||
COLORREF color2 = RGB(0, 0, 255);;
|
||
GetCol(5).SetTextColor(color2);
|
||
GetCol(8).SetTextColor(color2);
|
||
GetCol(9).SetTextColor(color2);
|
||
GetCol(10).SetTextColor(color2);
|
||
GetCol(11).SetTextColor(color2);
|
||
|
||
|
||
}
|
||
|
||
void TGridWellDeep::OnCellComboString(WDGridCell&cell, CComboBox&combo)
|
||
{
|
||
if (cell.GetColIndex() == 3) {
|
||
combo.AddString(_T("200"));
|
||
combo.AddString(_T("250"));
|
||
combo.AddString(_T("300"));
|
||
combo.AddString(_T("350"));
|
||
combo.AddString(_T("400"));
|
||
combo.AddString(_T("450"));
|
||
combo.AddString(_T("500"));
|
||
combo.AddString(_T("600"));
|
||
}
|
||
else if (cell.GetColIndex() == 4) {
|
||
combo.AddString(_T("1"));
|
||
combo.AddString(_T("2"));
|
||
combo.AddString(_T("3"));
|
||
combo.AddString(_T("4"));
|
||
combo.AddString(_T("5"));
|
||
combo.AddString(_T("6"));
|
||
}
|
||
}
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CWellCalcSettingDlg dialog
|
||
|
||
//double CWellCalcSettingDlg::m_nDeep = 0.8;
|
||
const UINT nMenuId = 100; // cet 2011.12.5 add
|
||
const UINT nMenuTypeId = 1000; // zxl 2012.03.29 add
|
||
int CWellCalcSettingDlg::m_iLengthType = 0;
|
||
CWellCalcSettingDlg::CWellCalcSettingDlg(int mode, CWnd* pParent /*=NULL*/)
|
||
: CDialog(CWellCalcSettingDlg::IDD, pParent), m_ssAll(SS_FREE)
|
||
{
|
||
//{{AFX_DATA_INIT(CWellCalcSettingDlg)
|
||
m_iMode = 0;
|
||
m_csX = _T("100");
|
||
m_csY = _T("50");
|
||
m_iGridScale = 0;
|
||
m_bFromRight = FALSE;
|
||
m_iInput = 0;
|
||
m_csDeep = _T("0.8");
|
||
m_csEndEle = _T("");
|
||
m_bDimEle = FALSE;
|
||
m_bDimDist = FALSE;
|
||
//}}AFX_DATA_INIT
|
||
// m_dDeep = 0.8;
|
||
// m_dEndEle = 0;
|
||
|
||
m_bNeedDraw = FALSE;
|
||
/* cet 2012.1.30 modify 读取比例数据
|
||
m_iX = (int)DocGetPScale();
|
||
if(GlobalFunc::DocGetMeterUnitDraw())
|
||
m_iX =m_iX*1000;
|
||
m_iY = 50;
|
||
*/
|
||
ReadWriteScaleFromRegedit(TRUE);
|
||
m_bEdit = FALSE;
|
||
|
||
m_bCalc = FALSE;
|
||
// m_nMaxDeep = 0;
|
||
// m_nMinDeep = 0;
|
||
m_iOpenMode = mode;
|
||
m_csSheetHead = _T("");
|
||
m_pMenu = NULL;
|
||
|
||
// zxl 2012.03.28 add
|
||
m_pMenuLength = NULL;
|
||
m_pListAll = NULL;
|
||
|
||
InitMapData(); // cet 2011.12.5 add
|
||
}
|
||
|
||
|
||
void CWellCalcSettingDlg::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CWellCalcSettingDlg)
|
||
DDX_Control(pDX, IDC_COMBO_Y, m_comboY);
|
||
DDX_Control(pDX, IDC_COMBO_X, m_comboX);
|
||
DDX_CBIndex(pDX, IDC_COMBO_MODE, m_iMode);
|
||
DDX_CBString(pDX, IDC_COMBO_X, m_csX);
|
||
DDX_CBString(pDX, IDC_COMBO_Y, m_csY);
|
||
DDX_CBIndex(pDX, IDC_COMBO_GRID, m_iGridScale);
|
||
DDX_Check(pDX, IDC_CHECK_FROM_RIGHT, m_bFromRight);
|
||
DDX_Radio(pDX, IDC_RADIO_INPUT1, m_iInput);
|
||
DDX_Text(pDX, IDC_EDIT_DEEP, m_csDeep);
|
||
DDX_Text(pDX, IDC_EDIT_ENDELE, m_csEndEle);
|
||
DDX_Check(pDX, IDC_CHECK_DIMELE, m_bDimEle);
|
||
DDX_Check(pDX, IDC_CHECK_DIMDIST, m_bDimDist);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CWellCalcSettingDlg, CDialog)
|
||
//{{AFX_MSG_MAP(CWellCalcSettingDlg)
|
||
ON_BN_CLICKED(IDC_BUTTON_CALC, OnButtonCalc)
|
||
ON_BN_CLICKED(IDC_BUTTON_SHEET, OnButtonSheet)
|
||
ON_BN_CLICKED(IDC_BUTTON_TODWG, OnButtonTodwg)
|
||
ON_BN_CLICKED(IDC_BUTTON_MODIFYELE, OnButtonModifyele)
|
||
ON_BN_CLICKED(IDC_BUTTON_HIDE, OnButtonHide)
|
||
ON_BN_CLICKED(IDC_RADIO_INPUT1, OnRadioInput1)
|
||
ON_BN_CLICKED(IDC_RADIO_INPUT2, OnRadioInput2)
|
||
ON_BN_CLICKED(IDC_BUTTON_SHOW, OnButtonShow)
|
||
ON_BN_CLICKED(IDC_BTN_MENU, OnBtnLengthType)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CWellCalcSettingDlg message handlers
|
||
|
||
//绘制纵断面图
|
||
void CWellCalcSettingDlg::OnOK()
|
||
{
|
||
UpdateData(TRUE);
|
||
m_iX = _ttoi(m_csX);
|
||
m_iY = _ttoi(m_csY);
|
||
// cet 2012.1.30 add 非编辑纵断面图时,保存比例数据
|
||
if (!m_bEdit)
|
||
{
|
||
ReadWriteScaleFromRegedit(FALSE);
|
||
}
|
||
|
||
ResetWellStake();
|
||
|
||
if (m_iOpenMode == 1) {
|
||
CDialog::OnOK();
|
||
return;
|
||
}
|
||
if (m_lstWellSys.Length() < 3 || !m_bCalc)
|
||
return;
|
||
if (m_iX < 1 || m_iY < 1)
|
||
{
|
||
MessageBox(_T("绘图比例应大于0!"), _T("比例错误")); // cet 2011.6.13 add
|
||
return;
|
||
}
|
||
GlobalFunc::HideDialog(this, TRUE);
|
||
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;
|
||
|
||
int iMode = m_iMode;
|
||
if (m_bFromRight && m_iMode != 3)
|
||
iMode += 100;
|
||
// DrawVerticalSection(m_lstWellSys, m_iX, m_iY, nGridScale, iMode, _tstof(m_csDeep)); cet 2011.6.3 modify
|
||
// cet 2011.12.5 modify
|
||
// DrawVerticalSection(m_lstWellSys, m_iX, m_iY, nGridScale, iMode, _tstof(m_csDeep), m_bDimEle ? true : false);
|
||
std::map<TPipeSys::SysType, bool> data;
|
||
GetShowPipeData(data);
|
||
DrawVerticalSection(m_lstWellSys, m_iX, m_iY, nGridScale, iMode, _tstof(m_csDeep), m_bDimEle ? true : false, m_bDimDist ? true : false, data);
|
||
TCHAR szTmp[256];
|
||
//TPipePerDocData *pData = GetCurPipeDocData();
|
||
//pData->ApplyUpdates();
|
||
ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp);
|
||
GlobalFunc::HideDialog(this, FALSE);
|
||
return;
|
||
}
|
||
|
||
//std::vector 的回调函数
|
||
static bool GreaterByParm(TPtOnStake item1, TPtOnStake item2)
|
||
{
|
||
if (item1.m_dParm - item2.m_dParm < AcGeContext::gTol.equalPoint())//倒序
|
||
{
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//对桩进行排序
|
||
BOOL SortStakePoints(AcArray<TPtOnStake> &arStake, AcDbCurve * pCurve)
|
||
{
|
||
std::vector<TPtOnStake> PtOnStakeVector;
|
||
|
||
TPtOnStake ptOnCrItem;
|
||
int len = arStake.length();
|
||
for (int i = 0; i < len; i++)
|
||
{
|
||
ptOnCrItem = arStake.at(i);
|
||
ptOnCrItem.m_pCurve = pCurve;
|
||
pCurve->getClosestPointTo(ptOnCrItem.m_ptGeOn, ptOnCrItem.m_ptGeOn);
|
||
pCurve->getParamAtPoint(ptOnCrItem.m_ptGeOn, ptOnCrItem.m_dParm);
|
||
PtOnStakeVector.push_back(ptOnCrItem);
|
||
}
|
||
|
||
//排序
|
||
std::vector<TPtOnStake>::iterator itHead = PtOnStakeVector.begin();
|
||
std::vector<TPtOnStake>::iterator itTail = PtOnStakeVector.end();
|
||
std::sort(itHead, itTail, GreaterByParm);
|
||
itHead = PtOnStakeVector.begin();
|
||
itTail = PtOnStakeVector.end();
|
||
|
||
arStake.setLogicalLength(0);
|
||
|
||
std::vector<TPtOnStake>::iterator it;
|
||
|
||
for (it = itHead; it != itTail; it++)
|
||
{
|
||
arStake.append(*it);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
void CWellCalcSettingDlg::GetCurveFPick(Entity ent, PickSet &ss, RBList &rbMask)
|
||
{
|
||
if (ent.Is(_T("LINE"))) {
|
||
XLine line(ent);
|
||
GlobalFunc::AssureInCurrentView_New(line.StartPoint(), line.EndPoint());
|
||
line.TransUCS(RBGroups(0), RBGroups(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];
|
||
GlobalFunc::AssureInCurrentView_New(pt1, pt2);
|
||
xPline.TransUCS(RBGroups(0), RBGroups(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];
|
||
GlobalFunc::AssureInCurrentView_New(pt1, pt2);
|
||
xPline.TransUCS(RBGroups(0), RBGroups(1)); // 把 UCS 转为 WCS
|
||
RBList rbPoint = xPline.Polygon();
|
||
ss.Get(_T("F"), rbPoint, NULL, rbMask);
|
||
}
|
||
}
|
||
|
||
//已知桩号数字,返回标注内容, 如:820 返回K0+825
|
||
CString GetStakeName(double dTextValue, CString sStakePrefix)
|
||
{
|
||
double dTextN = dTextValue / 1000;
|
||
CString sText, sTextN;
|
||
|
||
sTextN.Format(_T("%.2f"), dTextN);
|
||
//文字是1000的多少倍
|
||
int nTextN = _ttoi(sTextN);
|
||
|
||
//除以1000后的余数
|
||
double dTextResidue = fabs(dTextValue - 1000 * nTextN);
|
||
sTextN.Format(_T("%.0f"), dTextResidue);
|
||
int nLen = sTextN.GetLength();
|
||
sTextN.Format(_T("%.2f"), dTextResidue);
|
||
//判断有没有小数
|
||
double dEndResidue = _tstof(sTextN.Right(2));
|
||
dEndResidue /= 100;
|
||
if (dEndResidue < 0.01)
|
||
{
|
||
if (nLen == 1)
|
||
sText.Format(_T("%s%d+00%.0f"), sStakePrefix, nTextN, dTextResidue);
|
||
else if (nLen == 2)
|
||
sText.Format(_T("%s%d+0%.0f"), sStakePrefix, nTextN, dTextResidue);
|
||
else
|
||
sText.Format(_T("%s%d+%.0f"), sStakePrefix, nTextN, dTextResidue);
|
||
}
|
||
else
|
||
{
|
||
if (nLen == 1)
|
||
sText.Format(_T("%s%d+00%.2f"), sStakePrefix, nTextN, dTextResidue);
|
||
else if (nLen == 2)
|
||
sText.Format(_T("%s%d+0%.2f"), sStakePrefix, nTextN, dTextResidue);
|
||
else
|
||
sText.Format(_T("%s%d+%.2f"), sStakePrefix, nTextN, dTextResidue);
|
||
}
|
||
return sText;
|
||
|
||
}
|
||
|
||
//更新井的桩号
|
||
void CWellCalcSettingDlg::ResetWellStake()
|
||
{
|
||
RBList rbMask(RTDXF0, _T("AEC_ZT_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_Option::instance().g_csVerticalSectionHead.Find(_T("桩号")) < 0)
|
||
return;
|
||
}
|
||
|
||
//1. 得到桩号所经过的路径曲线
|
||
CString csStakeHead = _T("K");
|
||
Entity entCurve;
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
if (m_lstWellSys[i]->m_bIsWell) { //井
|
||
AcDbObjectId id = m_lstWellSys[i]->m_ID;
|
||
XPoint ptWell, ptStake;
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbEquipment, 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, CDbStake, 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);
|
||
GlobalFunc::AssureInCurrentView_New(ptStake, ptStake);
|
||
GlobalFunc::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, CDbStake, 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();
|
||
// CString csVal = GlobalFunc::ReadXdata(ent, _T("STAKEVALUE"));
|
||
//
|
||
// OPENOBJ_BEGIN(ent, AcDb::kForRead, CDbEquipment, pEquip);
|
||
// if(pEquip){
|
||
// XPoint pt = pEquip->GetLocation();
|
||
// pt.z = 0;
|
||
// AcDbObjectId id = pEquip->objectId();
|
||
// TPtOnStake ptOnStake;
|
||
// ptOnStake.m_ptGeOn = pt;
|
||
// ptOnStake.m_dVal = _tstof(csVal);
|
||
// 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_lstWellSys.Length(); i++) {
|
||
if (m_lstWellSys[i]->m_bIsWell) { //井
|
||
AcDbObjectId id = m_lstWellSys[i]->m_ID;
|
||
XPoint ptWell, ptStake;
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbEquipment, 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 = GlobalFunc::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);
|
||
GlobalFunc::WriteXdata(entWell, _T("TWT-STAKEVALUE"), csText);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
//delete pCurve;
|
||
}
|
||
|
||
// zxl 2012.03.29 add
|
||
void CWellCalcSettingDlg::RetsetLength(DList<TWellData> &lst)
|
||
{
|
||
if (m_iLengthType == 0)
|
||
{
|
||
return;
|
||
}
|
||
double dLen = 0.0;
|
||
int iIndex = 0;
|
||
for (int i = 0; i < lst.Length(); i++)
|
||
{
|
||
dLen = lst[i]->m_nLength;
|
||
iIndex = dLen;
|
||
if (m_iLengthType == 1)
|
||
{
|
||
double d = dLen - iIndex;
|
||
if (d - 0.5 > 0.0)
|
||
{
|
||
dLen = iIndex + 1;
|
||
}
|
||
else if (d - 0.5 < 0.0 && d - 0.0 > 0.0)
|
||
{
|
||
dLen = iIndex + 0.5;
|
||
}
|
||
lst[i]->m_nLength = dLen;
|
||
}
|
||
else if (m_iLengthType == 2)
|
||
{
|
||
if (fabs(dLen - iIndex) > 0.001)
|
||
{
|
||
dLen = iIndex + 1;
|
||
lst[i]->m_nLength = dLen;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//绘制高程表
|
||
void CWellCalcSettingDlg::OnButtonSheet()
|
||
{
|
||
UpdateData(TRUE);
|
||
if (m_iOpenMode == 0 && (m_lstWellSys.Length() < 3 || !m_bCalc))
|
||
return;
|
||
GlobalFunc::HideDialog(this, TRUE);
|
||
|
||
// zxl 2012.03.29 add
|
||
DList<TWellData> lstWellSysCopy;
|
||
lstWellSysCopy.copyFrom(m_lstWellSys);
|
||
RetsetLength(lstWellSysCopy);
|
||
|
||
InsertWellCalcSheet(lstWellSysCopy);
|
||
actrTransactionManager->flushGraphics(); //acad 刷新
|
||
TCHAR szTmp[256];
|
||
ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp);
|
||
GlobalFunc::HideDialog(this, FALSE);
|
||
return;
|
||
}
|
||
|
||
void CWellCalcSettingDlg::ResetWellDownEle()
|
||
{
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
m_lstWellSys[i]->m_nDownEle = m_lstWellOld[i]->m_nDownEle;
|
||
m_lstWellSys[i]->m_bIsDropWell = m_lstWellOld[i]->m_bIsDropWell;
|
||
}
|
||
}
|
||
|
||
//反算起点
|
||
void CWellCalcSettingDlg::CalcFromEnd()
|
||
{
|
||
//先检查是否有跌水井
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
if (m_lstWellSys[i]->m_bIsWell) {
|
||
if (m_lstWellSys[i]->m_bIsDropWell) {
|
||
MessageBox(_T("有跌水井,不支持反向计算。"));
|
||
return;
|
||
}
|
||
|
||
}
|
||
}
|
||
int len = m_lstWellSys.Length();
|
||
if (len < 3)
|
||
return;
|
||
|
||
double nPipeLen(0), nI(0), nFrontPipeEle(0);
|
||
double dEndEle = _tstof(m_csEndEle);
|
||
|
||
m_lstWellSys[len - 1]->m_nDownEle = dEndEle;
|
||
m_lstWellSys[len - 1]->m_nFrondDownEle = dEndEle;
|
||
m_lstWellSys[len - 1]->m_nDeep = m_lstWellSys[len - 1]->m_nUpEle - dEndEle;
|
||
nFrontPipeEle = dEndEle;
|
||
|
||
//m_nPipeQ 为井埋深(米), m_nV 为井底标高(米), nI为管坡度, m_nDang地面标高, m_nStartPress跌水井底标高
|
||
for (i = len - 1; i > -1; i--) {
|
||
if (m_lstWellSys[i]->m_bIsWell) { //井
|
||
AcDbObjectId id = m_lstWellSys[i]->m_ID;
|
||
if (nPipeLen > 0) {
|
||
double dRadiusFront(0), dRadiusBack(0);
|
||
if (i != 0)
|
||
dRadiusFront = m_lstWellSys[i - 1]->m_iDn;
|
||
dRadiusBack = m_lstWellSys[i + 1]->m_iDn;
|
||
double dDifference(0);
|
||
if (dRadiusFront > 0 && dRadiusBack > 0)//井前后管径差
|
||
dDifference = (dRadiusBack - dRadiusFront) / 1000;
|
||
|
||
double dWellDownEle = nFrontPipeEle + nI * nPipeLen;
|
||
if (m_iMode == 0) //管顶平接
|
||
nFrontPipeEle = dWellDownEle + dDifference;
|
||
else if (m_iMode == 1) //管底平接
|
||
nFrontPipeEle = dWellDownEle;
|
||
else if (m_iMode == 2 || m_iMode == 3) //水面平接
|
||
nFrontPipeEle = dWellDownEle + dDifference / 2;
|
||
|
||
double dWellDeep = m_lstWellSys[i]->m_nUpEle - m_lstWellSys[i]->m_nDownEle;
|
||
m_lstWellSys[i]->m_nDownEle = dWellDownEle;
|
||
m_lstWellSys[i]->m_nDeep = dWellDeep;
|
||
m_lstWellSys[i]->m_nFrondDownEle = nFrontPipeEle;
|
||
}
|
||
}
|
||
else if (!m_lstWellSys[i]->m_bIsWell) { //管
|
||
nPipeLen = m_lstWellSys[i]->m_nLength;
|
||
nI = m_lstWellSys[i]->m_nI;
|
||
CString csPipeName = m_lstWellSys[i - 1]->m_csName + m_lstWellSys[i + 1]->m_csName;
|
||
OPENOBJ_BEGIN(m_lstWellSys[i]->m_ID, AcDb::kForWrite, CDbPipe, pPipe);
|
||
if (pPipe) {
|
||
pPipe->SetSysLabel(csPipeName);
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
//计算
|
||
void CWellCalcSettingDlg::OnButtonCalc()
|
||
{
|
||
UpdateData(TRUE);
|
||
|
||
for (m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()) {
|
||
WDGridRow *pRow = m_grid.CurRow();
|
||
CString csName1 = (LPCTSTR)(*pRow)[0].GetText();
|
||
CString csName2 = (LPCTSTR)(*pRow)[1].GetText();
|
||
CString csName;
|
||
CString csDn = (LPCTSTR)(*pRow)[3].GetText();
|
||
CString csI = (LPCTSTR)(*pRow)[4].GetText();
|
||
csName = csName1 + csName2;
|
||
if (csName == _T(""))
|
||
break;
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
if (!m_lstWellSys[i]->m_bIsWell) {
|
||
OPENOBJ_BEGIN(m_lstWellSys[i]->m_ID, AcDb::kForRead, CDbPipe, pPipe);
|
||
if (pPipe) {
|
||
CString csPipeName = pPipe->GetSysLabel();
|
||
if (csPipeName == csName) {
|
||
m_lstWellSys[i]->m_iDn = _ttoi(csDn);
|
||
m_lstWellSys[i]->m_nI = _tstof(csI) / 1000;
|
||
|
||
CString csMat = GlobalFunc::GetPipeMaterialByIdx(pPipe->GetMaterial());
|
||
double nDnOut = GlobalFunc::GetPipeOutDByDn(csMat, _ttoi(csDn)) * 1000;
|
||
m_lstWellSys[i]->m_iSpare = (int)nDnOut;
|
||
|
||
break;
|
||
}
|
||
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
}
|
||
|
||
m_bCalc = TRUE;
|
||
//反算起点
|
||
if (m_iInput == 1) {
|
||
CalcFromEnd();
|
||
CheckDropWell();
|
||
UpdateGrid();
|
||
double dDeepS = m_lstWellSys[0]->m_nUpEle - m_lstWellSys[0]->m_nDownEle;
|
||
m_csDeep.Format(_T("%.3f"), dDeepS);
|
||
UpdateData(FALSE);
|
||
return;
|
||
}
|
||
|
||
|
||
double nDeepStart = _tstof(m_csDeep);
|
||
m_lstWellSys[0]->m_nDeep = nDeepStart; //m_nPipeQ 为井埋深
|
||
double nPipeLen(0), nI(0), nFrontPipeEle(0);
|
||
double nEleStart = m_lstWellSys[0]->m_nUpEle;
|
||
nDeepStart = nEleStart - nDeepStart; //井底标高 = 起点井地面标高-最小埋深
|
||
m_lstWellSys[0]->m_nDownEle = nDeepStart;
|
||
if (m_iOpenMode == 0) {
|
||
XPoint ptLow3, ptUp3;
|
||
m_ssAll.GetExtend(ptLow3, ptUp3);
|
||
GlobalFunc::AssureInCurrentView_New(ptLow3, ptUp3);
|
||
}
|
||
//m_nPipeQ 为井埋深(米), m_nV 为井底标高(米), nI为管坡度, m_nDang地面标高, m_nStartPress跌水井底标高
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
if (m_lstWellSys[i]->m_bIsWell) { //井
|
||
AcDbObjectId id = m_lstWellSys[i]->m_ID;
|
||
if (nPipeLen > 0) {
|
||
double nWellEle = m_lstWellSys[i]->m_nUpEle;
|
||
double nWellDownEle = m_lstWellSys[i]->m_nDownEle;
|
||
double nLastEnd = nDeepStart - nI * nPipeLen;
|
||
// double nFrontPipeDeep = nWellEle - nLastEnd; //埋深 地面-前管
|
||
double nWellDeep = nWellEle - nWellDownEle; //埋深 地面-井底
|
||
nFrontPipeEle = nLastEnd;
|
||
|
||
if (m_lstWellSys[i]->m_bIsDropWell) {
|
||
nDeepStart = m_lstWellSys[i]->m_nDownEle;
|
||
m_lstWellSys[i]->m_nFrondDownEle = nFrontPipeEle;
|
||
}
|
||
else {
|
||
double nRadiusFront(0), nRadiusBack(0);
|
||
nRadiusFront = m_lstWellSys[i - 1]->m_iDn;
|
||
if (i != m_lstWellSys.Length() - 1)
|
||
{
|
||
nRadiusBack = m_lstWellSys[i + 1]->m_iDn;
|
||
}
|
||
//得到外径
|
||
double nDifference(0);
|
||
if (nRadiusFront > 0 && nRadiusBack > 0) {//井前后管径差
|
||
nDifference = (nRadiusBack - nRadiusFront) / 1000;
|
||
}
|
||
m_lstWellSys[i]->m_nFrondDownEle = nDeepStart - nI * nPipeLen;
|
||
if (m_iMode == 0) //管顶平接
|
||
nDeepStart = nDeepStart - nI * nPipeLen - nDifference;
|
||
else if (m_iMode == 1) //管底平接
|
||
nDeepStart = nDeepStart - nI * nPipeLen;
|
||
else if (m_iMode == 2 || m_iMode == 3) //水面平接
|
||
nDeepStart = nDeepStart - nI * nPipeLen - nDifference / 2;
|
||
if (m_lstWellSys[i]->m_csName == _T("HC"))
|
||
{
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbPool, pEquip);
|
||
if (pEquip) {
|
||
if (pEquip->GetSpare() > 0.01)
|
||
nDeepStart -= pEquip->GetSpare();
|
||
else
|
||
nDeepStart -= 0.1;//化粪池
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
|
||
m_lstWellSys[i]->m_nDownEle = nDeepStart;
|
||
nWellDeep = nWellEle - nDeepStart;
|
||
m_lstWellSys[i]->m_nDeep = nWellDeep;
|
||
}
|
||
}
|
||
else if (!m_lstWellSys[i]->m_bIsWell) { //管
|
||
if (i == m_lstWellSys.Length() - 1)
|
||
continue;
|
||
nPipeLen = m_lstWellSys[i]->m_nLength;
|
||
// if(m_lstWellSys[i]->m_dRealLength > 0.1)
|
||
// nPipeLen = m_lstWellSys[i]->m_dRealLength;
|
||
|
||
nI = m_lstWellSys[i]->m_nI;
|
||
CString csPipeName = m_lstWellSys[i - 1]->m_csName + m_lstWellSys[i + 1]->m_csName;
|
||
if (m_lstWellSys[i + 1]->m_csName == _T("HC"))
|
||
csPipeName += _T("进");
|
||
else if (m_lstWellSys[i - 1]->m_csName == _T("HC"))
|
||
csPipeName = m_lstWellSys[i - 1]->m_csName + _T("出") + m_lstWellSys[i + 1]->m_csName;
|
||
OPENOBJ_BEGIN(m_lstWellSys[i]->m_ID, AcDb::kForWrite, CDbPipe, pPipe);
|
||
if (pPipe) {
|
||
pPipe->SetSysLabel(csPipeName);
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
|
||
|
||
}
|
||
CheckDropWell();
|
||
UpdateGrid();
|
||
}
|
||
|
||
//检查每个井是否有支路汇进来,如果有,而且支路的管底标高低于本次计算该井的底标高,建议用户干涉让他成为跌水井
|
||
void CWellCalcSettingDlg::CheckDropWell()
|
||
{
|
||
m_map.RemoveAll();
|
||
double nPipeLen(0);
|
||
CString csPromptAll = _T("标高检查:\n");
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
if (m_lstWellSys[i]->m_bIsWell) { //井
|
||
AcDbObjectId id = m_lstWellSys[i]->m_ID;
|
||
if (nPipeLen > 0) {
|
||
double nWellEle = m_lstWellSys[i]->m_nUpEle;
|
||
double nWellDownEle = m_lstWellSys[i]->m_nDownEle;
|
||
if (m_lstWellSys[i]->m_bIsDropWell)
|
||
continue;
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, CDbEquipment, pEquip);
|
||
if (pEquip) {
|
||
int num = pEquip->GetInterfaceNum();
|
||
if (num > 2) {
|
||
for (int j = 0; j < num; j++) {
|
||
CPipeInterface face;
|
||
pEquip->GetInterface(j, face);
|
||
if (i > 0 && face.m_idPipe == m_lstWellSys[i - 1]->m_ID)
|
||
continue;
|
||
if (i < m_lstWellSys.Length() - 1 && face.m_idPipe == m_lstWellSys[i + 1]->m_ID)
|
||
continue;
|
||
|
||
CString csPipeDownEle = pEquip->GetISysLabel(j);
|
||
if (csPipeDownEle == _T(""))
|
||
continue;
|
||
double nPipeDownEle = _tstof(csPipeDownEle);
|
||
|
||
if (nWellDownEle - nPipeDownEle > 0.001) {
|
||
CString csPrompt = m_lstWellSys[i]->m_csName;
|
||
csPrompt.Format(_T("%s 井支路管线计算的管底标高(%.2f)小于%.2f,建议改为跌水井"), csPrompt, nPipeDownEle, nWellDownEle);
|
||
csPromptAll = csPromptAll + _T("\n\n") + csPrompt;
|
||
m_map.SetAt(m_lstWellSys[i]->m_csName, csPipeDownEle);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
|
||
}
|
||
}
|
||
else if (!m_lstWellSys[i]->m_bIsWell) { //管
|
||
if (i == m_lstWellSys.Length() - 1)
|
||
continue;
|
||
nPipeLen = m_lstWellSys[i]->m_nLength;
|
||
}
|
||
}
|
||
if (csPromptAll != _T("标高检查:\n"))
|
||
MessageBox(csPromptAll);
|
||
}
|
||
|
||
BOOL CWellCalcSettingDlg::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
|
||
if (m_iOpenMode == 1) {//编辑对话框
|
||
CWnd *pWnd2 = GetDlgItem(IDOK);
|
||
// CWnd *pWnd3 = GetDlgItem(IDC_BUTTON_SHEET);
|
||
pWnd2->SetWindowText(_T("更新"));
|
||
// pWnd3->ShowWindow(SW_HIDE);
|
||
}
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
TWellData *pList = new TWellData();
|
||
pList->m_iDn = m_lstWellSys[i]->m_iDn;
|
||
pList->m_bIsWell = m_lstWellSys[i]->m_bIsWell;
|
||
pList->m_bIsDropWell = m_lstWellSys[i]->m_bIsDropWell;;
|
||
pList->m_csName = m_lstWellSys[i]->m_csName;
|
||
pList->m_ID = m_lstWellSys[i]->m_ID;
|
||
pList->m_nI = m_lstWellSys[i]->m_nI;
|
||
pList->m_nUpEle = m_lstWellSys[i]->m_nUpEle;
|
||
pList->m_nDownEle = m_lstWellSys[i]->m_nDownEle;
|
||
pList->m_nLength = m_lstWellSys[i]->m_nLength;
|
||
pList->m_dRealLength = m_lstWellSys[i]->m_dRealLength;
|
||
m_lstWellOld.Append(pList);
|
||
}
|
||
|
||
// m_comboX.SetWindowText(XString(_T("%d"), m_iX));
|
||
// m_comboY.SetWindowText(XString(_T("%d"), m_iY));
|
||
|
||
m_grid.Clear();
|
||
m_grid.Create(this, IDC_LIST_PIPE);
|
||
m_grid.FitLastCol();
|
||
m_grid.SetNoAppendButton(TRUE);
|
||
m_grid.SetNoDefaultMenu(true);
|
||
UpdateGrid();
|
||
m_grid.GetCol(0).SetReadOnly();
|
||
m_grid.GetCol(1).SetReadOnly();
|
||
m_grid.GetCol(2).SetReadOnly();
|
||
m_grid.GetCol(5).SetReadOnly();
|
||
m_grid.GetCol(6).SetReadOnly();
|
||
m_grid.GetCol(7).SetReadOnly();
|
||
m_grid.GetCol(8).SetReadOnly();
|
||
m_grid.GetCol(9).SetReadOnly();
|
||
m_grid.GetCol(10).SetReadOnly();
|
||
m_grid.GetCol(11).SetReadOnly();
|
||
|
||
double dDeep = m_lstWellSys[0]->m_nUpEle - m_lstWellSys[0]->m_nDownEle;
|
||
// m_nDeep = dDeep;
|
||
if (dDeep < 0.01 || fabs(m_lstWellSys[0]->m_nDownEle) < 0.001)
|
||
dDeep = 0.8;
|
||
if (m_lstWellSys[0]->m_bIsDropWell) { //如果第一个井是跌水井, 则计算起点埋深
|
||
CWnd *pWnd = GetDlgItem(IDC_EDIT_DEEP);
|
||
pWnd->EnableWindow(FALSE);
|
||
}
|
||
|
||
for (i = 0; i < m_lstWellSys.Length(); i++) {
|
||
if (!m_lstWellSys[i]->m_bIsWell) { //管
|
||
if (i == m_lstWellSys.Length() - 1)
|
||
continue;
|
||
CString csPipeName = m_lstWellSys[i - 1]->m_csName + m_lstWellSys[i + 1]->m_csName;
|
||
OPENOBJ_BEGIN(m_lstWellSys[i]->m_ID, AcDb::kForWrite, CDbPipe, pPipe);
|
||
if (pPipe) {
|
||
pPipe->SetSysLabel(csPipeName);
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ENDELE);
|
||
pWnd2->EnableWindow(FALSE);
|
||
|
||
// m_dEndEle = m_lstWellSys[m_lstWellSys.Length()-1]->m_nDownEle;
|
||
|
||
m_csDeep.Format(_T("%.3f"), dDeep);
|
||
m_csEndEle.Format(_T("%.3f"), m_lstWellSys[m_lstWellSys.Length() - 1]->m_nDownEle);
|
||
|
||
m_csX.Format(_T("%d"), m_iX);
|
||
m_csY.Format(_T("%d"), m_iY);
|
||
|
||
// zxl 2012.03.28 add
|
||
CWnd *pWndLength = GetDlgItem(IDC_BTN_MENU);
|
||
CString sText;
|
||
pWndLength->GetWindowText(sText);
|
||
if (sText.Find(_T("↓")) == -1)
|
||
{
|
||
sText += _T("↓");
|
||
pWndLength->SetWindowText(sText);
|
||
}
|
||
|
||
UpdateData(FALSE);
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
|
||
void CWellCalcSettingDlg::OnRadioInput1()
|
||
{
|
||
CWnd *pWnd1 = GetDlgItem(IDC_EDIT_DEEP);
|
||
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ENDELE);
|
||
pWnd1->EnableWindow(TRUE);
|
||
pWnd2->EnableWindow(FALSE);
|
||
}
|
||
|
||
void CWellCalcSettingDlg::OnRadioInput2()
|
||
{
|
||
CWnd *pWnd1 = GetDlgItem(IDC_EDIT_DEEP);
|
||
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ENDELE);
|
||
pWnd2->EnableWindow(TRUE);
|
||
pWnd1->EnableWindow(FALSE);
|
||
|
||
}
|
||
|
||
|
||
|
||
void CWellCalcSettingDlg::UpdateGrid()
|
||
{
|
||
long iCurRow = m_grid.GetCurRowIndex();
|
||
m_grid.Clear();
|
||
int idx = 0;
|
||
for (int i = 0; i < m_lstWellSys.Length() - 1; i++) {
|
||
if (m_lstWellSys[i]->m_bIsWell) { //井
|
||
if (i == m_lstWellSys.Length() - 2)
|
||
break;
|
||
CString csName1 = m_lstWellSys[i]->m_csName;
|
||
CString csName2 = m_lstWellSys[i + 2]->m_csName;
|
||
if (csName1 == _T("") || csName2 == _T("")) {
|
||
MessageBox(_T("请检查井是否都编号。"));
|
||
break;
|
||
}
|
||
// if(csName2 == _T("HC"))
|
||
// csName2 = _T("HC进");
|
||
// if(csName1 == _T("HC"))
|
||
// csName1 = _T("HC出");
|
||
if (csName2 == _T("HC"))
|
||
csName2 = GetPoolName(m_lstWellSys[i + 2]->m_ID) + _T("进");
|
||
if (csName1 == _T("HC"))
|
||
csName1 = GetPoolName(m_lstWellSys[i]->m_ID) + _T("出");
|
||
|
||
CString csArea, csAllArea, csFactor, csQ, csTime;
|
||
m_grid.AppendRow();
|
||
m_grid.GetCell(idx, 0).SetText(csName1);
|
||
m_grid.GetCell(idx, 1).SetText(csName2);
|
||
|
||
|
||
double nEle = m_lstWellSys[i]->m_nUpEle;
|
||
double nDeep = m_lstWellSys[i]->m_nDeep;
|
||
double nDownEle = m_lstWellSys[i]->m_nDownEle;
|
||
CString csWellUpEle, csDeep, csDownEle, csWellUpEle2, csDeep2, csDownEle2;
|
||
csDeep.Format(_T("%.3f"), nDeep);
|
||
csDownEle.Format(_T("%.3f"), nDownEle);
|
||
csWellUpEle.Format(_T("%.3f"), nEle);
|
||
nEle = m_lstWellSys[i + 2]->m_nUpEle;
|
||
nDeep = m_lstWellSys[i + 2]->m_nDeep;
|
||
nDownEle = m_lstWellSys[i + 2]->m_nFrondDownEle;
|
||
csDeep2.Format(_T("%.3f"), nEle - nDownEle);
|
||
csDownEle2.Format(_T("%.3f"), nDownEle);
|
||
csWellUpEle2.Format(_T("%.3f"), nEle);
|
||
|
||
m_grid.GetCell(idx, 6).SetText(csWellUpEle);
|
||
m_grid.GetCell(idx, 7).SetText(csWellUpEle2);
|
||
m_grid.GetCell(idx, 8).SetText(csDownEle);
|
||
m_grid.GetCell(idx, 9).SetText(csDownEle2);
|
||
m_grid.GetCell(idx, 10).SetText(csDeep);
|
||
m_grid.GetCell(idx, 11).SetText(csDeep2);
|
||
|
||
}
|
||
else { //管
|
||
if (i == m_lstWellSys.Length() - 1)
|
||
continue;
|
||
double nPipeLen = m_lstWellSys[i]->m_nLength;
|
||
// if(m_lstWellSys[i]->m_dRealLength > 0.1)
|
||
// nPipeLen = m_lstWellSys[i]->m_dRealLength;
|
||
|
||
int iDn = m_lstWellSys[i]->m_iDn;
|
||
CString csDn, csPipeLen, csI, csI2;
|
||
csDn.Format(_T("%d"), iDn);
|
||
csI.Format(_T("%.3f"), m_lstWellSys[i]->m_nI * 1000);
|
||
csI2.Format(_T("%.3f"), m_lstWellSys[i]->m_nI * m_lstWellSys[i]->m_nLength);
|
||
// csPipeLen.Format(_T("%.2f"), m_lstWellSys[i]->m_nLength);
|
||
csPipeLen.Format(_T("%.2f"), nPipeLen);
|
||
m_grid.GetCell(idx, 2).SetText(csPipeLen);
|
||
m_grid.GetCell(idx, 3).SetText(csDn);
|
||
m_grid.GetCell(idx, 4).SetText(csI);
|
||
m_grid.GetCell(idx, 5).SetText(csI2);
|
||
idx++;
|
||
}
|
||
|
||
}
|
||
m_grid.SelectRow(iCurRow, TRUE);
|
||
}
|
||
|
||
void CWellCalcSettingDlg::OnButtonHide()
|
||
{
|
||
long idx = m_grid.GetCurRowIndex();
|
||
CString csName1;
|
||
if (idx > -1) {
|
||
WDGridRow *pRow = &m_grid.GetRow(idx);
|
||
if (pRow)
|
||
csName1 = (*pRow)[0].GetText();
|
||
}
|
||
if (csName1 != _T("")) {
|
||
RBList rbMask(RTDXF0, _T("AEC_ZT_WELL"), NULL);
|
||
PickSet ss(SS_FREE);
|
||
ss.Get(_T("X"), NULL, NULL, rbMask);
|
||
long len = ss.Length();
|
||
for (long i = 0; i < len; i++) {
|
||
Entity ent = ss[i];
|
||
OPENOBJ_BEGIN(ent, AcDb::kForRead, AecXDbWell, pEquip);
|
||
if (pEquip) {
|
||
CString csName = pEquip->GetWellName();
|
||
if (_tcsicmp(csName, csName1) == 0) {
|
||
XPoint ptCen;
|
||
double nX(1), nY(1);
|
||
ent.GetExtend(ptCen, &nX, &nY);
|
||
GlobalFunc::ArxZoomTo(ptCen, 10 * pEquip->GetPScale(), 10 * pEquip->GetPScale());
|
||
double nDist = pEquip->GetPScale();
|
||
XPoint p1, p2, p3, p4;
|
||
ads_polar(ptCen, 0, nDist, p1);
|
||
ads_polar(p1, PI / 2, nDist, p1);
|
||
ads_polar(ptCen, PI, nDist, p2);
|
||
ads_polar(p2, PI / 2, -nDist, p2);
|
||
ads_grdraw(p1, p2, 2, 0);
|
||
ads_polar(ptCen, PI / 2, nDist, p3);
|
||
ads_polar(p3, PI, nDist, p3);
|
||
ads_polar(ptCen, PI / 2, -nDist, p4);
|
||
ads_polar(p4, 0, nDist, p4);
|
||
ads_grdraw(p3, p4, 2, 0);
|
||
}
|
||
}
|
||
OPENOBJ_END();
|
||
}
|
||
}
|
||
|
||
|
||
GlobalFunc::HideDialog(this, TRUE);
|
||
TCHAR szTmp[256];
|
||
ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp);
|
||
GlobalFunc::HideDialog(this, FALSE);
|
||
}
|
||
|
||
extern void ShowPipe(const AcDbObjectId &idPipe);
|
||
extern bool HandlePipeDimType(CDbPipe *pPipe, int &nSelType);
|
||
void CWellCalcSettingDlg::OnButtonTodwg()
|
||
{
|
||
UpdateData(TRUE);
|
||
if (m_lstWellSys.Length() < 3 || (!m_bCalc && m_iOpenMode == 0))
|
||
return;
|
||
|
||
GlobalFunc::HideDialog(this, TRUE);
|
||
// 更改流向 cet 2012.7.26 add
|
||
ResetPipeDirFromImport(m_pListAll);
|
||
RBList rbMaskDim(RTDXF0, _T("AEC_ZT_WELLDIM"), NULL);
|
||
|
||
if (m_iOpenMode == 0) {
|
||
XPoint ptLow3, ptUp3;
|
||
m_ssAll.GetExtend(ptLow3, ptUp3);
|
||
GlobalFunc::AssureInCurrentView_New(ptLow3, ptUp3);
|
||
}
|
||
int nSelType = -1; // cet 2012.1.9 add 管线标注与管线原有标注不同时,用户的选择 0: Y 1: N 2: A 3: D
|
||
bool bShow = false; // cet 2012.1.9 add
|
||
std::vector<XPoint> vecPoolPts; // cet 2012.10.25 add 池子插入点
|
||
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);
|
||
if (m_lstWellSys[i]->m_csName == _T("HC"))
|
||
{
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, CDbPool, pEquip);
|
||
if (pEquip) {
|
||
pEquip->SetGroundEle(m_lstWellSys[i]->m_nUpEle);
|
||
vecPoolPts.push_back(pEquip->GetLocation()); // cet 2012.10.25 add 记录池子插入点以便更新池子连接的管底标注
|
||
}
|
||
OPENOBJ_END();
|
||
continue;
|
||
}
|
||
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, AecXDbWell, pEquip);
|
||
if (pEquip) {
|
||
pEquip->SetDropWell(m_lstWellSys[i]->m_bIsDropWell);
|
||
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++) {
|
||
CPipeInterface iFace;
|
||
pEquip->GetInterface(m, iFace);
|
||
CString csLabel = pEquip->GetISysLabel(m);
|
||
if (csLabel != _T("") && nEleOther - _tstof(csLabel) > 0.001)
|
||
nEleOther = _tstof(csLabel);
|
||
}
|
||
// if(nEleOther > m_lstWellSys[i]->m_nDownEle)
|
||
// pEquip->SetWellEleDown(m_lstWellSys[i]->m_nDownEle);
|
||
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();
|
||
CString csGroundEle;
|
||
csGroundEle.Format(_T("%.3f"), m_lstWellSys[i]->m_nGroundEle);
|
||
ads_name entWell;
|
||
acdbGetAdsName(entWell, id);
|
||
GlobalFunc::WriteXdata(entWell, _T("TG-WELL-GroundEle"), csGroundEle);
|
||
CString csSand = GlobalFunc::ReadXdata(entWell, _T("TG-WELL-DeepSand"));
|
||
if (m_lstWellSys[i]->m_nSpare > 0.001 || csSand != _T(""))
|
||
{
|
||
csSand.Format(_T("%.3f"), m_lstWellSys[i]->m_nSpare);
|
||
GlobalFunc::WriteXdata(entWell, _T("TG-WELL-DeepSand"), csSand);
|
||
}
|
||
|
||
// cet 2012.6.6 add 更新井半径
|
||
CString strWellRadius;
|
||
strWellRadius.Format(_T("%f"), m_lstWellSys[i]->m_nWellRadius * 2);
|
||
GlobalFunc::WriteXdata(entWell, _T("TG-WELL-RADIUS"), strWellRadius);
|
||
|
||
PickSet ss2(SS_FREE);
|
||
XPoint ptUcs = GlobalFunc::Wcs2Ucs(ptLoc);
|
||
GlobalFunc::GetPointPickSet(ptUcs, ss2, rbMaskDim, 50);
|
||
GlobalFunc::UpdateGraphic(ss2);
|
||
}
|
||
else {
|
||
bShow = false; // cet 2012.1.9 add
|
||
BOOL bDrawLabel = FALSE;// zxl 2012.12.26 add
|
||
int iDn = m_lstWellSys[i]->m_iDn;
|
||
double nI = m_lstWellSys[i]->m_nI * 1000;
|
||
double nEleDown = m_lstWellSys[i - 1]->m_nDownEle;
|
||
ads_name ent;
|
||
acdbGetAdsName(ent, m_lstWellSys[i]->m_ID);
|
||
OPENOBJ_BEGIN(ent, AcDb::kForWrite, CDbPipe, pPipe);
|
||
if (pPipe) {
|
||
pPipe->SetPipeGradient(nI / 1000);
|
||
XPoint pt1(pPipe->GetStartPoint()), pt2(pPipe->GetEndPoint());
|
||
pt1.z = 0;
|
||
pt2.z = 0;
|
||
double dLen = pPipe->GetPlanLength();
|
||
// dLen = ads_distance(pt1, pt2); //这时候, 要的是平面长度
|
||
|
||
// if(GlobalFunc::DocGetMeterUnitDraw())
|
||
// dLen = dLen * 1000.0;
|
||
double dI = pPipe->GetPipeGradient();
|
||
double nDrop = dLen * dI;
|
||
if (GlobalFunc::DocGetMeterUnitDraw())
|
||
{//米
|
||
if (pPipe->GetFlowDir() == TPipeSys::kFromStart) {
|
||
pt1.z = nEleDown + (double)iDn / 2000;
|
||
pt2.z = pt1.z - nDrop;
|
||
}
|
||
else {
|
||
pt2.z = nEleDown + (double)iDn / 2000;
|
||
pt1.z = pt2.z - nDrop;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
nDrop = nDrop * 1000;
|
||
if (pPipe->GetFlowDir() == TPipeSys::kFromStart) {
|
||
pt1.z = nEleDown * 1000 + (double)iDn / 2;
|
||
pt2.z = pt1.z - nDrop;
|
||
}
|
||
else {
|
||
pt2.z = nEleDown * 1000 + (double)iDn / 2;
|
||
pt1.z = pt2.z - nDrop;
|
||
}
|
||
}
|
||
XPoint ptDimTmp = pPipe->GetLabelLocation();//先把标注点读出来,setstartpoint会修改这个点 2010-4-26 sr
|
||
pPipe->SetStartPoint(pt1);
|
||
pPipe->SetEndPoint(pt2);
|
||
if (!pPipe->IsDrawLabel())
|
||
{
|
||
SetPipeLabelType(pPipe);
|
||
}
|
||
else // cet 2012.1.9 add
|
||
{
|
||
bShow = HandlePipeDimType(pPipe, nSelType);
|
||
}
|
||
pPipe->SetLabelLocation(ptDimTmp);
|
||
|
||
// zxl 2012.12.28 del
|
||
// // cet 2011.12.5 add 标注样式为-1时不标注
|
||
// if (static_cast<int>(pPipe->GetSpare()) == -1)
|
||
// {
|
||
// pPipe->EnableDrawLabel(FALSE);
|
||
// }
|
||
|
||
bDrawLabel = pPipe->IsDrawLabel();// zxl 2012.12.26 add
|
||
}
|
||
OPENOBJ_END();
|
||
// cet 2012.1.9 add 显示交叉线
|
||
if (bShow)
|
||
{
|
||
ShowPipe(m_lstWellSys[i]->m_ID);
|
||
GlobalFunc::AnyKeyReturn(_T("\n按任意键继续查找下一段待修改管标注..."));
|
||
}
|
||
|
||
// zxl 2012.12.25 modify
|
||
//DoDimPipeDn(ent, iDn, _T("自动"), g_nPipeDnHeight, FALSE);
|
||
GlobalFunc::DoDimPipeDn(ent, iDn, _T("自动"), g_Option::instance().g_nPipeDnHeight, FALSE, TRUE);
|
||
OPENOBJ_BEGIN(ent, AcDb::kForWrite, CDbPipe, pPipe);
|
||
if (pPipe)
|
||
{
|
||
pPipe->EnableDrawLabel(bDrawLabel);
|
||
}
|
||
OPENOBJ_END();
|
||
////////////////////////////////标注////////////////////////////////////////
|
||
}
|
||
}
|
||
|
||
// 更新化粪池连接的管底标注 cet 2012.10.25 add
|
||
std::vector<XPoint>::iterator it;
|
||
PickSet ss2(SS_FREE);
|
||
for (it = vecPoolPts.begin(); it != vecPoolPts.end(); it++)
|
||
{
|
||
GlobalFunc::GetPointPickSet(GlobalFunc::Wcs2Ucs(*it), ss2, rbMaskDim, 50);
|
||
GlobalFunc::UpdateGraphic(ss2);
|
||
ss2.Free();
|
||
}
|
||
|
||
|
||
acedRedraw(0, 0); // cet 2012.1.9 add 刷新清除显示管线时的X
|
||
|
||
GlobalFunc::UpdateMultDim();
|
||
actrTransactionManager->flushGraphics(); //acad 刷新
|
||
TCHAR szTmp[32];
|
||
ads_getstring(NULL, _T("\n按任意键返回对话框:<返回>"), szTmp);
|
||
|
||
GlobalFunc::HideDialog(this, FALSE);
|
||
}
|
||
|
||
//vector 排序函数
|
||
extern bool CompareHeight(double dLen1, double dLen2);
|
||
|
||
// zxl 2011.11.15 add 计算井的跌落高度
|
||
CString CWellCalcSettingDlg::GetWellDropHeight(CString &sName)
|
||
{
|
||
std::vector<double> vecEle;
|
||
CString sTemp = _T("");
|
||
for (m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext())
|
||
{
|
||
WDGridRow *pRow = m_grid.CurRow();
|
||
CString csName1 = (LPCTSTR)(*pRow)[0].GetText();
|
||
CString csName2 = (LPCTSTR)(*pRow)[1].GetText();
|
||
|
||
// cet 2013.3.1 modify 将显示给用户的池子真实名称转换为HC
|
||
// if (csName1.Compare(_T("HC进")) == 0 || csName1.Compare(_T("HC出")) == 0)
|
||
// {
|
||
// csName1 = _T("HC");
|
||
// }
|
||
// else if (csName2.Compare(_T("HC进")) == 0 || csName2.Compare(_T("HC出")) == 0)
|
||
// {
|
||
// csName2 = _T("HC");
|
||
// }
|
||
|
||
int nIndex1 = -1, nIndex2 = -1;
|
||
nIndex1 = csName1.Find(_T("进"));
|
||
nIndex2 = csName1.Find(_T("出"));
|
||
if (nIndex1 > -1 || nIndex2 > -1)
|
||
{
|
||
csName1 = _T("HC");
|
||
}
|
||
|
||
nIndex1 = csName2.Find(_T("进"));
|
||
nIndex2 = csName2.Find(_T("出"));
|
||
if (nIndex1 > -1 || nIndex2 > -1)
|
||
{
|
||
csName2 = _T("HC");
|
||
}
|
||
|
||
if (sName.Compare(csName1) == 0)
|
||
{
|
||
vecEle.push_back((*pRow)[8].GetText());
|
||
}
|
||
else if (sName.Compare(csName2) == 0)
|
||
{
|
||
vecEle.push_back((*pRow)[9].GetText());
|
||
}
|
||
}
|
||
if (vecEle.size() > 1)
|
||
{
|
||
std::sort(vecEle.begin(), vecEle.end(), CompareHeight);
|
||
double dEleS = vecEle.front();
|
||
double dEleE = vecEle.back();
|
||
double dEle = fabs(dEleE - dEleS);
|
||
sTemp.Format(_T("%0.3f"), dEle);
|
||
if (fabs(dEle - 0.0) < 0.001)
|
||
{
|
||
sTemp = _T("");
|
||
}
|
||
}
|
||
return sTemp;
|
||
}
|
||
|
||
void CWellCalcSettingDlg::OnButtonModifyele()
|
||
{
|
||
|
||
CTemporaryResourceOverride vTemp;
|
||
CWellCalcModifyEleDlg dlg(0);
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
TWellData *pList = new TWellData();
|
||
pList->m_bIsWell = m_lstWellSys[i]->m_bIsWell;
|
||
pList->m_nGroundEle = m_lstWellSys[i]->m_nGroundEle;
|
||
pList->m_bIsDropWell = m_lstWellSys[i]->m_bIsDropWell;;
|
||
pList->m_csName = m_lstWellSys[i]->m_csName;
|
||
// cet 2013.3.1 add 将池名改为真实名
|
||
CString sName = pList->m_csName;
|
||
if (sName.Compare(_T("HC")) == 0)
|
||
{
|
||
pList->m_csName = GetPoolName(m_lstWellSys[i]->m_ID);
|
||
}
|
||
pList->m_nUpEle = m_lstWellSys[i]->m_nUpEle;
|
||
pList->m_nDownEle = m_lstWellSys[i]->m_nDownEle;
|
||
pList->m_nWellRadius = m_lstWellSys[i]->m_nWellRadius;
|
||
pList->m_nSpare = m_lstWellSys[i]->m_nSpare;
|
||
pList->m_dRealLength = m_lstWellSys[i]->m_dRealLength;
|
||
CString csDropEle;
|
||
if (m_map.Lookup(pList->m_csName, csDropEle))
|
||
pList->m_nFrondDownEle = _tstof(csDropEle); //临时记录一下支路的底标高
|
||
else
|
||
pList->m_nFrondDownEle = -9999;
|
||
|
||
// zxl 2011.11.16 add 设置跌落高度
|
||
pList->m_csSpare = GetWellDropHeight(m_lstWellSys[i]->m_csName);
|
||
|
||
dlg.m_lstWellSys.Append(pList);
|
||
}
|
||
|
||
if (dlg.DoModal() == IDOK) {
|
||
for (int i = 0; i < m_lstWellSys.Length(); i++) {
|
||
m_lstWellSys[i]->m_nUpEle = dlg.m_lstWellSys[i]->m_nUpEle;
|
||
m_lstWellSys[i]->m_nDownEle = dlg.m_lstWellSys[i]->m_nDownEle;
|
||
m_lstWellSys[i]->m_bIsDropWell = dlg.m_lstWellSys[i]->m_bIsDropWell;
|
||
m_lstWellSys[i]->m_nWellRadius = dlg.m_lstWellSys[i]->m_nWellRadius;
|
||
m_lstWellSys[i]->m_nGroundEle = dlg.m_lstWellSys[i]->m_nGroundEle;
|
||
m_lstWellSys[i]->m_nSpare = dlg.m_lstWellSys[i]->m_nSpare;
|
||
m_lstWellOld[i]->m_nDownEle = m_lstWellSys[i]->m_nDownEle;
|
||
m_lstWellOld[i]->m_bIsDropWell = m_lstWellSys[i]->m_bIsDropWell;
|
||
}
|
||
}
|
||
OnButtonCalc();
|
||
//UpdateGrid();
|
||
}
|
||
|
||
void CWellCalcSettingDlg::OnBtnLengthType()
|
||
{
|
||
CWnd *pWnd = GetDlgItem(IDC_BTN_MENU);
|
||
if (pWnd == NULL)
|
||
{
|
||
return;
|
||
}
|
||
CRect rc;
|
||
pWnd->GetWindowRect(rc);
|
||
|
||
if (m_pMenuLength == NULL)
|
||
{
|
||
m_pMenuLength = new CMenu;
|
||
m_pMenuLength->CreatePopupMenu();
|
||
}
|
||
else
|
||
{
|
||
m_pMenuLength->DestroyMenu();
|
||
m_pMenuLength->CreatePopupMenu();
|
||
}
|
||
m_pMenuLength->AppendMenu((m_iLengthType == 0) ? MF_CHECKED : MF_UNCHECKED, nMenuTypeId + 1, _T("表格中管长按实际显示"));
|
||
m_pMenuLength->AppendMenu((m_iLengthType == 1) ? MF_CHECKED : MF_UNCHECKED, nMenuTypeId + 2, _T("表格中管长0.5米模数显示"));
|
||
m_pMenuLength->AppendMenu((m_iLengthType == 2) ? MF_CHECKED : MF_UNCHECKED, nMenuTypeId + 3, _T("表格中管长1.0米模数显示"));
|
||
|
||
m_pMenuLength->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
||
rc.left, rc.bottom, this, &rc);
|
||
|
||
}
|
||
|
||
void CWellCalcSettingDlg::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 CWellCalcSettingDlg::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 CWellCalcSettingDlg::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 CWellCalcSettingDlg::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 CWellCalcSettingDlg::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];
|
||
}
|
||
|
||
void CWellCalcSettingDlg::ReadWriteScaleFromRegedit(BOOL bRead)
|
||
{
|
||
CString sXScale, sYScale;
|
||
if (GlobalFunc::DocGetMeterUnitDraw())
|
||
{
|
||
sXScale = _T("XScaleM");
|
||
sYScale = _T("YScaleM");
|
||
}
|
||
else
|
||
{
|
||
sXScale = _T("XScaleMM");
|
||
sYScale = _T("YScaleMM");
|
||
}
|
||
|
||
//CRegProperty regProp(GetRegLocation(), _T("VerticalSection"));
|
||
//regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
||
//if (bRead)
|
||
//{
|
||
// if (!regProp.GetValue(sXScale, m_iX))
|
||
// {
|
||
// m_iX = static_cast<int>(GlobalFunc::DocGetPScale());
|
||
// if (GlobalFunc::DocGetMeterUnitDraw())
|
||
// {
|
||
// m_iX *= 1000;
|
||
// }
|
||
// }
|
||
|
||
// if (!regProp.GetValue(sYScale, m_iY))
|
||
// {
|
||
// m_iY = 50;
|
||
// }
|
||
//}
|
||
//else
|
||
//{
|
||
// regProp.SetValue(sXScale, m_iX);
|
||
// regProp.SetValue(sYScale, m_iY);
|
||
//}
|
||
}
|
||
|
||
void CWellCalcSettingDlg::EditVerticalSection(BOOL bEdit)
|
||
{
|
||
m_bEdit = bEdit;
|
||
}
|
||
|
||
void CWellCalcSettingDlg::SetListAll(SSearchPipeList *pList)
|
||
{
|
||
m_pListAll = pList;
|
||
}
|
||
|
||
|