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

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);
}