源码定制开发各类状态图拓扑图,关联业务对象并动态更新,类似viso绘图,但支持动态控制图形状态

浮云E绘图类似viso和亿图,支持画静态图,但提供接口API,可以动态控制所有图形的状态。提供完整的SDK开发包,支持快速定制开发各类状态图、流程图、电子图纸、平面布局图等项目源码。

使用浮云E绘图开发流程:
1. 先使用浮云E绘图编辑器.exe绘制图形,保存绘图数据文件
2. 根据业务系统需要,定义图形的业务状态,并关联上图元
3. 创建第三方C#/VC等工程,集成FYDC.dll和API接口声明(参看Demo)
4. 调用接口函数读写绘图数据,显示图形、更新图形属性,关联业务对象。

如下图网络通信状态图所示,根据实际的网络连通状态图形化实时展示各网络设备(服务器、客户机、路由器、连接线)的网络状态。

 

 

1. 绘图编辑器.exe编辑网络结构图,并保存数据文件

浮云绘图编辑器支持直线、多点线、矩形、椭圆、扇形、三角形、四角形、文字和图片基础图元。并支持基础图元之间灵活组合成复合模板图元。

编辑器详情参看:

浮云绘图2.0 开发手册 采集设备状态图、车站拓扑图等源码开发

浮云E绘图SDK,快速开发电子图纸、逻辑电路图、工业控制图、工艺流程图等绘图项目

 

 

2. 根据业务系统需要,定义图形的业务状态,并关联上图元

 设备网络状态我们可以定义为3态:未知、连通、断开。以上图为例,如“营指挥台”通断,关联着计算机图片图元、“营指挥台”文字图元、路由器指示灯、路由器与计算机的连线。这4类图元都需要3态支持。

 A. 未知态表现形式:
     a.图片状态值2
     b.文字为灰色0xC0C0C0
     c.连线为灰色0xC0C0C0
     d.指示灯圆填充灰色0xC0C0C0

 B. 连通态表现形式:
     a.图片状态值0
     b.文字为绿色0x00FF00
     c.连线为绿色0x00FF00
     d.指示灯圆填充绿色0x00FF00

 C. 断开态表现形式:
     a.图片状态值1
     b.文字为红色0x0000FF
     c.连线为灰色0x0000FF
     d.指示灯圆填充灰色0x0000FF

if (status == 0) color = 0x00FF00;          //绿 连通    
else if (status == 1) color = 0x0000FF;     //红 断开
else color = 0xC0C0C0;                      //灰 未知

为了让相关的abcd图元步调一致,可以设定图元命名如下规则:
A(计算机image):标识为PC,名称为P01 、P02、P03...... 
B(文本名称text):标识为TX,名称为T01 、T02......
C(连接线路line或multpointline):标识为XL,名称为X01、X02......  
D(路由器指示灯ellipse):标识为SI,名称为S01、S02......

 

 

 

 名称后缀相同,标识一个通路的图元,需同步状态更新。代码如下所示:

String pcName = pc.Name;                   
String shortName = pcName.Substring(1);    // P02 -> 02
String txName = "T" + shortName;           // 02 -> T02
String xlName = "X" + shortName;           // 02 -> X02
String siName = "S" + shortName;           // 02 -> S02

 

3. 创建业务工程项目,集成绘图组件DLL

创建自己的业务工程项目,引入绘图组件:

A. 拷贝FYEDC.dll到exe目录下

B. 然后复制FYEDC.cs文件里的浮云绘图DLL接口函数列表到自己工程文件,即可调用。

(注意,需要设置项目平台为x86)

浮云E绘图工程项目集成绘图组件DLL

 

4. 使用API操作图元,并动态更新状态

 A. 可自己封装C#绘图操作类,如下所示:

    public class FYEDCView
    {
        private IntPtr hShapeCanvas = IntPtr.Zero;
        private Panel panel = null;
        private List<ShapeElement> shapeElementList;

        public void Create(Panel panel)
        {
            this.panel = panel;
            hShapeCanvas = IFYDC.NewFYEDC();
            IFYDC.CreateFYEDC(hShapeCanvas, panel.Handle,0,0, panel.Width, panel.Height);
        }
        public void Release()
        { 
            if(hShapeCanvas != null)
            {
                shapeElementList.Clear();
                IFYDC.DeleteFYEDC(hShapeCanvas);
                hShapeCanvas = IntPtr.Zero;
            }
        }
        public bool Open(String fileName)
        {
            IFYDC.LoadShapes(hShapeCanvas, fileName);

            int virBackColor = IFYDC.GetBackColor(hShapeCanvas);
            IFYDC.SetNoClientColor(hShapeCanvas, virBackColor);

            return true;
        }

        ......
        ......
     }

B. 创建加载绘图数据

 

 

 

        private void btnLoadNetwork_Click(object sender, EventArgs e)
        {
            ......

            if (dcView != null)
            {
                dcView.Release();
                dcView = null;
            }
            dcView = new FYEDCView();
            dcView.Create(this.panel1);

            String stationFileName = System.Environment.CurrentDirectory + "\\3 通信网络状态图.txt";
            dcView.Open(stationFileName);
            dcView.Load();
            dcView.SetRcvMsgWnd(this);      //如果不接收绘图区的鼠标消息,则不需要此行

            InitPC();                       //模拟初始化业务系统对象
        }

C. 根据业务对象状态,动态更新各图元展示

        private void UpdatePCRelateDevStatus(int pcId, int status)
        {//(image)计算机PC-P01  (text)文本名称TX-T01  (line或multpointline)连接线路XL-X01  (ellipse)路由器指示灯SI-S01
            int color = 0;
            if (status == 0) color = 0x00FF00;          //绿 连通      (TODO:实际项目根据业务需要,定义状态值和展示效果)
            else if (status == 1) color = 0x0000FF;     //红 断开
            else color = 0xC0C0C0;                      //灰 未知

            PC pc = pcList.ElementAt(pcId);
            String pcName = pc.Name;                   
            String shortName = pcName.Substring(1);    // P02 -> 02
            String txName = "T" + shortName;           // 02 -> T02
            String xlName = "X" + shortName;           // 02 -> X02
            String siName = "S" + shortName;           // 02 -> S02

            foreach (ShapeElement sa in dcView.GetShapeList())
            {
                if(sa.Name == pcName)    //image图元,改变图索引号
                {
                    dcView.SetImgStatus(sa.Handle, status);      //本次绘图时3态图定义:,0工作、1故障、2未知
                }
                else if(sa.Name == txName)  //text图元,改变文字颜色
                {
                    dcView.SetFontColor(sa.Handle, color);
                }
                else if(sa.Name == xlName)  //line或multpointline,改变线条颜色 
                {
                    dcView.SetLineColor(sa.Handle, color);
                }
                else if(sa.Name == siName)  //ellipse图元,改变填充颜色
                {
                    dcView.SetFillColor(sa.Handle, color);
                }
            }
        }

大家可以下载本案例工程源码,有完整的DLL接口函数再次封装、业务对象关联、定制更新状态和图形展示形态等功能模块。浮云E绘图中级Demo_关联业务对象_动态更新状态.zip

浮云E绘图,既支持类似viso、亿图画图(绘制静态图形),更支持快速二次开发,关联业务对象,实时更新各线、块、文字、图片的状态。如有更特殊的需要,支持驻场定制开发。

浮云E绘图完整SDK3.2下载:浮云E绘图SDK3.2海量绘图模板,简单好用。支持快速开发状态图、电路原理图、平面布局图源码-图像处理文档类资源-CSDN下载

posted @ 2022-06-20 16:59  浮云绘图  阅读(175)  评论(0)    收藏  举报