前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.Net GDI+的图件绘制平台(二)-图元属性设置对话框

.Net GDI+的图件绘制平台(二)-图元属性设置对话框

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

接下来我们介绍的项目是绘图库中的UI项目,这个项目主要包含两部分内容。第一部分是图元的属性对话框,选中某个图元后右键弹出窗体来设置这个图元的大小、线宽、各种颜色等绘制相关的属性。第二部分是用来保存图元属性的对象。

如下:

主要有以下几类的对象:

DashBoard里是仪表盘绘图对象(由多个不同类型图元组合而成)属性

DigitPanel是数字显示屏的绘图对象属性

Lane目录有多个图元属性对象,包含图道属性、图道坐标刻度属性、曲线属性等

Layout目录中有Container容器布局相关的属性对象。

Share目录中有属性对象的基类SettingBase类和其它对话框基类对象

类图如下:

部分代码示例:

代码语言:javascript
复制
 public class SettingBase
    {
        protected SettingBase()
        {
            State = EEntityState.Unknown;
            LaneCategory = ELaneCategroy.CurveLane;
            Name = string.Empty;
            LaneWidth = 180;
            CanvaCategory = ECanvaCategory.Blank;
            DataProvideMethod = EDataProvideMethod.Online;
        }

        protected SettingBase(string name, EEntityState state)
            :this()
        {
            Name = name;
            State = state;
        }

        public EEntityState State { get; set; }

        public ELaneCategroy LaneCategory { get; set; }

        public bool IsAxisLane { get; set; }
        public SizeF MaxSize { get; set; }
        public string Name { get; set; }
        public bool Visible { get; set; }
        public float Width { get; set; }
        public float Height { get; set; }
        public float OrgHeight { get; set; }
        public float OrgWidth { get; set; }
        /// <summary>
        /// 字体属性
        /// </summary>
        public Font Font { get; set; }

        /// <summary>
        /// 前景色颜色属性
        /// </summary>
        public Color ForeColor { get; set; }

        /// <summary>
        /// 背景色颜色属性
        /// </summary>
        public Color BackColor { get; set; }

        public float LaneWidth { get; set; }

        public float HeaderHeight { get; set; }
        public float HeaderActualHeight { get; set; }
        public EDataProvideMethod DataProvideMethod { get; set; }
        public ECanvaCategory CanvaCategory { get; set; }
    }

对话框示例:

坐标属性设置对话框

曲线设置对话框:

图道设置对话框:

属性对话框调用流程如下:

1)、在图元对应的Painter对象中定义图元的属性设置事件菜单。

代码语言:javascript
复制
 protected override void HandleMenuClick(PainterEventArgs e)
        {
            if (!e.Id.Equals(Id)) return;

            base.HandleMenuClick(e);
            switch (e.Name)
            {
                case "UpdateCurve":
                    ChangePainterSetting(EEntityState.Modified);
                    break;
                case "DeleteCurve":
                    DeleteItem();
                    RefreshAll();
                    break;
                case "HideCurve":
                    ChangeItemVisible(Id, true);
                    TopPainter.ClearToolWorkShapes();
                    RefreshWatcher();
                  break;
                case "ShowCurves":
                    ((CurveHeaderPainter)Parent).ShowUnitEntities();
                    TopPainter.ClearToolWorkShapes();
                    RefreshAll(true);
                  break;
                case "ShowCurve":
                    ((CurveHeaderPainter)Parent).ShowUnitEntity(e.Tag.ToString());
                    TopPainter.ClearToolWorkShapes();
                    RefreshAll(true);
                  break;
                case "MoveUp":
                    MoveItem(EMoveDirection.Up);
                    RefreshWatcher();
                  break;
                case "MoveDown":
                    MoveItem(EMoveDirection.Down);
                    RefreshWatcher();
                  break;
            }
        }

2)在事件处理中,创建图元Setting对象,创建对话框示例,把setting对象传递给对话框,并弹出对话框。

代码语言:javascript
复制
public override void ChangePainterSetting(EEntityState state)
        {
            if (TopPainter.ParamMetadatas == null)
            {
                throw WrapException.Warning<UIException>(Resources.S_M_DataNoLoadToWait);
            }
            Setting.ParamMetadatas = TopPainter.ParamMetadatas;
            Setting.Coordinates = ((HeaderPainter) Parent).Coordinates;
            Setting.HeaderHeight = Parent.Height;
            Setting.HeaderHeightLocked = TopPainter.HistogramHost.Header.HeaderHeightLocked;
            Setting.HeaderActualHeight = CalcHeaderActualHeight();
            Setting.LeftValue = LeftValue;
            Setting.RightValue = RightValue;
            Setting.CurveColor = ItemColor;
            Setting.CurveFont = ItemFont;
            Setting.CurveName = Name;
            Setting.PenWidth = PenWidth;
            Setting.Name = Name;
            Setting.HeaderItemHeight = Height;
            Setting.HeaderItemMinHeight = TopPainter.HistogramHost.Header.HeaderItemHeight;
            Setting.WitsCode = DataSource.WitsCode;
            Setting.ParamUnit = ParamUnit;
            Setting.AlarmSetting = AlarmSetting;
            var originalSetting = CoreUtility.Clone(Setting);
            Setting.HasNextItem =((HeaderPainter)Parent).CheckHasNextCurve(Position);
            Setting.ExistedWistCodes = TopPainter.HistogramHost.Header.TotalWisCodeList;
            var settingDlg = new CurveSettingDlg(state, Setting) {UiLanguage = TopPainter.UiLanguage};
            if (settingDlg.ShowDialog() == DialogResult.OK)
            {
                Cursor.Current = Cursors.WaitCursor;
                LeftValue = Setting.LeftValue;
                RightValue = Setting.RightValue;
                ItemColor = Setting.CurveColor;
                ItemFont = Setting.CurveFont;
                ParamCode = Setting.CurveCode;
                Name = Setting.CurveName;
                PenWidth = Setting.PenWidth;
                ChangeCurveItemHeight();
                ParamUnit = Setting.ParamUnit;
                AlarmSetting = Setting.AlarmSetting;
                if (DataSource.WitsCode != Setting.WitsCode)
                {
                    DataSource.WitsCode = Setting.WitsCode;
                    OnCurveDataChanged();
                }
                var curvePainter = Entity.Unit as CurvePainter;
                if (curvePainter != null)
                {
                    curvePainter.ResetCurveStyle();
                    if (TopPainter.DataProvideMethod == EDataProvideMethod.Offline)
                        curvePainter.ReLoadPoints();
                    if (TopPainter.WatcherMode == EWatcherMode.Playback)
                        curvePainter.ReLoadPoints();
                }
                if (settingDlg.IsApplyAllPenWidth)
                    TopPainter.HistogramHost.ApplyAllItemPenWidth(PenWidth);
                if (settingDlg.IsApplyAllItemFont)
                    TopPainter.HistogramHost.ApplyAllItemFont(ItemFont);
                if (settingDlg.IsAppliedAllAlarm)
                    TopPainter.HistogramHost.ApplyAllItemAlarm(Setting.AlarmSetting);
               
                RefreshHeader();
                Cursor.Current = Cursors.Default;
            }
            else Setting = originalSetting;
            base.ChangePainterSetting(state);
        }

3)对话框点击OK按钮关闭时,获取新的Setting对象,把对象传回Painter对象,Painter对象根据新的Setting属性,设置图元对象的绘制属性并刷新相关的绘图图元对象。

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

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

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

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

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