Files
envi-code/SourceCode/Code2026/EarthWormCmd/EWCheckerData.h
T

248 lines
5.1 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
#pragma once
2026-09-28 15:28:50 +08:00
#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:
2026-10-04 00:04:20 +08:00
AcDbTable *m_pTbl;// 表格实体
AcGePoint3d m_ptPos; // 选中点
2026-09-28 15:28:50 +08:00
CString m_Prompt;
};
2026-10-04 00:04:20 +08:00
/*节点数据*/
2026-09-28 15:28:50 +08:00
struct EWNodeData
{
EWNodeData() : m_stake(_T("")), m_dDistance(.0f) {}
EWNodeData(const std::wstring &stake, const float distance) : m_stake(stake), m_dDistance(distance) {}
2026-10-04 00:04:20 +08:00
// 桩号
2026-09-28 15:28:50 +08:00
std::wstring m_stake;
2026-10-04 00:04:20 +08:00
// 距离
2026-09-28 15:28:50 +08:00
float m_dDistance;
};
2026-10-04 00:04:20 +08:00
/*通风计算数据*/
2026-09-28 15:28:50 +08:00
struct EWVentilate
{
2026-10-04 00:04:20 +08:00
// 桩号
2026-09-28 15:28:50 +08:00
std::wstring m_stake;
2026-10-04 00:04:20 +08:00
// 距离
2026-09-28 15:28:50 +08:00
float m_dDistance;
2026-10-04 00:04:20 +08:00
// 体积 m3
2026-09-28 15:28:50 +08:00
float m_dVolum;
2026-10-04 00:04:20 +08:00
// 通风次数
2026-09-28 15:28:50 +08:00
float m_dNumVentilate;
2026-10-04 00:04:20 +08:00
// 通风风量 m3
2026-09-28 15:28:50 +08:00
float m_dAirHr;
2026-10-04 00:04:20 +08:00
// 截面面积 m2
2026-09-28 15:28:50 +08:00
float m_dArea;
};
typedef std::vector<EWNodeData> EWNodeDatas;
typedef std::vector<EWVentilate> EWVentilates;
2026-10-04 00:04:20 +08:00
/* 舱室结构 */
2026-09-28 15:28:50 +08:00
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:
2026-10-04 00:04:20 +08:00
// 断面面积
2026-09-28 15:28:50 +08:00
float getSectionArea()const { return m_length * m_width; }
2026-10-04 00:04:20 +08:00
// 计算数据
2026-09-28 15:28:50 +08:00
void calcData(const MK_DIM::NodeDim::ENodeType &type);
private:
2026-10-04 00:04:20 +08:00
// 计算防火分区
2026-09-28 15:28:50 +08:00
void calcFireZone();
2026-10-04 00:04:20 +08:00
// 计算通风分区
2026-09-28 15:28:50 +08:00
void calcVentilateZone();
2026-10-04 00:04:20 +08:00
// 计算通风
2026-09-28 15:28:50 +08:00
void calcVentilate();
2026-10-04 00:04:20 +08:00
// 复核逃生口
2026-09-28 15:28:50 +08:00
void calcEscape();
2026-10-04 00:04:20 +08:00
// 复核投料口
2026-09-28 15:28:50 +08:00
void calcDoghouse();
2026-10-04 00:04:20 +08:00
// 复核集水井
2026-09-28 15:28:50 +08:00
void calcWell();
2026-10-04 00:04:20 +08:00
// 复核分支口
2026-09-28 15:28:50 +08:00
void calcOutlet();
2026-10-04 00:04:20 +08:00
// 计算 防火,吊装,逃生,分支,分支B
2026-09-28 15:28:50 +08:00
void calc(EWNodeDatas &out, const EWNodeDatas &data);
private:
2026-10-04 00:04:20 +08:00
// 舱室名称
2026-09-28 15:28:50 +08:00
CString m_name;
2026-10-04 00:04:20 +08:00
// 舱室净长
2026-09-28 15:28:50 +08:00
float m_length;
2026-10-04 00:04:20 +08:00
// 舱室净宽
2026-09-28 15:28:50 +08:00
float m_width;
2026-10-04 00:04:20 +08:00
// 各节点类型的最小间距,和通风次数
2026-09-28 15:28:50 +08:00
std::map<CString, double> m_options;
//////////////////////////////////////////////////////////////////////////
2026-10-04 00:04:20 +08:00
// 以下为平面数据
// 防火墙
2026-09-28 15:28:50 +08:00
EWNodeDatas m_fireWall;
2026-10-04 00:04:20 +08:00
// 通风口
2026-09-28 15:28:50 +08:00
EWNodeDatas m_Ventilate;
2026-10-04 00:04:20 +08:00
// 逃生口
2026-09-28 15:28:50 +08:00
EWNodeDatas m_escape;
2026-10-04 00:04:20 +08:00
// 投料口
2026-09-28 15:28:50 +08:00
EWNodeDatas m_doghouse;
2026-10-04 00:04:20 +08:00
// 集水井
2026-09-28 15:28:50 +08:00
EWNodeDatas m_wells;
2026-10-04 00:04:20 +08:00
// 分支口
2026-09-28 15:28:50 +08:00
EWNodeDatas m_outlets;
//////////////////////////////////////////////////////////////////////////
2026-10-04 00:04:20 +08:00
// 以下为计算产生数据
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// 防火分区
2026-09-28 15:28:50 +08:00
EWNodeDatas m_calcFireZone;
2026-10-04 00:04:20 +08:00
// 逃生口
2026-09-28 15:28:50 +08:00
EWNodeDatas m_calcEscape;
2026-10-04 00:04:20 +08:00
// 通风计算
2026-09-28 15:28:50 +08:00
EWVentilates m_calcVentilate;
2026-10-04 00:04:20 +08:00
// 投料口
2026-09-28 15:28:50 +08:00
EWNodeDatas m_calcDoghouse;
2026-10-04 00:04:20 +08:00
// 分支口
2026-09-28 15:28:50 +08:00
EWNodeDatas m_calcOutlet;
2026-10-04 00:04:20 +08:00
// 集水井
2026-09-28 15:28:50 +08:00
EWNodeDatas m_calcWell;
};
typedef std::vector<CEWTank> EWTanks;
2026-10-04 00:04:20 +08:00
/* 管廊数据 */
2026-09-28 15:28:50 +08:00
class CEWGLReport
{
public:
CEWGLReport() {}
~CEWGLReport() {}
public:
2026-10-04 00:04:20 +08:00
// 添加一个舱室
2026-09-28 15:28:50 +08:00
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:
2026-10-04 00:04:20 +08:00
// 舱室集合
2026-09-28 15:28:50 +08:00
EWTanks m_tanks;
};
void SetRoomTypeByIdx();
}
namespace GLStatistics
{
using namespace MK_DIM;
2026-10-04 00:04:20 +08:00
#define VEN_NUM _T("换气次数")
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// 舱室名-数据集
2026-09-28 15:28:50 +08:00
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);
}