博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
业务图形系统框架设计--一个为了减少图形引擎替换工作量的设计
阅读量:4840 次
发布时间:2019-06-11

本文共 3452 字,大约阅读时间需要 11 分钟。

1             业务图形系统框架

本业务图形系统目的在于使得今后图形引擎替换的时候,减少替换的工作量,并且将部分的图形业务逻辑固定下来,可以作为以后一个开发的基础资源使用。

业务图形系统的基本设计思路是设计与图形引擎无关的图元类和图层类,业务图形系统只跟这些与图形引擎无关的图元类和图层类做交互;具体的图形引擎的图元类和图层类通过继承的方式实现,并使用简单工厂模式来创建这些图元和图层实例,使得业务类、业务集合应用程序不直接与引擎相关的元素有关联。这样以后替换新的图形引擎只要继承一下图元类和图层类,并通过工厂类创建新的图形引擎的图元和图层实例,即可以实现新的图形引擎的替换工作,基本不用去修改与图形相关的代码。

业务图形系统用的主要的程序集:

业务图形系统主要的程序集dll的关系图如下

 

 

业务图形系统主要的程序集dll的关系图的分析文件:

业务图形系统主要的类、类和类之间的关系图如下

业务图形系统主要的类、类和类之间的关系的分析文件:

 

程序集

坐标数据类

主要用于储存业务图形的坐标数据。

唯一性标记类

 

 

主要用于标识图元的唯一性字段,判断图元是不是重复,用UniqueId查找图元元素和业务数据。

程序集

摄像机类

主要用于和具体的图形引擎做交互,并存储当前的放缩比率和摄像机的偏移位置。同时,继承了接口INotifyPropertyChanged,为的是该类的实例属性改变的时候,可以通知到具体的图形引擎。

 

图层管理类

主用用于管理图层类实例的增删和查找,并提供了两个虚拟的方法,用于对具体的引擎增删图层时候额外操作。

     /// <summary>

        /// 增加图元时,对于图元的额外操作(基于具体GIS控件的)

        /// </summary>

        /// <param name="layer"></param>

        protected virtual void AddedLayer(Layer layer)

        {

        }

        /// <summary>

        /// 删除图元时,对于图元的额外操作(基于具体GIS控件的)

        /// </summary>

        protected virtual void RemovedLayer(Layer layer)

        {

        }

 

引擎图元管理接口

图形引擎控件继承本接口,界面程序只于本接口做图形方面的交互,图形引擎控件封装掉大部分的功能,比如缩放、移动、选择对象等。

BaseShapes:当前选中的对象

Giscamera:摄像机

LayerManage:图层管理类

ObtainShapeWay:获取选中图形的方式

其它的是一些鼠标事件。

 

图元接口

主要用于保存基础图元的一个引用。

图元基本类

主要用于保存图元的一些基本的属性。

图层-图元管理类

主要用于对图元的增删、和查找管理。并提供抽象的方法,用于对具体的引擎增删图元时候的额外操作。

    /// <summary>

        /// IsVisible属性改变时的事件

        /// </summary>

        protected abstract void IsVisiblePropertyChange();

        /// <summary>

        /// IsActive属性改变时的事件

        /// </summary>

        protected abstract void IsActivePropertyChange();

 

        /// <summary>

        /// 增加图元时,对于图元的额外操作(基于具体GIS控件的)

        /// </summary>

        /// <param name="shape"></param>

        protected abstract void AddedShape(BaseShape shape);

        /// <summary>

        /// 删除图元时,对于图元的额外操作(基于具体GIS控件的)

        /// </summary>

        protected abstract void RemovedShape(BaseShape shape);

 

程序集

业务集合基础类

主要用于管理业务实体类,提高抽象方法与图形工厂做图形创建、绘制交互。

 

注:图形引擎的修改、替换不会对业务类产生影响。

程序集

数据库数据存储类

主要用于存储从数据库取出的持久化数据。

程序集

箱区业务类

主要用于存储数据库的数据,并包含业务逻辑方法;同时,业务类实现IUniqueId接口。

箱区业务集合类

主要用于管理业务类的增删操作,并将业务数据映射到图形元素。

注:1TTK泛型分别对应于业务类和图形引擎元素中的图元(抽象类)。

         2CreateBaseShape方法不跟具体的图形引擎类关联,调用工厂方法创建图元。

3DrawShape方法只调用图元(抽象类)的绘制方法,不包含具体图形引擎的类。

注:图形引擎的修改、替换不会对业务类产生影响。

程序集

箱区图元抽象类

主要用于抽象箱区图元的绘制逻辑。

注:1、继承于图形BaseShape基类。

         2、泛型T必须是IUniqueId类型的,即为业务类类型。

         3DrawAreaDrawCloseArea为不同的绘制逻辑,根据不同的业务,调用不同的绘制逻辑。

 

程序集

图层创建接口

主要用于创建具体的图层。

 

图元创建接口

主要用于创建具体的图元。

程序集

图元创建接口

主要用于通过属性LayerFactorys返回一个ICreateLayer的接口实例。

 

图元创建接口

主要用于通过属性ShapeFactorys返回一个ICreateShape的接口实例。

 

图层创建接口实现类

主要用于实现接口ICreateLayer,创建具体的与图形引擎相关的类

 

图层创建接口实现类

主要用于实现接口ICreateShape,创建具体的与图形引擎相关的类

程序集

具体图形引擎绘制类

主要用于绘制图元,是图形引擎图元类的基类或是是绘制图形的基类。

注:继承接口IBaseShape,绘制的时候要存储BaseShape基类,便于选择等处理。

 

具体图形引擎图层管理类

主要用于对具体图形引擎图层增删的具体图层处理。

注:继承与图层管理类的基类LayerManage

主要重载2个方法:AddedLayerRemovedLayer

 

 

 

具体图形引擎图层

主要用于对具体图形引擎图元增删的具体图元处理。

注:继承与图元管理类的基类Layer

主要重载2个方法:AddedShapeRemovedShape

 

具体图形引擎图元类

主要用于添加一下基本属性和方法

 

具体图形引擎业务图元类

主要用于实现抽象图元业务绘制方法。是真正的绘制图元的类。

上述的设计是为了使替换图形引擎时,减少一些工作量。现在按现在这个设计开发完程序,以后如果要替换引擎只要按新的图形引擎的要求实现一下几点:

1、  按具体图形引擎要求现实ICreateLayerICreateShape接口

2、  按具体图形引擎要求继承AreaShapeLayer抽象类,并做相应的图形方面的处理。

3、  按具体图形引擎要求继承LayerManage抽象类,并做相应的图形方面的处理。

4、  按具体图形引擎要求继承IGisControl接口,并图形控件实现基本的图形操作

转载于:https://www.cnblogs.com/dyheee/archive/2011/07/13/2105271.html

你可能感兴趣的文章
第四周作业总结
查看>>
修改之前某次commit日志和内容
查看>>
动态规划:HDU1712-ACboy needs your help(分组背包问题)
查看>>
PAT A1009 Product of Polynomials(25)
查看>>
libFFM 与 python-libffm 安装遇到的一系列问题-解决方案
查看>>
数据摘要pandas
查看>>
浅谈C语言中的位段
查看>>
2019.04.25 第七次训练 【2017-2018 ACM-ICPC Asia East Continent League Final (ECL-Final 2017)】...
查看>>
javascript正则表达式复习
查看>>
【JVM】类加载器及双亲委派机制实例解析
查看>>
python 生成 pyc 文件
查看>>
linux清除git账号密码
查看>>
grep awk 查看nginx日志中所有访问的ip并 去重
查看>>
vue 遇到防盗链 img显示不出来
查看>>
C# GDI graphics.DrawImage 的参数问题
查看>>
【WPF】2、美化控件
查看>>
css 光标
查看>>
深入理解await与async
查看>>
将一个数字扁平化,去重并升序
查看>>
边缘缓存模式(Cache-Aside Pattern)
查看>>