Commit 6f8296c6 authored by 刘乐's avatar 刘乐

1, 代码改造

parent e7a421fe
#include "CivAssembly.h"
CivAssembly::CivAssembly()
Str CivAssembly::toString()
{
return Str();
}
void CivNode::addItem(NodeTable table)
{
mTables.push_back(table);
}
CivNode::CivNode()
{
void CivNode::addItems(std::list<NodeTable> tables)
{
//mTables.merge(tables);
}
void CivPipe::addItem(PipesTable table)
{
mTables.push_back(table);
}
CivPipe::CivPipe()
{
void CivPipe::addItems(std::list<PipesTable> tables)
{
//mTables.merge(tables);
}
void CivTank::addItem(TankTable table)
{
mTables.push_back(table);
}
CivTank::CivTank()
{
void CivTank::addItems(std::list<TankTable> tables)
{
//mTables.merge(tables);
}
void CivValve::addItem(ValveTable table)
{
mTables.push_back(table);
}
void CivValve::addItems(std::list<ValveTable> tables)
{
//mTables.merge(tables);
}
CivValve::CivValve()
{
void CivPumps::addItem(PumpTable table)
{
mTables.push_back(table);
}
CivPumps::CivPumps()
{
void CivPumps::addItems(std::list<PumpTable> tables)
{
//mTables.merge(tables);
}
void CivReservoirs::addItem(ReservoirsTable table)
{
mTables.push_back(table);
}
CivReservoirs::CivReservoirs()
{
void CivReservoirs::addItems(std::list<ReservoirsTable> tables)
{
//mTables.merge(tables);
}
void CivEmitters::addItem(EmittersTable table)
{
mTables.push_back(table);
}
CivEmitters::CivEmitters()
{
void CivEmitters::addItems(std::list<EmittersTable> tables)
{
//mTables.merge(tables);
}
void CivCoordinates::addItem(CoordTable table)
{
mTables.push_back(table);
}
void CivCoordinates::addItems(std::list<CoordTable> tables)
{
//mTables.merge(tables);
}
void CivMixing::addItem(MixingTable table)
{
mTables.push_back(table);
}
void CivMixing::addItems(std::list<MixingTable> tables)
{
//mTables.merge(tables);
}
void CivParameter::addItem(ParamTable table)
{
mTables.push_back(table);
}
void CivParameter::addItems(std::list<ParamTable> tables)
{
//mTables.merge(tables);
}
void CivPatterns::addItem(PatternTable table)
{
mTables.push_back(table);
}
void CivPatterns::addItems(std::list<PatternTable> tables)
{
//mTables.merge(tables);
}
void CivCurves::addItem(CurvesTable table)
{
mTables.push_back(table);
}
void CivCurves::addItems(std::list<CurvesTable> tables)
{
//mTables.merge(tables);
}
void CivDemands::addItem(DemandsTable table)
{
mTables.push_back(table);
}
void CivDemands::addItems(std::list<DemandsTable> tables)
{
//mTables.merge(tables);
}
void CivSources::addItem(CurvesTable table)
{
mTables.push_back(table);
}
void CivSources::addItems(std::list<CurvesTable> tables)
{
//mTables.merge(tables);
}
void CivStatus::addItem(StatusTable table)
{
mTables.push_back(table);
}
void CivStatus::addItems(std::list<StatusTable> tables)
{
//mTables.merge(tables);
}
void CivQuality::addItem(QualityTable table)
{
mTables.push_back(table);
}
void CivQuality::addItems(std::list<QualityTable> tables)
{
//mTables.merge(tables);
}
void CivLabels::addItem(LabelTable table)
{
mTables.push_back(table);
}
void CivLabels::addItems(std::list<LabelTable> tables)
{
//mTables.merge(tables);
}
void CivTags::addItem(TagsTable table)
{
mTables.push_back(table);
}
void CivTags::addItems(std::list<TagsTable> tables)
{
//mTables.merge(tables);
}
\ No newline at end of file
#ifndef CIVASSEMBLY_H
#define CIVASSEMBLY_H
#include "CivTypes.h"
#include <list>
class CivAssembly;
class CivNode;
......@@ -16,10 +17,7 @@ class CivEmitters;
class CivAssembly
{
public:
CivAssembly();
protected:
virtual Str toString();
};
/**
......@@ -28,10 +26,19 @@ protected:
class CivNode: public CivAssembly
{
public:
CivNode();
typedef struct Table
{
// ; ID Elev Demand Pattern
Str ID;
Str Elev;
Str Demand;
Str PatternId;
} NodeTable;
private:
void addItem(NodeTable table);
void addItems(std::list<NodeTable> tables);
std::list<NodeTable> mTables;
};
/**
......@@ -40,12 +47,23 @@ private:
class CivPipe: public CivAssembly
{
public:
CivPipe();
typedef struct Table
{
// ; ID Node1 Node2 Length Diameter Roughness MinorLoss Status
Str ID;
Str Node1;
Str Node2;
Str Length;
Str Diameter;
Str Roughness;
Str MinorLoss;
Str Status;
} PipesTable;
void addItem(PipesTable table);
void addItems(std::list<PipesTable> tables);
private:
Str mID; // id号
CivNode* mStartNode = nullptr; // 上点号
CivNode* mStopNode = nullptr; // 本点号
std::list<PipesTable> mTables;
};
......@@ -55,20 +73,55 @@ private:
class CivTank:public CivAssembly
{
public:
CivTank();
typedef struct Table
{
// ; ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve
Str ID;
Str Elev;
Str InitLevel;
Str MinLevel;
Str MaxLevel;
Str Diameter;
Str MinVol;
Str VolCurve;
} TankTable;
void addItem(TankTable table);
void addItems(std::list<TankTable> tables);
std::list<TankTable> mTables;
};
/*
阀门
定义包含在管网中所有控制阀门。
*/
class CivValve :public CivAssembly
{
public:
CivValve();
typedef struct Table
{
/*
阀门的ID标签
起始节点ID
终止节点ID
直径,mm(英寸)
阀门类型
阀门设置
局部损失系数
*/
Str ID;
Str Node1;
Str Node2;
Str Diameter;
Str Type;
Str Setting;
Str MinorLoss;
} ValveTable;
void addItem(ValveTable table);
void addItems(std::list<ValveTable> tables);
std::list<ValveTable> mTables;
};
/**
......@@ -77,18 +130,43 @@ public:
class CivPumps :public CivAssembly
{
public:
CivPumps();
typedef struct Table
{
// ;ID Node1 Node2 Parameters
Str ID;
Str Node1;
Str Node2;
Str Parameters;
} PumpTable;
void addItem(PumpTable table);
void addItems(std::list<PumpTable> tables);
std::list<PumpTable> mTables;
};
/*
水源
定义管网中包含的所有水库节点
*/
class CivReservoirs :public CivAssembly
{
public:
CivReservoirs();
typedef struct Table
{
/*
ID标签
水头,ft(m)
水头模式ID(可选)
*/
Str ID;
Str Head;
Str Pattern;
} ReservoirsTable;
void addItem(ReservoirsTable table);
void addItems(std::list<ReservoirsTable> tables);
std::list<ReservoirsTable> mTables;
};
/**
......@@ -97,8 +175,264 @@ public:
class CivEmitters :public CivAssembly
{
public:
CivEmitters();
typedef struct Table
{
/*
连接节点ID标签
流量系数,在1米(1 psi)压降下的流量单位
*/
Str ID;
Str coeff;
} EmittersTable;
void addItem(EmittersTable table);
void addItems(std::list<EmittersTable> tables);
std::list<EmittersTable> mTables;
};
/**
坐标
*/
class CivCoordinates :public CivAssembly
{
public:
typedef struct Table
{
// ; ;Node X-Coord Y-Coord
Str ID;
Str XCoord;
Str YCoord;
} CoordTable;
void addItem(CoordTable table);
void addItems(std::list<CoordTable> tables);
std::list<CoordTable> mTables;
};
/**
参数控制选项
*/
class CivMixing :public CivAssembly
{
public:
typedef struct Table
{
/*
水池ID标签
混合模型(MIXED, 2COMP, FIFO或LIFO)
室的容积(小数)
*/
Str ID;
Str hyModel;
Str volume;
} MixingTable;
void addItem(MixingTable table);
void addItems(std::list<MixingTable> tables);
std::list<MixingTable> mTables;
};
/**
确定控制蓄水池混合的模型。
*/
class CivParameter :public CivAssembly
{
public:
typedef struct Table
{
/*
[OPTIONS]
[TIMES]
[REACTIONS]
[ENERGY]
[REPORT]
*/
Str name;
Str val;
} ParamTable;
void addItem(ParamTable table);
void addItems(std::list<ParamTable> tables);
void setType(const std::string& type) { mType = type; }
std::string mType;
std::list<ParamTable> mTables;
};
/**
模式
*/
class CivPatterns :public CivAssembly
{
public:
typedef struct Table
{
Str name; // 模式名
Str val; // 模式值
} PatternTable;
void addItem(PatternTable table);
void addItems(std::list<PatternTable> tables);
std::list<PatternTable> mTables;
};
/*
定义数据曲线及其X、Y点。
*/
class CivCurves :public CivAssembly
{
public:
typedef struct Table
{
Str ID; // 模式名
Str XCoord; // X数值
Str YCoord; // Y数值
} CurvesTable;
void addItem(CurvesTable table);
void addItems(std::list<CurvesTable> tables);
std::list<CurvesTable> mTables;
};
/**
定义连接节点的多模式需水,是对[JUNCTIONS]的补充。
*/
class CivDemands :public CivAssembly
{
public:
typedef struct Table
{
/*
连接节点ID标签;
基本需水量(流量单位);
需水量模式ID(可选);
分号之后的需水量类型名称(可选)
*/
Str ID;
Str BaseDemand;
Str PatternId;
Str DemandType;
} DemandsTable;
void addItem(DemandsTable table);
void addItems(std::list<DemandsTable> tables);
std::list<DemandsTable> mTables;
};
// 定义水质源头的位置。
class CivSources :public CivAssembly
{
public:
typedef struct Table
{
/*
节点ID标签
源头类型(CONCEN, MASS, FLOWPACED或SETPOINT)
基准源头强度
时间模式ID(可选);Node Type Quality Pattern
*/
Str ID;
Str Type;
Str Quality;
Str Pattern;
} CurvesTable;
void addItem(CurvesTable table);
void addItems(std::list<CurvesTable> tables);
std::list<CurvesTable> mTables;
};
// 定义模拟开始时被选管段的初始状态。
class CivStatus :public CivAssembly
{
public:
typedef struct Table
{
/*
管段ID标签
状态或者设置 ID Status/Setting
*/
Str ID;
Str Setting;
} StatusTable;
void addItem(StatusTable table);
void addItems(std::list<StatusTable> tables);
std::list<StatusTable> mTables;
};
// 定义节点的初始水质。
class CivQuality :public CivAssembly
{
public:
typedef struct Table
{
/*
节点ID标签
初始水质
*/
Str ID;
Str InitQuality;
} QualityTable;
void addItem(QualityTable table);
void addItems(std::list<QualityTable> tables);
std::list<QualityTable> mTables;
};
// 给地图标签赋以坐标值。
class CivLabels :public CivAssembly
{
public:
typedef struct Table
{
/*
X坐标
Y坐标
双引号中的标签文本
锚定节点的ID标签(可选)
*/
Str XCoord;
Str YCoord;
Str Label;
Str ID;
} LabelTable;
void addItem(LabelTable table);
void addItems(std::list<LabelTable> tables);
std::list<LabelTable> mTables;
};
// 将类型标签与特定节点和管段相连。
class CivTags :public CivAssembly
{
public:
typedef struct Table
{
/*
关键词为NODE或者LINK
节点或者管段ID标签
标签的文本(无空格)
*/
Str Key;
Str Id;
Str Label;
} TagsTable;
void addItem(TagsTable table);
void addItems(std::list<TagsTable> tables);
std::list<TagsTable> mTables;
};
#endif // !CIVASSEMBLY_H
......
#include "CivInpBuilder.h"
#include "CivBuilder.h"
#include "CivTypes.h"
CivInpBuilder::CivInpBuilder()
......@@ -41,7 +41,7 @@ bool CivInpBuilder::exportInp(char* fileName)
bool cii = mDbConn->createTable(OPTIONTTABLE, "public", CivTableTemp::PARAMETER_TABLE);
// 获取表格
Tables tables = mDbConn->getTables("");
Tables tables = mDbConn->getTables("进贤","public");
//2,解析管网组件
// 解析管网组件顺序: 管线放最后
......@@ -54,9 +54,9 @@ bool CivInpBuilder::exportInp(char* fileName)
if (PIPELINE == table)
continue;
assemble(table, civInp);
builder(table, civInp);
}
assemble(PIPELINE, civInp);
builder(PIPELINE, civInp);
// 设置曲线
......@@ -92,7 +92,7 @@ bool CivInpBuilder::exportInp(char* fileName)
return true;
}
void CivInpBuilder::assemble(StrQuote table, CivInp& inp)
void CivInpBuilder::builder(StrQuote table, CivInp& inp)
{
// 根据组建类型解析字段
if (PIPELINE == table)
......@@ -386,36 +386,37 @@ void CivInpBuilder::assemble(StrQuote table, CivInp& inp)
}
}
void CivInpBuilder::buildNode()
void CivInpBuilder::builderNode()
{
}
void CivInpBuilder::buildPipe()
void CivInpBuilder::builderPipe()
{
}
void CivInpBuilder::buildTank()
void CivInpBuilder::builderTank()
{
}
void CivInpBuilder::buildVavle()
void CivInpBuilder::builderVavle()
{
}
void CivInpBuilder::buildPump()
void CivInpBuilder::builderPump()
{
}
void CivInpBuilder::buildReservoir()
void CivInpBuilder::builderReservoir()
{
}
void CivInpBuilder::buildEmitter()
void CivInpBuilder::builderEmitter()
{
}
......
......@@ -7,22 +7,24 @@
/**
* 抽象建造者
*/
class CivAbsBuilder
class CivBuilder
{
public:
virtual void buildNode() = 0;
virtual void buildPipe() = 0;
virtual void buildTank() = 0;
virtual void buildVavle() = 0;
virtual void buildPump() = 0;
virtual void buildReservoir() = 0;
virtual void buildEmitter() = 0;
virtual void builderNode() = 0;
virtual void builderPipe() = 0;
virtual void builderTank() = 0;
virtual void builderVavle() = 0;
virtual void builderPump() = 0;
virtual void builderReservoir() = 0;
virtual void builderEmitter() = 0;
virtual CivNewInp* getNewInp() = 0;
};
/**
* 导出inp文件类
*/
class CivInpBuilder:public CivAbsBuilder
class CivInpBuilder:public CivBuilder
{
public:
CivInpBuilder();
......@@ -42,15 +44,15 @@ public:
*@table:表
*@inp: inp文件对象
*/
void assemble(StrQuote table, CivInp& inp);
virtual void buildNode();
virtual void buildPipe();
virtual void buildTank() ;
virtual void buildVavle();
virtual void buildPump();
virtual void buildReservoir() ;
virtual void buildEmitter();
void builder(StrQuote table, CivInp& inp);
virtual void builderNode();
virtual void builderPipe();
virtual void builderTank() ;
virtual void builderVavle();
virtual void builderPump();
virtual void builderReservoir() ;
virtual void builderEmitter();
virtual CivNewInp* getNewInp();
private:
......
......@@ -51,7 +51,7 @@ bool CivHydrCalc::hydrSimulation(char* fileName, char* rptFile, char* binOutFile
float dHStep;
ENGetVal(4, &dHStep);
hydrCompute(errcode);
// hydrCompute(errcode);
bool isFirst = true;
// 计算
do
......@@ -95,48 +95,36 @@ bool CivHydrCalc::hydrSimulation(char* fileName, char* rptFile, char* binOutFile
bool CivHydrCalc::qualitySimulation(char* inpFile, char* rptFile, char* binOutFile)
{
if (!hydrSimulation(inpFile, rptFile, binOutFile))
{
if (!exportInp(inpFile))
return false;
}
// 运行水质运算需要先进行水力运算
int errcode = 0;
// 进行水质分析
ENopenQ();
ENinitQ(1);
short hydCode = 1;
long t(0), tstep(0);
int iTime(0);
int errcode = 0;
do
errcode = ENopen(inpFile, rptFile, binOutFile);
if (errcode > 0)
{
errcode = ENrunQ(&t); // errcode > 100 是错误
if (errcode > 100)
{
ENcloseQ();
ENclose();
return;
}
// 存储水质计算结果
ENstepQ(&tstep);
iTime++;
ENclose();
return false;
}
} while (tstep > 0);
if (ENopenH() > 0)
{
ENclose();
return false;
}
if (ENinitH(0) > 0)
{
ENclose();
return false;
}
ENcloseQ();
ENclose();
return true;
}
float dHStep;
ENGetVal(4, &dHStep);
bool CivHydrCalc::hydrCompute(int& errorcode)
{
bool isFirst = true;
// 计算
do
......@@ -168,6 +156,47 @@ bool CivHydrCalc::hydrCompute(int& errorcode)
getLinkResult(iTime);
iTime++;
} while (tstep > 0);
// 更新管网数据库数据
(void)mDbConn->updateNodeByInterval(CurrentDate, "0");
(void)mDbConn->updateLinkByInterval(CurrentDate, "0");
ENcloseH();
// 运行水质运算需要先进行水力运算
errcode = 0;
// 进行水质分析
ENopenQ();
ENinitQ(1);
t = 0;
tstep = 0;
iTime = 0;
errcode = 0;
do
{
errcode = ENrunQ(&t); // errcode > 100 是错误
if (errcode > 100)
{
ENcloseQ();
ENclose();
return false;
}
// 存储水质计算结果
ENstepQ(&tstep);
iTime++;
} while (tstep > 0);
ENcloseQ();
ENclose();
return true;
}
bool CivHydrCalc::exportInp(char* fileName)
......@@ -570,7 +599,8 @@ void CivHydrCalc::getNodeResult(short time)
ENgetnodevalue(i, EN_MAXVOLUME, &nodeItem.dTankMaxVolume);
// 液位高度
ENgetnodevalue(i, EN_TANKLEVEL, &nodeItem.dTankLevel);
// 水质
ENgetnodevalue(i, EN_QUALITY, &nodeItem.dQuality);
nodeItem.dInterval = time;
......@@ -621,6 +651,8 @@ void CivHydrCalc::getLinkResult(short time)
ENgetnodevalue(node1, EN_HEAD, &linkItem.dFromNodHeadloss);
// 本点水头
ENgetnodevalue(node2, EN_HEAD, &linkItem.dToNodHeadloss);
// 水质
ENgetlinkvalue(i, EN_LINKQUAL, &linkItem.dQuality);
// 局部水头损失
float fCoeff;
ENgetlinkvalue(i, EN_MINORLOSS, &fCoeff);
......
......@@ -45,7 +45,7 @@ private:
*/
void assemble(const std::string& table, CivInp& inp);
bool hydrCompute(int& errorcode);
/*
*@brief 获取节点计算结果
*@time: 时间
......
#include "CivInpDirector.h"
#include "CivBuilder.h"
void CivInpDirector::create(CivBuilder* builder)
{
builder->builderNode();
builder->builderPipe();
builder->builderTank();
builder->builderReservoir();
builder->builderPump();
builder->builderVavle();
builder->builderEmitter();
}
\ No newline at end of file
#ifndef CIVINPDIRECTOR_H
#define CIVINPDIRECTOR_H
class CivBuilder;
// ָ
class CivInpDirector
{
public:
void create(CivBuilder* builder);
};
#endif // !CIVINPDIRECTOR_H
#include "CivNewInp.h"
#include <time.h>
void CivNewInp::setTtitle(const std::string& title)
{
writeString("[TITLES]");
writeString("Scenario: Base");
writeString("Date:"+currentTime() );
}
void CivNewInp::writeHead(const std::string& head)
{
mTextStream << "[" << head << "]" << "\n";
}
std::string CivNewInp::currentTime()
{
time_t rawtime;
struct tm* timeinfo;
char s[100];
time(&rawtime);
timeinfo = localtime(&rawtime);
time_t tick = mktime(timeinfo);
strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", timeinfo);
return s;
}
void CivNewInp::setNode(const CivNode& node)
{
auto tables = node.mTables;
writeHead("JUNCTIONS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivNode::NodeTable nodeTable = *iter;
writeStringFormat(nodeTable.ID);
writeStringFormat(nodeTable.Elev);
writeStringFormat(nodeTable.Demand);
writeString(nodeTable.PatternId);
}
}
void CivNewInp::setPipes(const CivPipe& pipes)
{
auto tables = pipes.mTables;
writeHead("PIPES");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivPipe::PipesTable pipesTable = *iter;
writeStringFormat(pipesTable.ID);
writeStringFormat(pipesTable.Node1);
writeStringFormat(pipesTable.Node2);
writeStringFormat(pipesTable.Length);
writeStringFormat(pipesTable.Diameter);
writeStringFormat(pipesTable.Roughness);
writeStringFormat(pipesTable.MinorLoss);
writeString(pipesTable.Status);
}
}
void CivNewInp::setTank(const CivTank& tank)
{
auto tables = tank.mTables;
if (tables.size() <= 0)
return;
writeHead("TANKS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivTank::TankTable table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.Elev);
writeStringFormat(table.InitLevel);
writeStringFormat(table.MinLevel);
writeStringFormat(table.MaxLevel);
writeStringFormat(table.Diameter);
writeStringFormat(table.MinVol);
writeString(table.VolCurve);
}
}
void CivNewInp::setValves(const CivValve& valve)
{
auto tables = valve.mTables;
if (tables.size() <= 0)
return;
writeHead("VALVES");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivValve::ValveTable table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.Node1);
writeStringFormat(table.Node2);
writeStringFormat(table.Diameter);
writeStringFormat(table.Type);
writeStringFormat(table.Setting);
writeString(table.MinorLoss);
}
}
void CivNewInp::setPumps(const CivPumps& pumps)
{
auto tables = pumps.mTables;
if (tables.size() <= 0)
return;
writeHead("PUMPS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivPumps::PumpTable table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.Node1);
writeStringFormat(table.Node2);
writeString(table.Parameters);
}
}
void CivNewInp::setEmitters(const CivEmitters& mitters)
{
auto tables = mitters.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("EMITTERS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivEmitters::EmittersTable table = *iter;
writeStringFormat(table.ID);
writeString(table.coeff);
}
}
void CivNewInp::setReservoirs(const CivReservoirs& res)
{
auto tables = res.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("RESERVOIRS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivReservoirs::ReservoirsTable table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.Head);
writeString(table.Pattern);
}
}
// 系统运行
void CivNewInp::setCurves(const CivCurves& cureves)
{
auto tables = cureves.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("CURVES");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivCurves::Table table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.XCoord);
writeString(table.YCoord);
}
}
void CivNewInp::setPatterns(const CivPatterns& patterns)
{
auto tables = patterns.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("PATTERNS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivPatterns::PatternTable table = *iter;
writeStringFormat(table.name);
writeString(table.val);
}
}
void CivNewInp::setStatus(const CivStatus& status)
{
auto tables = status.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("STATUS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivStatus::Table table = *iter;
writeStringFormat(table.ID);
writeString(table.Setting);
}
}
void CivNewInp::setControls(const std::string& control)
{
writeHead("CONTROLS");
writeString(control);
}
void CivNewInp::setRules(const std::string& ruleId, const std::string& rules)
{
writeHead("RULES");
writeString("RULE " + ruleId);
writeString(rules);
}
void CivNewInp::setDemands(const CivDemands& demands)
{
auto tables = demands.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("DEMANDS");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivDemands::Table table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.BaseDemand);
writeStringFormat(table.PatternId);
writeString(table.DemandType);
}
}
// 水质
void CivNewInp::setQuality(const CivQuality& quality)
{
auto tables = quality.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("QUALITY");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivQuality::Table table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.InitQuality);
}
}
void CivNewInp::setSources(const CivSources& sources)
{
auto tables = sources.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("SOURCES");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivSources::Table table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.Type);
writeStringFormat(table.Quality);
writeString(table.Pattern);
}
}
void CivNewInp::setMixing(const CivMixing& mixing)
{
auto tables = mixing.mTables;
if (tables.size() <= 0)
{
return;
}
writeHead("MIXING");
for (auto iter = tables.rbegin(); iter != tables.rend(); iter++)
{
CivMixing::Table table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.hyModel);
writeString(table.volume);
}
}
// 选项和报表
void CivNewInp::setParamter(const CivParameter& params,const std::string& type)
{
auto tables = params.mTables;
if (tables.size() <= 0)
{
return;
}
auto iter = tables.rbegin();
writeHead(type);
for (; iter != tables.rend(); iter++)
{
CivParameter::ParamTable table = *iter;
writeStringFormat(table.name);
writeString(table.val);
}
}
//管网地图/标签
void CivNewInp::setCoordnates(const CivCoordinates& coords)
{
auto tables = coords.mTables;
if (tables.size() <= 0)
{
return;
}
auto iter = tables.rbegin();
writeHead("COORDINATES");
for (; iter != tables.rend(); iter++)
{
CivCoordinates::Table table = *iter;
writeStringFormat(table.ID);
writeStringFormat(table.XCoord);
writeString(table.YCoord);
}
}
void CivNewInp::setVertices()
{
}
void CivNewInp::setLabels(const CivLabels& labels)
{
auto tables = labels.mTables;
if (tables.size() <= 0)
{
return;
}
auto iter = tables.rbegin();
writeHead("LABELS");
for (; iter != tables.rend(); iter++)
{
CivLabels::Table table = *iter;
writeStringFormat(table.XCoord );
writeStringFormat(table.YCoord);
writeStringFormat(table.Label);
writeStringFormat(table.ID);
}
}
void CivNewInp::setBackDrop()
{
}
void CivNewInp::setTags(const CivTags& tags)
{
auto tables = tags.mTables;
if (tables.size() <= 0)
{
return;
}
auto iter = tables.rbegin();
writeHead("TAGS");
for (; iter != tables.rend(); iter++)
{
CivTags::Table table = *iter;
writeStringFormat(table.Key);
writeStringFormat(table.Id);
writeString(table.Label);
}
}
void CivNewInp::writeString(const std::string& s)
{
mTextStream << s << "\n";
}
void CivNewInp::writeStringFormat(const std::string& s, const std::string& sep)
{
mTextStream << s << sep;
}
\ No newline at end of file
#ifndef CIVNEWINP_H
#define CIVNEWINP_H
#include <sstream>
#include <string>
#include "CivAssembly.h"
#include <list>
/**
转inp文件类
*/
class CivNewInp
{
public:
CivNewInp();
~CivNewInp();
/**
管网组件
*/
void setTtitle(const std::string& title);
void setNode(const CivNode& node);
void setPipes(const CivPipe& pipes);
void setTank(const CivTank& tank);
void setReservoirs(const CivReservoirs& res);
void setValves(const CivValve& valve);
void setPumps(const CivPumps& pumps);
void setEmitters(const CivEmitters& mitters);
// 系统运行
void setCurves(const CivCurves& cureves);
void setPatterns(const CivPatterns& patterns);
void setStatus(const CivStatus& status);
void setControls(const std::string& control);
void setRules(const std::string& ruleName, const std::string& rules);
void setDemands(const CivDemands& demands);
// 水质
void setQuality(const CivQuality& quality);
void setSources(const CivSources& sources);
void setMixing(const CivMixing& mixing);
// 选项和报表
/*void setReactions();
void setOptions();
void setTimes();
void setReport();
void setEnergy();
*/
void setParamter(const CivParameter& params, const std::string& type);
//管网地图/标签
void setCoordnates(const CivCoordinates& coords);
void setVertices();
void setLabels(const CivLabels& labels);
void setBackDrop();
void setTags(const CivTags& tags);
private:
void inline writeString(const std::string& s);
void inline writeStringFormat(const std::string& s, const std::string& sep="\t");
void inline writeHead(const std::string& head);
std::string currentTime();
private:
//
CivNode mNode; // 节点
CivPipe mPipes; // 管线
CivTank mTanks; // 水池
CivValve mValves; // 阀门
CivPumps mPumps; // 水泵
CivEmitters mEmitters; // 喷嘴
std::ostringstream mTextStream;
};
#endif // !CIVNEWINP_H
......@@ -157,14 +157,17 @@
<ClCompile Include="CivHydrCalc.cpp" />
<ClCompile Include="CivHydrFuncInter.cpp" />
<ClCompile Include="CivInp.cpp" />
<ClCompile Include="CivInpBuilder.cpp" />
<ClCompile Include="CivBuilder.cpp" />
<ClCompile Include="CivInpDirector.cpp" />
<ClCompile Include="CivNewInp.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CivAssembly.h" />
<ClInclude Include="CivHydrCalc.h" />
<ClInclude Include="CivHydrFuncInter.h" />
<ClInclude Include="CivInp.h" />
<ClInclude Include="CivInpBuilder.h" />
<ClInclude Include="CivBuilder.h" />
<ClInclude Include="CivInpDirector.h" />
<ClInclude Include="CivNewInp.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
......
......@@ -30,7 +30,13 @@
<ClCompile Include="CivAssembly.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CivInpBuilder.cpp">
<ClCompile Include="CivBuilder.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CivInpDirector.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CivNewInp.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
......@@ -47,10 +53,13 @@
<ClInclude Include="CivAssembly.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CivInpBuilder.h">
<ClInclude Include="CivNewInp.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CivNewInp.h">
<ClInclude Include="CivBuilder.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CivInpDirector.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
......
......@@ -49,13 +49,6 @@ std::string CivCommonUtils::UTF8_To_string(const std::string& str)
return strRet;
}
//std::map<std::string, std::string> CivCommonUtils::parseJson(std::string jsonStr)
//{
// std::map<std::string, std::string> map;
//
// return map;
//}
std::string CivCommonUtils::currentTime()
{
time_t rawtime;
......
......@@ -250,6 +250,7 @@ struct NodeResultItem
float dTankVolume; // 水池容量
float dTankMaxVolume; // 水池最大容量
float dTankLevel; // 液位高度
float dQuality;// 水质
char dDate[32];// 日期
int dInterval; // 时段
};
......@@ -267,6 +268,7 @@ struct LinkResultItem
float dToNodHeadloss; // 本点水头
float dLocalHeadloss; // 局部水头损失
float dFrictionHeadloss; // 摩擦水头损失
float dQuality;// 水质
char szStatus[20]; // 状态
char dDate[32];// 日期
int dInterval; // 时段
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment