Pipeline
介绍
二次开发源码开源的三维管线地理信息系统:
包括:
- 三维地图浏览/定位
- 管线快速查询 材质查询 / 管径查询 / 管块查询 / 埋设日期查询 / 复合条件查询 / 空间查询
- 管线数据统计
- 管径分段统计 埋深分段统计 / 材质分类统计 / 管径分类统计 / 综合统计
- 应急抢险分析 断面分析 / 爆管分析 / 地面开挖分析 / 覆土分析 / 追踪分析 / 流向分析
- 规划设计分析 净距分析 / 碰撞分析 / 连通性分析
- 管线属性标注
- 数据打印出图
源码地址:https://gitee.com/rzcgis/pipeline
基于超图supermap iobjects 10i的管线管理
相关组件:1.SunnyUI2.SuperMap iObjects 10i的管线管理3.Log4Net
初始化
基本操作
管径统计
管线查询
管线统计
规划分析
应急抢险
断面分析
大屏
开发
开发分为如下部分:
-
编写查询或者统计或者其他计算的条件面板:在Ycjw.PipeLine.Map.Tools.Conditions下根据实际条件实现ConditionPanel的子类
-
重写ConditionPanel的虚方法,Do方法是必须重写的,默认情况下ConditionPanel中m_BaseConditions的第一个元素是Scene对象
-
定义结果面板,重写ShowData方法即可,定义的类继承ResultWindow,且与第一步子类即条件面板同名。
-
配置菜单项,按照目录组织形成ribbon菜单,目前支持RibbonButton菜单,在相应的json中tag指向的是ConditionPanel子类的名称
菜单
增加菜单:如想要新增菜单,在
Package\configs\menus
目录下按照需求新建目录,目前支持的末级按钮为RibbonButton,在对应的json中通过属性tag配置关联的条件面板(相对于Ycjw.PipeLine.Map.Tools.Conditions
)
对于配置的菜单的图标,可以按照json的名称放在
Pipeline\Package\resources
目录下,或者名称按照json中配置项的Text属性放在Pipeline\Package\resources
下,前者具有优先级。
无论是查询或者统计,基本过程概括为输入界面定制→输出界面定制。
输入
对输入,抽象了
ConditionPanel
对象,所有查询或者统计项目都统一继承ConditionPanel
面板,实现属性输入或者空间输入。具体ConditionPanel
又分为:
Toolbar
模式,适用于纯粹在地图上进行交互输入的功能。普通模式
,弹出对话框供用户输入
输出
对输出,抽象了ResultWindows,具体分为:
ResultWindowsDataGridView
:包含结果表格ResultWindowsChart
:默认包含结果图和表,图的类型包括Pie/Bar/Line
等五类。
如有特殊定制需求,请与我联系。
代码截取:
void LoadSceneLater()
{
SplashForm.Instance.SetMessage("初始化场景......");
SceneAdapter.Instance.LoadSceneControl(dockPanel);
Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(500);
}).ContinueWith((t) => {
SplashForm.Instance.SetMessage("场景初始化完成......");
RibbonMenuRegister.Instance.SetDockPanel(this.dockPanel);
UnRegister();
m_SceneSetting = new SceneSetting(SceneAdapter.Instance.SceneControl,this);
m_SceneMeasure = new SceneMeasure(SceneAdapter.Instance.SceneControl,this);
m_SceneEntitySelect = new SceneEntitySelect(SceneAdapter.Instance.SceneControl,this);
SceneAdapter.Instance.NewOpenEvent += WorkSpace_NewOpenEvent;
//打开最后一次打开的工作空间
var lastPath = Commons.SerializeHelper.IniHelper.Read(Commons.SerializeHelper.IniHelper.KEY_LAST_WORKSPACE_PATH);
if (!string.IsNullOrEmpty(lastPath))
{
SplashForm.Instance.SetMessage("加载上一次场景......");
SceneAdapter.Instance.OpenWorkSpace(lastPath);
}
System.Threading.Thread.Sleep(500);
SplashForm.Instance.CloseIt = true;
WindowState = FormWindowState.Maximized;
this.BringToFront();
}, TaskScheduler.FromCurrentSynchronizationContext());
}