#pragma once #include #include #include "sstream" #include #include #include #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 EWNodeDatas; typedef std::vector 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 &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 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 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> TJConfig; typedef TJConfig::iterator TJConfigIt; void statisticDrainWell(); void statisticDoghouse(); void statisticVenDoghouse(); void statisticFireWall(); void statisticEscapeHatch(); void statisticOutlet(); CString getConfigFilePath(); void readConfig(TJConfig &config); }