zoukankan      html  css  js  c++  java
  • FlowDiagrams 简易模型绘图组件

    FlowDiagrams 简易模型绘图组件

    一、        目录

    FlowDiagrams 简易模型绘图组件... 1

    一、         目录... 1

    二、         序言... 2

    三、         特性... 2

    四、         技术优势... 2

    完全的XML存储... 2

    无限可扩展的自定义属性... 2

    .Net无缝结合... 3

    完全ActiveX Engine. 3

    完备的设计时状态支持... 3

    完全可定义的外部形状和组件库... 3

    五、         扩展开发... 3

    可继承绘图元素类型... 3

    开发步骤... 4

    六、         实例... 7

    动态连线... 7

    遍历图对象... 8

    七、         外观预览... 9

     


    二、        序言

           FlowDiagrams 控件是一个独立的,完全自主版权的强大绘图组件,完全基于 .Net 2.0 实现。支持动态图和Windows 组件绘图,并具备良好的扩展性,可以短时间完成自定义的绘图对象。

     

    三、        特性

    l  图的保存/装载,完全基于xml格式

    l  可配置画布背景图像

    l  采用抗锯齿绘图法

    l  支持图像元素旋转

    l  支持‘维持’机制,定时执行图元素的‘维持事件’

    l  支持五种连线方式,并可以自动调整连线的方向

    l  图元素可以遍历,并支持获取对象的有连接关系的对象

    l  支持导出9种图像格式

    l  图元素在设计状态下可以任意拖动和拾取

    l  可组合多个图元素

    l  图元素支持阴影,透明度,填充色等特效

     

    四、        技术优势

     

    完全的XML存储

    这样,不需要任何转换,您就可以直接将你的文件成果通过外部的编辑器进行扩展,有利于编程。

     

    无限可扩展的自定义属性

           灵活的扩充图库的方法,可以无限扩展自定义属性和事件,您可以根据开发需求XML文档中写入您自己的数据逻辑,甚至是将 Windows User Control 组件放入画布内,从而实现了超越控件图形逻辑之外的任意功能。

     

    .Net无缝结合

    FlowDiagrams 控件是一个纯.Net控件,完全采用C# 2.0开发,可以直接和.Net开发环境(VS2005)无缝结合,您可以象使用.Net中其他控件(如按钮(Button))一样拖放式地使用FlowDiagrams

     

    完全ActiveX Engine

    ActiveX Engine B/S模式下的ActiveX模式的实现引擎,它实现了任意实现DLLActiveX的功能,而FlowDiagrams 可以和它完美兼容,通过ActiveX Engine 的支持,可以将FlowDiagrams 绘图环境完全移植为B/S模式。

     

    完备的设计时状态支持

    FlowDiagrams提供了最完备的设计时状态支持,在.Net编辑环境中,您可以很直观地利用属性框控制FlowDiagrams的外观和行为,可以大大减少您的开发工作量。

     

    完全可定义的外部形状和组件库

    除了完整的矢量形状绘制功能外,FlowDiagrams通过两种方式实现开发者的定制功能:形状和组件。通过形状,开发者可以实现符合自己的特殊形状的绘制功能,开发者可以实现自己定义的完整对象,包括外观和行为。FlowDiagrams完全支持上述两种方式的定制,并提供了相应的选择器控件,您所需要做的,便是建立起您自己的丰富形状和组件库。

     

    五、        扩展开发

    可继承绘图元素类型

          

    说明

    DrawBezier

    Bezier 曲线

    DrawCurve

    曲线

    DrawEllipse

    椭圆

    DrawLine

    直线

    DrawLinkLine

    智能连线

    DrawObject

    绘图对象基类

    DrawPolygon

    铅笔

    DrawRectangle

    矩形

    DrawWinControl

    Windows 组件

    开发步骤

    a)         继承基础类,图形元素的核心对象(详细帮助请阅读sdk文档)

                            i.              重载 DoDraw 方法绘制自定义的图形

     

        /// <summary>

        /// 到界面上绘制一个Button对象

        /// </summary>

        [Serializable]

        public class DrawButton : DrawWinControl

        {

            /// <summary>

            /// 覆盖tool类,用于设计器注册

            /// </summary>

            public override FlowDiagrams.Tools.Tool ToolObject

            {

                get

                {

                    return base.ToolObject;

                }

                set

                {

                    base.ToolObject = value;

                }

            }

            /// <summary>

            /// 重实现Text属性

            /// </summary>

            public new string Text

            {

                get

                {

                    if (base.Control == null)

                        InitButton();

                    return base.Control.Text;

                }

                set

                {

                    if (base.Control == null)

                        InitButton();

                    base.Text = value;

                    base.Control.Text = value;

                }

            }

            /// <summary>

            /// 公布按钮单击事件

            /// </summary>

            public event EventHandler<EventArgs> ButtonOnClick;

            /// <summary>

            /// 初始化一个Button实例

            /// </summary>

            protected void InitButton()

            {

                base.Control = new System.Windows.Forms.Button();

                base.Control.Text = base.Text;

                base.Control.Click += new EventHandler(Control_Click);

            }

            /// <summary>

            /// 内部事件

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            void Control_Click(object sender, EventArgs e)

            {

                if (ButtonOnClick != null)

                    ButtonOnClick(sender, e);

            }

            /// <summary>

            /// 构造

            /// </summary>

            public DrawButton()

            {

                //初始化Button

                InitButton();

            }

            /// <summary>

            /// 构造带初始坐标

            /// </summary>

            /// <param name="x1"></param>

            /// <param name="y1"></param>

            /// <param name="x2"></param>

            /// <param name="y2"></param>

            public DrawButton(int x1, int y1, int x2, int y2)

            {

                base.Rectangle = new System.Drawing.Rectangle(

                    x1, y1,

                    x2 - x1, y2 - y1);

                InitButton();

            }

            /// <summary>

            /// xml加载时刻

            /// </summary>

            /// <param name="x"></param>

            public override void ReadFrom(System.Xml.XmlTextReader x)

            {

                base.ReadFrom(x);

                //初始化Button

                InitButton();

            }

            /// <summary>

            /// 保存到xml时刻

            /// </summary>

            /// <param name="x"></param>

            public override void SaveTo(System.Xml.XmlTextWriter x)

            {

                base.SaveTo(x);

            }

    }

     

    b)        继承工具类,辅助类,用于注册到设计器和一些事件驱动(详细帮助请阅读SDK文档)

                            i.              编写注册的信息

        [Serializable]

        public class ToolButton : ToolRectangle

        {

            public ToolButton()

                : base()

            {

                this.Caption = "按钮";

                this.Description = "Windows 按钮组件";

                this.Key = "DrawButton";

                this.IconImage = global::ExtendLibrary.Properties.Resources.StopHS;

            }

            public override void OnMouseDown(FlowDiagrams.DrawArea drawArea, System.Windows.Forms.MouseEventArgs e)

            {

                AddNewObject(drawArea, new DrawButton(e.X, e.Y, 2, 2), this);

            }

    }

    六、        实例

    动态连线

    a)         直线

      //清空画布

                this.drawArea.ClearGraphics();

                //构造矩形

                DrawRectangle rect1 = new DrawRectangle(100, 100, 100, 100);

                rect1.Id = "A";

                DrawRectangle rect2 = new DrawRectangle(300, 100, 100, 100);

                rect2.Id = "B";

                DrawRectangle rect3 = new DrawRectangle(500, 100, 100, 100);

                rect3.Id = "C";

                //构造连线

                DrawLinkLine line1 = new DrawLinkLine();

                line1.StartObjectID = "A";  //起点对象ID

                line1.EndObjectID = "B";  //终点对象ID

                line1.StartObjectHandlePoint = DrawObjectDirection.Down; //起点对象出口方向

                line1.EndObjectHandlePoint = DrawObjectDirection.Up;  //终点对象入口方向

                line1.AutoOffset = true; //自动连线

                //加入图元素到画布

                this.drawArea.GraphicsList.Add(rect1);

                this.drawArea.GraphicsList.Add(rect2);

                this.drawArea.GraphicsList.Add(rect3);

                this.drawArea.GraphicsList.Add(line1);

                this.drawArea.GraphicsList.Add(line2);

            this.drawArea.Refresh();

    b)        曲线

    this.drawArea.ClearGraphics();

                DrawRectangle rect1 = new DrawRectangle(100, 100, 100, 100);

                rect1.Id = "A";

                DrawRectangle rect2 = new DrawRectangle(300, 100, 100, 100);

                rect2.Id = "B";

                DrawCurve line1 = new DrawCurve();

                line1.StartObjectID = "A";

                line1.EndObjectID = "B";

                line1.StartObjectHandlePoint = DrawObjectDirection.Down;

                line1.EndObjectHandlePoint = DrawObjectDirection.Up;

                line1.AutoOffset = true;

                line1.StartDistance = 80;

                line1.EndDistance = 80;

                this.drawArea.GraphicsList.Add(rect1);

                this.drawArea.GraphicsList.Add(rect2);

                this.drawArea.GraphicsList.Add(line1);

            this.drawArea.Refresh();

    c)         Bezier

                this.drawArea.ClearGraphics();

                DrawRectangle rect1 = new DrawRectangle(100, 100, 100, 100);

                rect1.Id = "A";

                DrawRectangle rect2 = new DrawRectangle(300, 100, 100, 100);

                rect2.Id = "B";

                DrawBezier line1 = new DrawBezier();

                line1.StartObjectID = "A";

                line1.EndObjectID = "B";

                line1.StartObjectHandlePoint = DrawObjectDirection.Down;

                line1.EndObjectHandlePoint = DrawObjectDirection.Up;

                line1.AutoOffset = true;

                line1.StartDistance = 80;

                line1.EndDistance = 80;

                this.drawArea.GraphicsList.Add(rect1);

                this.drawArea.GraphicsList.Add(rect2);

                this.drawArea.GraphicsList.Add(line1);

            this.drawArea.Refresh();

    遍历图对象

                //获得联合对象集合

    List<UnionObject> luos = this.drawArea.GetUnionObject("A");

                string output = "";

                foreach (UnionObject uo in luos)

                    output += "对象:A 的连接对象有:" + uo.Object.Id + " 位置:" + uo.ObjectUnionType.ToString() + "\r\n";

                MessageBox.Show(output);

    七、        外观预览



    版权信息
    作者:Chinasf
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    SpringBoot-容器启动的时候执行一些内容
    Java JVM 启动参数
    leecode刷题(9)-- 有效的数独
    leecode刷题(8)-- 两数之和
    leecode刷题(7)-- 加一
    leecode刷题(6)-- 两个数组的交集II
    leecode刷题(5)-- 只出现一次的数字
    leecode刷题(4)-- 存在重复数组
    leecode刷题(3)-- 旋转数组
    leecode刷题(2)-- 买卖股票的最佳时机
  • 原文地址:https://www.cnblogs.com/Chinasf/p/689281.html
Copyright © 2011-2022 走看看