前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.Net GDI+的图件绘制平台(四)-后台获取数据及窗体展示

.Net GDI+的图件绘制平台(四)-后台获取数据及窗体展示

作者头像
程序你好
发布2018-07-20 14:40:06
5610
发布2018-07-20 14:40:06
举报
文章被收录于专栏:程序你好程序你好程序你好

第四部分介绍如何从后台获取业务数据及在窗体上展示绘图库图形

分为4个项目:

1)UI项目,此项目包含了View和Controller的基类的定义,以及某种View和Controller的实现。

这里并没有使用IOC的容器,而是用泛型参数的形式把view声明到controller里,在controller构造的时候,用反射的方式创建特定的View对象,同时需要绘制图件的Painter

对象和需要的数据服务也会被创建。

View对象中声明窗体展示,数据加载,创建painter等事件,声明需方法LoadData和backgroundwork,使用异步的方式加载数据。

Controller代码示例:

public class OController<TView> : IOController where TView : OWatcher
    {
        public EventHandler ResetWatcherScroll;
        public event EventHandler<iEventArgs<OWatcher>> ToolStripMerging;
        protected OController()
        {
            CreateWatcher();
        }

        private void CreateWatcher()
        {
            View = Activator.CreateInstance<TView>();
            View.ViewScale = Setting.ViewScale;
            TopPainter = new CanvaPainter
            {
                RtDataMaxInterval = Setting.RtDataMaxInterval,
                UiLanguage = Setting.UiLanguage
            }; //单位秒
            DepthWitsCodes = string.Empty;
            TopPainter.StatusWriting += TopPainter_StatusWriting;
            TopPainter.WatcherRefresh += TopPainter_WatcherRefresh;
            TopPainter.RtTimerStart += TopPainter_RtTimerStart;
            //启动一个进程,获取(预加载)数据
            PrepareBackGroundWorker();
            Service = DataService.CreateInstance();
            Service.StatusWriting += TopPainter_StatusWriting;
        }

View代码示例:

2)Model项目,定义了绘图与业务相关的模型。

代码示例:

 /// <summary>
    /// 曲线数据源数据描述
    /// </summary>
    public class DataMetadataBase
    {
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 标识
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// wits代码,唯一标识
        /// </summary>
        public string WitsCode { get; set; }

        /// <summary>
        /// 计量单位
        /// </summary>
        public string Unit { get; set; }

        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// 最大值
        /// </summary>
        public double MaxValue { set; get; }

        /// <summary>
        /// 最小值
        /// </summary>
        public double MinValue { set; get; }

        public DataMetadataBase()
        {
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace RST.Plot.Model.Curve
{
    public class DepthDataMetadata : DataMetadataBase
    {
        /// <summary>
        /// 主属性 1-通道对象, 2-表对象,3-流对象
        /// </summary>
        public int Attr { get; set; }
        /// <summary>
        /// 子属性,1-曲线对象;2-波形对象;3-地层测试对象;4-时深时对象
        /// </summary>
        public int SubAttr { get; set; }
        /// <summary>
        /// 数据类型
        /// </summary>
        public int DataType { get; set; }
        /// <summary>
        /// 数据类型长度
        /// </summary>
        public int DataTypeLen { get; set; }
        /// <summary>
        /// 维数,最大为4维
        /// </summary>
        public int NumOfDimension { get; set; }
        /// <summary>
        /// 维信息定义
        /// </summary>
        public Dimension[] Dimensions { get; set; }
        /// <summary>
        /// 开始时间
        /// </summary>
        public DateTime? StartTime { get; set; }
        /// <summary>
        /// 结束时间
        /// </summary>
        public DateTime? EndTime { get; set; }
        /// <summary>
        /// 开始深度
        /// </summary>
        public float StartDepth { get; set; }
        /// <summary>
        /// 截止深度
        /// </summary>
        public float EndDepth { get; set; }

        public DepthDataMetadata()
        {
            
        }
        public DepthDataMetadata(string name)
        {
            Name = name;
        }
        public override int GetHashCode()
        {
            return Name.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            if (!(obj is DepthDataMetadata))
            {
                return false;
            }

            return Name.Equals(((DepthDataMetadata)obj).Name);
        }
    }

    public class Dimension
    {
        public Dimension()
        {
            
        }
        /// <summary>
        /// 维名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 维的单位
        /// </summary>
        public string Unit { get; set; }
        /// <summary>
        /// 维的起始值
        /// </summary>
        public double StartVal { get; set; }
        /// <summary>
        /// 维的数据采样点数,值为0,采样点数为可变值,数据中记录该值。对于第一维数据,值不能为0。
        /// </summary>
        public int Samples { get; set; }
     }
}

3)Service项目主要定义了绘图库展示相关的服务。因为没有单独创建接口声明的项目,conrtroller接口定义放在了service项目中,如果接口比较多可以单独创建一个Service.Interface的项目。

4)Data项目,包含远程的数据代理及本地数据获取提供。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档