专栏首页程序你好.Net 基于GDI+的图件绘制平台的设计与实现(一)

.Net 基于GDI+的图件绘制平台的设计与实现(一)

前言

最近参与开发的石油行业生产运行管理系统中(Java Web SSM系统),需要开发一整套石油行业专业图形软件,其中有格式复制的综合录井图,也有及时性要求较高的工程施工参数实时曲线监控,仪表盘,还有钻井行业常用的井深结构图,钻具组合图、井口装置图等。经过研究和了解市场上的相关软件,决定采用基于微软Windows .Net平台技术实现。.Net平台图形方面的开发现在可以使用两种技术分别实现,WPF图形绘制和传统WinForm GDI+绘图技术。这两种技术实现起来差别很大,由于目前团队中开发人员对WPF技术了解不够深入,学 习成本的考虑决定项目中采用传统GDI+方式绘制图形。参考和研究了网上流行的开源绘图库和INT这类商业绘图库,大部分都是实现的饼状图,曲线图,折线图,柱状图等传统的图形,而且可扩展性不强,不能支持石油行业专业的图it件系统。决定开发一套专业的可扩展的图形绘制图库,方便在石油行业的项目中使用,前期先实现使用GDI绘图,后期考虑通过扩展接口的方式支持OpenGL(全写Open Graphics Library)跨编程语言、跨平台的编程接口规格的专业的图形程序接口。

GDI+绘图库介绍

GDI是图形设备接口的英文缩写,英文详细写法:Graphics Device Interface,,图形设备接口的意思。主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形和图像输出。GDI的出现使程序员无需要关心硬件设备及设备正常驱动,就可以将应用程序的输出转化为硬件设备上的输出和构成,实现了程序开发者与硬件设备的隔离,大大方便了开发工作,这组api接口使得我们的电脑能够输出显示各种图形图像,展示丰富多彩的效果。GDI+平台提供了直线、矩形、折线、多边形、椭圆、圆形、曲线、文本、图片等几何形状基元的画法,整个图形画面由若干几何形状基元组合而成。GDI+中使用路径来表示二维图形,路径可由任意数据的几何形状基元组成,使用全局坐标。一个图形画面可表示为路径的几何。

在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。而.net framework对GDI+ 的这组api接口进行了非常好的封装,使得我们能够在不需要了解底层接口情况下进行图形系统开发。

一张图来更深入了解下GDI+

在我们图形系统应用程序中,调用.net的绘制组件绘制图形图像时,会执行类似上图中展示的调用过程。

绘图平台绘图库架构

一、图元

图形文件最小的组成和编辑单位,包括对GDI+平台直接提供的直线、矩形、折线、多边形、椭圆、文本、图像等基本几何形状装饰而来的基本图元,以及由各个基本图元组合而成的组合图元。

图元的职责调用绘图接口进行图形绘制,现在支持使用GDI+绘图,后面可增加对OpenGL绘图支持。

图元中还有如画笔,画刷,高度,宽度等各种绘图属性设置,还提供图形缩放、图形移动等方法,还提供HitTest方法,让用户在图元对象内部HitTest。

二、图元Painter对象

每种图元都提供一个对应的Painter对象,用来对图元对象的生命周期进行管理,还可以控制图元绘制顺序,可对图元进行组合,以形成复杂树状关系的图元组合库。还可以提供对图元上UI事件控制与响应。

主要包括下面几个内容:

  • 图元shape创建与管理
  • 子图元的Painter集合
  • 图元绘制的属性相关设置
  • 图元右键上下文菜单事件处理,及弹出窗口UI设置
  • 图元创建中的事件处理

三、布局管理对象

提供图元绘制布局管理,提供几种不同类型的布局方式。

Box布局

Stack布局

Flow布局

锚定布局

浮动布局

四、曲线绘制对象

绘制点状,折线图,阶梯图,曲线折峰,曲线移峰,曲线镜像,曲线左填充,曲线右填充,曲线内部填充等功能。

曲线X坐标计算接口,同时支持对数图道坐标计算和非对数图道坐标计算实现。

五、图道坐标尺实体对象

基类对象,时间坐标尺,深度坐标尺

六、岩性绘制属性对象

七、绘图面板对象

八、区域Host对象

一组代表容器的图元

九、其它对象

结束,绘图库的i基本结构就介绍完了 ,后续会继续讲如何使用绘图库绘制图形,包括绘图库UI项目(绘图库使用相关属性窗体),绘图库Utility项目 ,

相关的Data、Model、View、Service等项目结构和代码 。

本文分享自微信公众号 - 程序你好(codinghello),作者:she9

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习等新技术正在重塑工厂的工作方式

    在过去的三十年里,工厂经历了翻天覆地的变化。80年代和90年代,工业自动化和机器人走在了前列。在过去的十年里,多种改变游戏规则的技术正在重塑工厂。机器学习、物联...

    程序你好
  • 如何将Array转换为List?

    可以使用 Arrays.asList() 方法, 该方法接受一个数组作为输入,并返回一个列表作为输出。

    程序你好
  • Docker集群网络的配置和使用

    在大多数情况下,在一台机器上运行所有的应用程序通常是不实际的,这种情况下,您将需要一种方法来跨许多机器分发应用程序。

    程序你好
  • RANSAC

    RANSAC是 RANdom SAmple Consensus 的缩写,中文翻译叫随机采样一致。它可以从一组观测数据中,找出符合某些数学模型的样本集,并且估计出...

    NT4.4
  • 天天都在用的 Tmux,可你知道如何在多用户间共享 Session 吗?

    Tmux Server 管理着多个 Session,而一个 Session 可以被多个 Tmux Client连接。这些 Tmux Client 通过一个 U...

    iMike
  • 科沃斯机器人:让机器人拥有智能大脑,引领智能家居升级变革

    去年5月,在成立20年之际,科沃斯宣布上市,成为“A股家庭服务机器人第一股”。以上市为分水岭,科沃斯创始人兼董事长钱东奇对未来的规划是这样的,“我们将立足家庭服...

    镁客网
  • JsonUnit 断言框架用法总结

    林万程
  • 深度学习基础之Dropout

    原标题 | An Introduction to Dropout for Regularizing Deep Neural Networks

    AI研习社
  • PHP设计模式(三)建造者模式Builder实例详解【创建型】

    本文实例讲述了PHP设计模式:建造者模式Builder。分享给大家供大家参考,具体如下:

    砸漏
  • 李飞飞等提出新的迭代视觉推理框架,在ADE上实现8.4 %的绝对提升

    译者 | 梁红丽 张蔚敏 编辑 | 明 明 出品 | AI科技大本营 【AI科技大本营导读】近日,李飞飞等提出了一种新的迭代视觉推理框架。该框架超越了目前缺乏推...

    朱晓霞

扫码关注云+社区

领取腾讯云代金券