Files
envi-code/SourceCode/Code2026/Dimension/ElevationCalc.h
T
2026-09-28 15:28:50 +08:00

174 lines
5.0 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
};