174 lines
5.5 KiB
C++
174 lines
5.5 KiB
C++
#pragma once
|
|
|
|
#include "globalFunc.h"
|
|
// 起点井埋深类型 cet 2012.6.21 add
|
|
enum LayingDepthType
|
|
{
|
|
eUserSet = 0, // 命令执行前用户设置了井底标高(非0值)
|
|
eLayingDepth = 1, // 埋深值取自对话框设置的输入起点埋深
|
|
eCalc = 2, // 计算过程中产生的埋深值
|
|
eUserModify = 3, // 通过修改特定井起点埋深获得
|
|
};
|
|
|
|
// 系统起点井埋深数据 cet 2012.6.21 add
|
|
struct LayingDepthNode
|
|
{
|
|
LayingDepthType type;
|
|
double dLayingDepth;
|
|
};
|
|
|
|
// 计算时使用
|
|
typedef struct CalcNode
|
|
{
|
|
AcDbObjectId idS; // 起点井
|
|
AcDbObjectId idE; // 终点井
|
|
AcDbObjectId idP; // 管
|
|
double dPipeDn; // 管径
|
|
double dGradient; // 坡度
|
|
double dGradientDist;// 坡降
|
|
double dPipeLen; // 管平面长度
|
|
double dWellEleUpS; // 起点井地面标高
|
|
double dWellEleUpE; // 终点井地面标高
|
|
double dWellEleDownS;// 起点井底标高
|
|
double dPipeEleS; // 起点管内底标高
|
|
double dPipeEleE; // 终点管内底标高
|
|
double dDeepS; // 起点埋深
|
|
double dDeepE; // 终点埋深
|
|
CString strSWellName; // 起点井名称
|
|
CString strEWellName; // 终点井名称
|
|
BOOL bIsDropWell; // 起点井是否为跌水井
|
|
BOOL bSysStartWell; // 起点井是否为系统起点井
|
|
BOOL bPool; // 化粪池
|
|
}CALCNODE;
|
|
|
|
struct FindFunc
|
|
{
|
|
FindFunc(const AcDbObjectId &id)
|
|
{
|
|
m_id = id;
|
|
}
|
|
|
|
BOOL operator() (CALCNODE &node)
|
|
{
|
|
if (node.idS == m_id)
|
|
{
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
private:
|
|
|
|
AcDbObjectId m_id;
|
|
};
|
|
|
|
class CElevationCalcDlg;
|
|
class ElevationCalc
|
|
{
|
|
|
|
public:
|
|
|
|
void SetLayingDepth(double dLayingDepth);
|
|
|
|
void SetMinThick(double dMinThick);
|
|
|
|
void SetPipeSys(SSearchPipeList *pList);
|
|
|
|
void SetPipeEleDown(double dEle);
|
|
|
|
void Sort(std::vector<CALCNODE> &vec); //按表格显示顺序排列管网信息
|
|
|
|
void UpDatePipeSys(); // 设置管道长度和管径
|
|
|
|
void CalcLenStartWellToEnd(SSearchPipeList *pList, double dCurLen); // 起点井到排出端的长度
|
|
|
|
std::vector<CALCNODE>& GetLstData();
|
|
|
|
void ModifyWellInfo(const AcDbObjectId &id, double dEleUp, double dEleDown, BOOL bDrop);
|
|
|
|
void ModifyPipe(const AcDbObjectId &idPipe, double dDn, BOOL bDn); // 修改管段 bDn为真时修改管径 为假时修改坡度
|
|
|
|
void ModifyWellLayingDepth(const AcDbObjectId &id, double dLayingDepth);
|
|
|
|
double GetWellLayDepth(const AcDbObjectId &id);
|
|
|
|
std::vector<SSearchPipeList*>& GetStartWell();
|
|
// 是否进行系统起点井的埋深选择操作 cet 2012.6.21 add
|
|
void EnableSetLayDepth(bool bVal);
|
|
// 设置系统起点井埋深数据 cet 2012.2.21 add
|
|
void SetLayDepthData(std::map<AcDbObjectId,LayingDepthNode> *pMapData);
|
|
// 是否只有一个起点井
|
|
void SetOnlySWell(bool bOnly);
|
|
|
|
public:
|
|
|
|
virtual void InitCalcSys() = 0; // 初始化计算
|
|
|
|
virtual void LayingDepthCalc() = 0; // 傻算
|
|
|
|
virtual void AutoCalc(BOOL bModify = FALSE) = 0; // 自动计算
|
|
|
|
virtual void CheckSys(CWnd *pWnd = NULL) = 0; // 校核
|
|
|
|
virtual void UpdateDropWell(const std::map<AcDbObjectId,double> &data); // 更新跌水井信息
|
|
|
|
virtual void GetCheckInfoforPipe(std::vector<AcDbObjectId> &data); // 校核后不符合要求的管段
|
|
|
|
protected:
|
|
|
|
void GetSWellByShow(std::vector<SSearchPipeList*> &data); // 按表格显示顺序存储系统各起点井
|
|
|
|
double GetWellEleUp(const AcDbObjectId &id); // 井面标高
|
|
|
|
double GetWellEleDown(const AcDbObjectId &id); // 井底标高
|
|
|
|
double GetPipeEleUp(const std::vector<CALCNODE> &data, const AcDbObjectId &idSWell); // 管内顶标高
|
|
|
|
double GetPipeEleDown(const std::vector<CALCNODE> &data, const AcDbObjectId &idSWell); // 管内底标高
|
|
|
|
BOOL IsDropWell(AcDbObjectId &id); // 是否为跌水井
|
|
|
|
SSearchPipeList* GetFarthestSWell(SSearchPipeList* pList); // 获得系统中未处理的最远起点井
|
|
|
|
void GetStartWell(SSearchPipeList *pList, std::vector<SSearchPipeList*> &data); // 获得pList上的起点井
|
|
|
|
double GetPipeThickById(const AcDbObjectId &id, double dDn); // 壁厚
|
|
|
|
double GetPipeDjById(const AcDbObjectId &id, double dDn); // 内径
|
|
|
|
double GetPoolDrop(const AcDbObjectId &id); // 化粪池进出管高差
|
|
|
|
double GetPoolGroundEle(const AcDbObjectId &id); // 化粪池地面标高
|
|
|
|
CString GetPoolName(const AcDbObjectId &id);
|
|
|
|
int Compare(double dVal1, double dVal2);
|
|
// 更新系统起点井的埋深 cet 2012.6.21 add
|
|
void UpdateSWellLayDepth();
|
|
// 更新指定类型的系统起点井的埋深 cet 2012.6.21 add
|
|
void UpdateSWellLayDepth(LayingDepthType type);
|
|
|
|
private:
|
|
|
|
void InitPipeInfo(); // 设置管段的壁厚内径
|
|
|
|
protected:
|
|
|
|
SSearchPipeList *m_pAllList;
|
|
std::vector<CALCNODE> m_vecLstData; // 表格中数据(也为计算单元)
|
|
std::vector<SSearchPipeList*> m_vecWell; // 系统中所有起点井
|
|
std::map<AcDbObjectId, double> m_mapLayingDepth; // 管网起点井对应埋设深度
|
|
double m_dLayingDepth;
|
|
double m_dMinThick;
|
|
CElevationCalcDlg *m_pWnd;
|
|
std::map<AcDbObjectId,double> m_mapDropWell; // 跌水井信息
|
|
double m_dPipeEleDown; // 排出端管内底标高
|
|
std::vector<AcDbObjectId> m_vecCheckforPipe; // 校核后不符合要求的管段
|
|
std::map<double,double> m_mapPipeDj; // 管径对应的的诰
|
|
std::map<double,double> m_mapPipeThick; // 管径对应壁厚
|
|
bool m_bShowTip; // 计算时是否提示用户系统起点井的埋深选择操作 cet 2012.6.21 add
|
|
bool m_bOnlySWell; // 是否只有一个起点井 cet 2012.6.26 add
|
|
std::map<AcDbObjectId,LayingDepthNode> *m_pMapSWellLayDepth; // 系统起点井埋深值及埋深类型 cet 2012.6.21 add
|
|
|
|
};
|