120 lines
3.1 KiB
C++
120 lines
3.1 KiB
C++
#if !defined(AFX_HYDRANTCALCDATA_H__4A1C9712_489F_4E6C_8CC3_B250798761BB__INCLUDED_)
|
|
#define AFX_HYDRANTCALCDATA_H__4A1C9712_489F_4E6C_8CC3_B250798761BB__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include "resource.h"
|
|
#include "WDGRID.h"
|
|
|
|
class TGridHydrantData : public WRowData
|
|
{
|
|
public:
|
|
CString m_csNg; //当量
|
|
AcDbObjectId m_idPipe;
|
|
};
|
|
|
|
class CHydrantCalcDataDlg;
|
|
class TGridHydrantCalcGrid: public WDGrid
|
|
{
|
|
protected:
|
|
virtual bool OnCellButtonDown(WDGridCell &cell, CString &res);
|
|
virtual void OnCellComboString(WDGridCell&cell,CComboBox&combo);
|
|
virtual bool OnModified(WDGridCell&cell,CString &text);
|
|
virtual void OnDblClick(WDGridRow&row);
|
|
public:
|
|
TGridHydrantCalcGrid();
|
|
void SetDlg(CHydrantCalcDataDlg *pDlg);
|
|
void ShowPipe();
|
|
private:
|
|
CHydrantCalcDataDlg *m_pDlg;
|
|
};
|
|
|
|
class CHydrantCalcDlg;
|
|
class CHydrantCalcDataDlg : public CDialog
|
|
{
|
|
|
|
public:
|
|
|
|
CHydrantCalcDataDlg(CWnd* pParent = NULL);
|
|
~CHydrantCalcDataDlg();
|
|
void SetHydrantCalcDlg(CHydrantCalcDlg *pDlg);
|
|
void SetListAll(SSearchPipeList *pListAll);
|
|
void SetSSAll(PickSet &ssAll);
|
|
void SetSSCalc(PickSet &ssCalc);
|
|
void UpdatePipeDn(const AcDbObjectId &idPipe, double dDn);
|
|
|
|
//{{AFX_DATA(CHydrantCalcDataDlg)
|
|
enum { IDD = IDD_HYDRANT_CALC_DATA };
|
|
TGridHydrantCalcGrid m_wndGrid;
|
|
BOOL m_bNg;
|
|
double m_dPress;
|
|
//}}AFX_DATA
|
|
|
|
//{{AFX_VIRTUAL(CHydrantCalcDataDlg)
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
//}}AFX_VIRTUAL
|
|
|
|
protected:
|
|
|
|
// Generated message map functions
|
|
//{{AFX_MSG(CHydrantCalcDataDlg)
|
|
virtual BOOL OnInitDialog();
|
|
afx_msg void OnBtnWord();
|
|
afx_msg void OnBtnSheet();
|
|
virtual void OnOK();
|
|
afx_msg void OnButtonShow();
|
|
afx_msg void OnBtnPress();
|
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
private:
|
|
void Calc();
|
|
void ReCalc();
|
|
void UpdateGrid();
|
|
void UpdatePress();
|
|
CString GetPipeNg(SSearchPipeList *pListAll);
|
|
void DoCalcHydrantNg2(SSearchPipeList *pListAll, BOOL bOnlyFlow = TRUE);
|
|
void ResetList(SSearchPipeList *pListAll);
|
|
// 根据已知节点压力求解未知节点静态压力,构建节点求压关系
|
|
void ConstructNode();
|
|
// 显示不满足静态压力要求的消火栓
|
|
void ShowHydrant(bool bShow);
|
|
// 获取实体颜色
|
|
void GetEntityColor();
|
|
|
|
void Dim();
|
|
|
|
private:
|
|
CHydrantCalcDlg* m_pHydrantCalcDlg;
|
|
DList<SSearchPipeList> m_lstNode;
|
|
SSearchPipeList *m_pListAll;
|
|
PickSet m_ssAll;
|
|
PickSet m_ssCalc;
|
|
// 管线管径改变后的数值
|
|
std::map<AcDbObjectId,double> m_mapPipeDN;
|
|
// 节点压力
|
|
struct NODEPRESS
|
|
{
|
|
SSearchPipeList *pList; // 待求压力节点
|
|
SSearchPipeList *pListClaced; // 已知压力值节点
|
|
double dPressDiff; // 压力差
|
|
double dPress; // plist压力值
|
|
};
|
|
// 初算时计算出的交叉点压力
|
|
std::map<AcDbObjectId,NODEPRESS> m_mapCalcedNodePress;
|
|
// 实体颜色
|
|
std::map<AcDbObjectId, Adesk::UInt16> m_mapColor;
|
|
// 不符合压力要求的消火栓
|
|
std::vector<AcDbObjectId> m_vecIds;
|
|
// 控制实体是否亮显
|
|
bool m_bShow;
|
|
// 是否是平面图
|
|
bool m_bPGraph;
|
|
};
|
|
|
|
#endif // !defined(AFX_HYDRANTCALCDATA_H__4A1C9712_489F_4E6C_8CC3_B250798761BB__INCLUDED_)
|