Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

366 lines
11 KiB
C++

// PipeVMultDrawDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PipeVMultDrawDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
TGridMultiPipe::TGridMultiPipe()
{
AppendCol(_T("管线"), 70);
AppendCol(_T("距基点距离"),65);
AppendCol(_T("标高(米)"));
SetColPosFix();
SetColFixLength();
SetNoPaste();
FitLastCol();
GetCol(0).SetComboSel();
}
void TGridMultiPipe::OnCellComboString(WDGridCell&cell,CComboBox&combo)
{
if(cell.GetColIndex()==0){
/* cet 2011.12.9 modify
combo.AddString(_T("给水"));
combo.AddString(_T("热给水"));
combo.AddString(_T("热回水"));
combo.AddString(_T("污水"));
combo.AddString(_T("废水"));
combo.AddString(_T("中水"));
combo.AddString(_T("消防"));
combo.AddString(_T("喷淋"));
combo.AddString(g_csPipeName[0]);
combo.AddString(g_csPipeName[1]);
combo.AddString(g_csPipeName[2]);
combo.AddString(g_csPipeName[3]);
combo.AddString(g_csPipeName[4]);
combo.AddString(_T("其它"));
*/
std::vector<CString>::iterator it;
int nIndex = 0;
for (it = m_vecPipeName.begin(); it != m_vecPipeName.end(); it++)
{
combo.InsertString(nIndex, *it);
++nIndex;
}
}
}
void TGridMultiPipe::SetPipeName(const std::vector<CString> &data)
{
m_vecPipeName = data;
}
/////////////////////////////////////////////////////////////////////////////
// CPipeVMultDrawDlg dialog
extern void GetLayerPipeName(std::map<CString, CString> &mapLayerPipeName);
CPipeVMultDrawDlg::CPipeVMultDrawDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPipeVMultDrawDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPipeVMultDrawDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bIsSuperposable = TRUE;
}
void CPipeVMultDrawDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPipeVMultDrawDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPipeVMultDrawDlg, CDialog)
//{{AFX_MSG_MAP(CPipeVMultDrawDlg)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPipeVMultDrawDlg message handlers
BOOL CPipeVMultDrawDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// cet 2011.12.9 add
InitLayerPipeName();
m_grid.Clear();
m_grid.Create(this, IDC_LIST_PIPE);
m_grid.FitLastCol();
LoadLast();
// m_grid.AppendRow();
// m_grid.GetCell(0, 0).SetText(_T("给水"));
// m_grid.GetCell(0, 1).SetText(_T("0"));
// m_grid.GetCell(0, 2).SetText(_T("0"));
m_grid.SetNoAppendButton(TRUE);
m_grid.SetNoDefaultMenu(true);
std::vector<CString> vecPipeName;
GetPipeName(vecPipeName);
m_grid.SetPipeName(vecPipeName);
return TRUE;
}
void CPipeVMultDrawDlg::OnButtonAdd()
{
m_grid.AppendRow();
int idx = m_grid.GetRowNum();
m_grid.GetCell(idx-1, 0).SetText(_T("给水"));
m_grid.GetCell(idx-1, 1).SetText(_T("200"));
m_grid.GetCell(idx-1, 2).SetText(_T("0"));
}
void CPipeVMultDrawDlg::OnButtonDel()
{
long idx = m_grid.GetCurRowIndex();
if(idx < 0){
MessageBox(_T("没有选中的行!请点击表格左侧的行标!"));
return;
}
m_grid.DelRow(idx);
}
void CPipeVMultDrawDlg::OnOK()
{
for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){
WDGridRow *pRow = m_grid.CurRow();
CString csPipe = (*pRow)[0].GetText().cs();
CString csDist = (*pRow)[1].GetText().cs();
CString csEle = (*pRow)[2].GetText().cs();
double nDist = _tstof(csDist);
if(nDist > 0.001 || m_grid.GetRowNum() < 2){
m_bIsSuperposable = FALSE;
break;
}
}
Save();
CDialog::OnOK();
}
void CPipeVMultDrawDlg::Save()
{
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("MultPipe.his"));
FILE *fp = fopen(_AS(strTmpPath), "w");
if(!fp)
return;
for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){
WDGridRow *pRow = m_grid.CurRow();
CString csPipe = (*pRow)[0].GetText().cs();
// zxl 2013.04.17 add 改记忆名字为记忆图层
std::map<CString, CString>::iterator it;
CString sLayer;
for (it = m_mapLayerPipeName.begin(); it != m_mapLayerPipeName.end(); it++)
{
if (it->second.Compare(csPipe) == 0)
{
sLayer = it->first;
}
}
if (sLayer.IsEmpty())
{
continue;
}
csPipe = sLayer;
CString csDist = (*pRow)[1].GetText().cs();
CString csEle = (*pRow)[2].GetText().cs();
CString csTmp3 = csPipe+_T(" ")+csDist+_T(" ")+csEle + _T("\n");
fputs(_AS(csTmp3), fp);
}
fclose(fp);
}
void CPipeVMultDrawDlg::LoadLast()
{
XStringList lstHis;
TCHAR strTmpPath[100] = _T("");
GetTempPath(100, strTmpPath);
_tcscat(strTmpPath, _T("MultPipe.his"));
FILE *fp=fopen(_AS(strTmpPath), "r");
if(!fp){
m_grid.AppendRow();
m_grid.GetCell(0, 0).SetText(_T("给水"));
m_grid.GetCell(0, 1).SetText(_T("0"));
m_grid.GetCell(0, 2).SetText(_T("0"));
return;
}
while(!feof(fp)) {
char sBuf[256]="";
fgets(sBuf, 255, fp);
CString csTmp = sBuf;
csTmp.TrimRight();
if(csTmp != _T(""))
lstHis.Append(tstrnew(csTmp));
}
fclose(fp);
int len = lstHis.Length();
//zxl 2013.04.17 del
// if(len < 1){
// m_grid.AppendRow();
// m_grid.GetCell(0, 0).SetText(_T("给水"));
// m_grid.GetCell(0, 1).SetText(_T("0"));
// m_grid.GetCell(0, 2).SetText(_T("0"));
// return;
// }
for(int i=0;i<len;i++){
CString csTmp = lstHis[i];
TCHAR cName[256]=_T(""), eName[256]=_T(""), sColor[256]=_T("");
CT_strnth(csTmp, 1, cName);
CT_strnth(csTmp, 2, eName);
CT_strnth(csTmp, 3, sColor);
// zxl 2013.04.17 add 改记忆名字为记忆图层
CString sLayerName = cName;
sLayerName = m_mapLayerPipeName[sLayerName];
if (sLayerName.IsEmpty())
{
continue;
}
m_grid.AppendRow();
m_grid.GetCell(i, 0).SetText(sLayerName);
m_grid.GetCell(i, 1).SetText(eName);
m_grid.GetCell(i, 2).SetText(sColor);
}
// zxl 2013.04.17 add
if(m_grid.GetRowNum() < 1)
{
m_grid.AppendRow();
m_grid.GetCell(0, 0).SetText(_T("给水"));
m_grid.GetCell(0, 1).SetText(_T("0"));
m_grid.GetCell(0, 2).SetText(_T("0"));
return;
}
}
void CPipeVMultDrawDlg::InitLayerPipeName()
{
// 自定义管线
GetLayerPipeName(m_mapLayerPipeName);
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_FEED, CString(_T("给水"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_FEED2, CString(_T("给水中区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_FEED3, CString(_T("给水高区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_HEADFEED, CString(_T("热给水"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_HEADFEED2, CString(_T("热给水中区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_HEADFEED3, CString(_T("热给水高区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_HEADBACK, CString(_T("热回水"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_HEADBACK2, CString(_T("热回水中区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_HEADBACK3, CString(_T("热回水高区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_USED, CString(_T("中水"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_USED2, CString(_T("中水中区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_USED3, CString(_T("中水高区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_FIRE, CString(_T("消防"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_FIRE2, CString(_T("消防中区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_FIRE3, CString(_T("消防高区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_SPRINKLE, CString(_T("喷淋"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_SPRINKLE2, CString(_T("喷淋中区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_SPRINKLE3, CString(_T("喷淋高区"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_DIRT, CString(_T("污水"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_USELESS, CString(_T("废水"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_RAIN, CString(_T("雨水"))));
m_mapLayerPipeName.insert(std::make_pair(LAY_PIPE_OTHER, CString(_T("其他"))));
}
int CPipeVMultDrawDlg::GetPipeIdxByPipeName(const CString &sPipeName)
{
CString sPipeLayer;
std::map<CString,CString>::iterator it;
for (it = m_mapLayerPipeName.begin(); it != m_mapLayerPipeName.end(); it++)
{
if (it->second.Compare(sPipeName) == 0)
{
sPipeLayer = it->first;
break;
}
}
if (it == m_mapLayerPipeName.end())
{
return -1;
}
CString sLayer[] = { LAY_PIPE_FEED, LAY_PIPE_HEADFEED, LAY_PIPE_HEADBACK, LAY_PIPE_DIRT, LAY_PIPE_USELESS,
LAY_PIPE_RAIN, LAY_PIPE_USED, LAY_PIPE_FIRE, LAY_PIPE_SPRINKLE, LAY_PIPE_COAGULATE,
LAY_PIPE_DRINK, LAY_PIPE_PRESSDIRT, LAY_PIPE_PRESSUSELESS, LAY_PIPE_PRESSRAIN, LAY_PIPE_OTHER,
LAY_PIPE_USER1, LAY_PIPE_USER2, LAY_PIPE_FEED2, LAY_PIPE_FEED3, LAY_PIPE_HEADFEED2,
LAY_PIPE_HEADFEED3, LAY_PIPE_HEADBACK2, LAY_PIPE_HEADBACK3, LAY_PIPE_FIRE2, LAY_PIPE_FIRE3,
LAY_PIPE_SPRINKLE2, LAY_PIPE_SPRINKLE3, LAY_PIPE_USED2, LAY_PIPE_USED3, LAY_PIPE_USER3,
LAY_PIPE_USER4, LAY_PIPE_USER5, LAY_PIPE_USER6, LAY_PIPE_USER7, LAY_PIPE_USER8
};
int nRet = -1;
for (int i = 0; i < 35; i++)
{
if (sLayer[i].Compare(sPipeLayer) == 0)
{
nRet = i;
break;
}
}
return nRet;
}
void CPipeVMultDrawDlg::GetPipeName(std::vector<CString> &vecPipeName)
{
vecPipeName.push_back(_T("给水"));
vecPipeName.push_back(_T("给水中区"));
vecPipeName.push_back(_T("给水高区"));
vecPipeName.push_back(_T("热给水"));
vecPipeName.push_back(_T("热给水中区"));
vecPipeName.push_back(_T("热给水高区"));
vecPipeName.push_back(_T("热回水"));
vecPipeName.push_back(_T("热回水中区"));
vecPipeName.push_back(_T("热回水高区"));
vecPipeName.push_back(_T("中水"));
vecPipeName.push_back(_T("中水中区"));
vecPipeName.push_back(_T("中水高区"));
vecPipeName.push_back(_T("消防"));
vecPipeName.push_back(_T("消防中区"));
vecPipeName.push_back(_T("消防高区"));
vecPipeName.push_back(_T("喷淋"));
vecPipeName.push_back(_T("喷淋中区"));
vecPipeName.push_back(_T("喷淋高区"));
vecPipeName.push_back(_T("污水"));
vecPipeName.push_back(_T("废水"));
vecPipeName.push_back(_T("雨水"));
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_COAGULATE]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_DRINK]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_PRESSDIRT]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_PRESSUSELESS]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_PRESSRAIN]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER1]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER2]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER3]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER4]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER5]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER6]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER7]);
vecPipeName.push_back(m_mapLayerPipeName[LAY_PIPE_USER8]);
vecPipeName.push_back(_T("其他"));
}