249 lines
5.1 KiB
C++
249 lines
5.1 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include <set>
|
|
#include "sstream"
|
|
#include <string>
|
|
#include <functional>
|
|
#include <algorithm>
|
|
#include "dbtable.h"
|
|
#include "MakeDim.h"
|
|
|
|
namespace
|
|
{
|
|
typedef std::wstringstream SStream;
|
|
typedef std::wfstream FStream;
|
|
}
|
|
|
|
namespace GLReport
|
|
{
|
|
/*TABLE-JIG*/
|
|
class TableJig :public AcEdJig
|
|
{
|
|
public:
|
|
TableJig(AcDbTable *pTbl, LPCTSTR psz) : m_pTbl(pTbl), m_Prompt(_T("")) { if (psz) m_Prompt = psz; }
|
|
~TableJig(){}
|
|
AcEdJig::DragStatus doIt();
|
|
|
|
protected:
|
|
virtual AcEdJig::DragStatus sampler();
|
|
virtual Adesk::Boolean update();
|
|
virtual AcDbEntity* entity() const { return m_pTbl; }
|
|
|
|
private:
|
|
AcDbTable *m_pTbl;// 表格实体
|
|
AcGePoint3d m_ptPos; // 选中点
|
|
CString m_Prompt;
|
|
};
|
|
|
|
|
|
/*节点数据*/
|
|
struct EWNodeData
|
|
{
|
|
EWNodeData() : m_stake(_T("")), m_dDistance(.0f) {}
|
|
EWNodeData(const std::wstring &stake, const float distance) : m_stake(stake), m_dDistance(distance) {}
|
|
// 桩号
|
|
std::wstring m_stake;
|
|
// 距离
|
|
float m_dDistance;
|
|
};
|
|
|
|
/*通风计算数据*/
|
|
struct EWVentilate
|
|
{
|
|
// 桩号
|
|
std::wstring m_stake;
|
|
// 距离
|
|
float m_dDistance;
|
|
// 体积 m3
|
|
float m_dVolum;
|
|
// 通风次数
|
|
float m_dNumVentilate;
|
|
// 通风风量 m3
|
|
float m_dAirHr;
|
|
// 截面面积 m2
|
|
float m_dArea;
|
|
};
|
|
|
|
typedef std::vector<EWNodeData> EWNodeDatas;
|
|
typedef std::vector<EWVentilate> EWVentilates;
|
|
|
|
/* 舱室结构 */
|
|
class CEWTank
|
|
{
|
|
public:
|
|
CEWTank() :
|
|
m_length(.0f)
|
|
, m_width(.0f) {}
|
|
|
|
~CEWTank() {}
|
|
|
|
public:
|
|
void clear()
|
|
{
|
|
m_fireWall.clear();
|
|
m_Ventilate.clear();
|
|
m_escape.clear();
|
|
m_doghouse.clear();
|
|
m_outlets.clear();
|
|
m_wells.clear();
|
|
m_calcFireZone.clear();
|
|
m_calcEscape.clear();
|
|
m_calcVentilate.clear();
|
|
m_calcDoghouse.clear();
|
|
m_calcOutlet.clear();
|
|
m_calcWell.clear();
|
|
m_options.clear();
|
|
}
|
|
|
|
CString getName()const { return m_name; }
|
|
void setName(LPCTSTR name) { m_name = name; }
|
|
|
|
float getLength()const { return m_length; }
|
|
void setHeight(const float &f) { m_length = f; }
|
|
|
|
float getWidth()const { return m_width; }
|
|
void setWidth(const float &f) { m_width = f; }
|
|
|
|
void setOption(const std::map<CString, double> &op);
|
|
|
|
public:
|
|
void appendData(const MK_DIM::NodeDim::ENodeType &type, const EWNodeData &data);
|
|
const EWNodeDatas& getFireZoneData()const { return m_calcFireZone; }
|
|
const EWVentilates& getVentilateData()const { return m_calcVentilate; }
|
|
const EWNodeDatas& getEscapeData()const { return m_calcEscape; }
|
|
const EWNodeDatas& getDoghouseData()const { return m_calcDoghouse; }
|
|
const EWNodeDatas& getOutletData()const { return m_calcOutlet; }
|
|
const EWNodeDatas& getWellData()const { return m_calcWell; }
|
|
|
|
public:
|
|
|
|
// 断面面积
|
|
float getSectionArea()const { return m_length * m_width; }
|
|
|
|
// 计算数据
|
|
void calcData(const MK_DIM::NodeDim::ENodeType &type);
|
|
|
|
private:
|
|
|
|
// 计算防火分区
|
|
void calcFireZone();
|
|
// 计算通风分区
|
|
void calcVentilateZone();
|
|
// 计算通风
|
|
void calcVentilate();
|
|
// 复核逃生口
|
|
void calcEscape();
|
|
// 复核投料口
|
|
void calcDoghouse();
|
|
// 复核集水井
|
|
void calcWell();
|
|
// 复核分支口
|
|
void calcOutlet();
|
|
|
|
// 计算 防火,吊装,逃生,分支,分支B
|
|
void calc(EWNodeDatas &out, const EWNodeDatas &data);
|
|
|
|
private:
|
|
|
|
// 舱室名称
|
|
CString m_name;
|
|
|
|
// 舱室净长
|
|
float m_length;
|
|
|
|
// 舱室净宽
|
|
float m_width;
|
|
|
|
// 各节点类型的最小间距,和通风次数
|
|
std::map<CString, double> m_options;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 以下为平面数据
|
|
// 防火墙
|
|
EWNodeDatas m_fireWall;
|
|
|
|
// 通风口
|
|
EWNodeDatas m_Ventilate;
|
|
|
|
// 逃生口
|
|
EWNodeDatas m_escape;
|
|
|
|
// 投料口
|
|
EWNodeDatas m_doghouse;
|
|
|
|
// 集水井
|
|
EWNodeDatas m_wells;
|
|
|
|
// 分支口
|
|
EWNodeDatas m_outlets;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 以下为计算产生数据
|
|
|
|
// 防火分区
|
|
EWNodeDatas m_calcFireZone;
|
|
// 逃生口
|
|
EWNodeDatas m_calcEscape;
|
|
// 通风计算
|
|
EWVentilates m_calcVentilate;
|
|
// 投料口
|
|
EWNodeDatas m_calcDoghouse;
|
|
// 分支口
|
|
EWNodeDatas m_calcOutlet;
|
|
// 集水井
|
|
EWNodeDatas m_calcWell;
|
|
|
|
};
|
|
|
|
typedef std::vector<CEWTank> EWTanks;
|
|
|
|
/* 管廊数据 */
|
|
class CEWGLReport
|
|
{
|
|
public:
|
|
CEWGLReport() {}
|
|
~CEWGLReport() {}
|
|
|
|
public:
|
|
|
|
// 添加一个舱室
|
|
void appendTank(const CEWTank &tank) { m_tanks.push_back(tank); }
|
|
|
|
void outputCADTable(const MK_DIM::NodeDim::ENodeType &type);
|
|
|
|
private:
|
|
AcDbTable* outputDataCAD(const MK_DIM::NodeDim::ENodeType &type);
|
|
AcDbTable* outputVentilateCAD();
|
|
|
|
private:
|
|
// 舱室集合
|
|
EWTanks m_tanks;
|
|
};
|
|
|
|
void SetRoomTypeByIdx();
|
|
}
|
|
|
|
|
|
namespace GLStatistics
|
|
{
|
|
using namespace MK_DIM;
|
|
|
|
#define VEN_NUM _T("换气次数")
|
|
|
|
// 舱室名-数据集
|
|
typedef std::map<CString, std::map<CString, double>> TJConfig;
|
|
typedef TJConfig::iterator TJConfigIt;
|
|
|
|
void statisticDrainWell();
|
|
void statisticDoghouse();
|
|
void statisticVenDoghouse();
|
|
void statisticFireWall();
|
|
void statisticEscapeHatch();
|
|
void statisticOutlet();
|
|
|
|
CString getConfigFilePath();
|
|
|
|
void readConfig(TJConfig &config);
|
|
}
|