浮云E绘图提供完整的SDK开发包,支持快速定制开发各类状态图、流程图、电子图纸、平面布局图等项目源码。支持状态数据定义可配置,后期免维护。

使用浮云E绘图开发流程:
1. 使用浮云E绘图编辑器(类似viso绘图)画静态图,并保存为本地绘图数据文件
2. 业务状态配置化,适应各类状态图,后期代码免修改
3. 新建第三方C#/VC等工程,集成FYDC.dll(参看Demo项目源码)
4. 调用API接口函数创建加载图形,关联业务对象,动态更新展示效果。

如下图工控采集状态图所示,根据实际的采集设备工作状态图形化实时展示。

1. 使用绘图编辑器画静态图,并保存数据文件

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

编辑器详情参看:浮云E绘图SDK3.0,快速开发电路图、电子图纸、工业控制流程图、工艺流程图等绘图项目_浮云绘图的博客-CSDN博客浮云E绘图是一款功能实用、操作简便,提供完整的SDK,支持状态图、电子图纸、逻辑电路图、工业控制系统、工艺流程图等绘图项目快速二次开发(如有特殊需求,可以驻场定制开发)。通过线段、矩形、圆形、三角形、扇形、多点线、文字、图片等基础图形的绘制组合,可以满足诸多绘图场景的需要。...https://blog.csdn.net/fyhhack/article/details/125107217https://blog.csdn.net/fyhhack/article/details/125107217

2. 业务数据定义配置化,支持各类状态图,后期无需开发代码

业务对象对应的图形可以是直线、多电线、矩形、圆、三角形、扇形、文字、图片等图元,这个图元有各自的属性值,根据不同的属性值有不同的绘图展示效果。如下图所示矩形图元的属性项,我们可以把需要修改的属性组合成某种状态的展示形式。

如在下图中间所示,修改矩形线条宽度和颜色;下图右侧图所示,修改矩形填充颜色,即可表示不同的状态的不同图形展示效果。

本Demo设计了一个比较通用的状态配置定义文件示例,如下所示。

一般线条,在初始绘图基础上通过修改线的颜色、(宽度)、虚实风格表示不同状态。如电路断开可用虚线或者红颜色线,未知状态可用用灰色线等。

一般块类(矩形、圆、三角形、扇形中间区域),在初始绘图基础上,可用控制填充颜色以及是否填充。块类图元的边框也是线条,属性也可以控制。

我们可以定义【状态图配置示例.txt】如下所示:

;;线类型名:状态数N;状态0颜色值,线宽,虚实;状态1颜色值,线宽,虚实......状态N颜色值,线宽,虚实
LT1:3;12632256,1,0;65280,1,0;255,3,0
LT2:5;12632256,1,1;65280,2,0;255,2,0;16711680,2,0;16711935,1,0 ;;块类型名:状态数N;状态0是否填充,填充颜色;状态1是否填充,填充颜色......状态N是否填充,填充颜色
AT1:2;0,0;1,65280
AT2:5;0,0;1,65280;1,255;1,16711680;16711935,1

此配置文件定义可以用在多个项目里。有不同的业务状态需要,也可以丰富定义。真正的做到后续状态项目之需要编辑器画图+定义配置文件即可,而不需要开发/修改软件代码(更不需要重新发布安装软件)。

“LT2:5;12632256,1,1;65280,2,0;255,2,0;16711680,2,0;16711935,1,0”的具体意义是:线类状态LT2有5种状态,线条灰色(12632256==GRG(C0,C0,C0))-线宽1-虚线(1);线条绿色(65280==GRG(0,FF,00))-线宽2-实线(0)......

定义好了业务状态及其展示效果配置文件,在使用浮云绘图编辑器画图时,只需要把业务属性(标识Title)设为LT2,此图元即有了5种状态。另外业务系统通过业务属性(名称Name)与该图元关联,实时更新状态值5态(0~4),即可以按定义动态更新此图元的展示效果。

// 作者:浮云绘图
// 联系:QQ 316868127namespace FYEDrawDemo_Senior
{public abstract class BaseStatus {public String TypeName { set; get; }public int StatusCount { set; get; }public abstract void AddStatus(string sParam, char separator);public abstract void SetStatus(FYECMDCView dcView, ShapeElement shape, int status);public abstract void Clear();}public class BaseParam { }public class LineParam : BaseParam{public int Color { set; get; }public int Width { set; get; }public int Style { set; get; }public LineParam(int color, int width, int style){this.Color = color;this.Width = width;this.Style = style;}}public class AreaParam : BaseParam{public int Fill { set; get; }public int Color { set; get; }public AreaParam(int fill, int color){this.Fill = fill;this.Color = color;}}public class CompParam : BaseParam{public int LineColor { set; get; }public int LineWidth { set; get; }public int LineStyle { set; get; }public int FillColor { set; get; }public CompParam(int lineColor,int lineWidth, int lineStyle, int fillColor){this.LineColor = lineColor;this.LineWidth = lineWidth;this.LineStyle = lineStyle;this.FillColor = fillColor;}}public class LineStatus : BaseStatus{private List<LineParam> staList = new List<LineParam>();public List<LineParam> StatusList { get { return staList; } }public override void AddStatus(string sParam, char separator){//状态0颜色值,线宽,虚实int color;int width;int style;string[] arr = sParam.Split(separator);Debug.Assert(arr.Length == 3);color = int.Parse(arr[0]);width = int.Parse(arr[1]);style = int.Parse(arr[2]);LineParam param = new LineParam(color, width, style);staList.Add(param);}public override void SetStatus(FYECMDCView dcView, ShapeElement shape, int status){dcView.SetLineColor(shape, staList[status].Color);dcView.SetLineWidth(shape, staList[status].Width);dcView.SetLineStyle(shape, staList[status].Style);}public override void Clear(){staList.Clear();}}public class AreaStatus : BaseStatus{private List<AreaParam> staList = new List<AreaParam>();public List<AreaParam> StatusList { get { return staList; } }public override void AddStatus(string sParam, char separator){//状态0是否填充,填充颜色int fill;int color;    string[] arr = sParam.Split(separator);Debug.Assert(arr.Length == 2);fill = int.Parse(arr[0]);color = int.Parse(arr[1]);AreaParam param = new AreaParam(fill, color);staList.Add(param);}public override void SetStatus(FYECMDCView dcView, ShapeElement shape, int status){dcView.SetIsFill(shape, staList[status].Fill);dcView.SetFillColor(shape, staList[status].Color);}public override void Clear(){staList.Clear();}}public class CompStatus:BaseStatus{private List<CompParam> staList = new List<CompParam>();public List<CompParam> StatusList { get { return staList; } }public override void AddStatus(string sParam, char separator){//状态0是否填充,填充颜色int lColor;int lWidth;int lStyle;int fColor;string[] arr = sParam.Split(separator);Debug.Assert(arr.Length == 4);lColor = int.Parse(arr[0]);lWidth = int.Parse(arr[1]);lStyle = int.Parse(arr[2]);fColor = int.Parse(arr[3]);CompParam param = new CompParam(lColor,lWidth,lStyle, fColor);staList.Add(param);}public override void SetStatus(FYECMDCView dcView, ShapeElement shape, int status){dcView.SetLineColor(shape, staList[status].LineColor);dcView.SetLineWidth(shape, staList[status].LineWidth);dcView.SetLineStyle(shape, staList[status].LineStyle);dcView.SetFillColor(shape, staList[status].FillColor);}public override void Clear(){staList.Clear();}}public class StatusCfg{private List<BaseStatus> staList = new List<BaseStatus>();public List<BaseStatus> StatusList { get { return staList; } }public void Load(string fileName){var file = File.Open(Environment.CurrentDirectory + "\\"+ fileName, FileMode.Open);List<string> txtRows = new List<string>();using (var stream = new StreamReader(file,System.Text.Encoding.GetEncoding("utf-8"))){while(!stream.EndOfStream){txtRows.Add(stream.ReadLine());}}file.Close();//;;线类型名:状态数N;状态0颜色值,线宽,虚实;状态1颜色值,线宽,虚实......状态N颜色值,线宽,虚实//LT1:3;12632256,1,0;65280,1,0;255,1,0//LT2:5;12632256,1,1;65280,2,0;255,2,0;16711680,2,0;16711935,1,0 //;;块类型名:状态数N;状态0是否填充,填充颜色;状态1是否填充,填充颜色......状态N是否填充,填充颜色//AT1:2;0,0;1,65280//AT2:5;0,0;1,65280;1,255;116711680;16711935,1//;;类型名称: 状态数;状态0线颜色,线宽度,填充颜色;状态1线颜色,线宽度,填充颜色......//CMT1:3;12632256,1,0;65280,1,0,0,0;255,1,0//CMT2:5;12632256,1,0;65280,1,0;255,1,0;16711680,2,12632256;16711935,2,65280foreach (string row in txtRows){if (row.Length < 2 || row.StartsWith(";;")) continue;string[] str1 = row.Split(':');string typeName = str1[0];string str2 = str1[1];string[] str3 = str2.Split(";");int count = int.Parse(str3[0]);Debug.Assert(str3.Length>=count+1);BaseStatus sta = null;if(typeName.Contains("LT")){sta = new LineStatus();}else if(typeName.Contains("AT")){sta = new AreaStatus();}else if(typeName.Contains("CMT")){sta = new CompStatus();}for (int i = 0; i < count; i++){string sp = str3[1 + i];sta.AddStatus(sp, ',');}sta.TypeName = typeName;sta.StatusCount = count;staList.Add(sta);}}public void SetStatus(FYECMDCView dcView, ShapeElement shape, int status){foreach(BaseStatus sta in staList){if(sta.TypeName == shape.Title){sta.SetStatus(dcView, shape, status);}}}public void Clear(){foreach(BaseStatus bs in staList){bs.Clear();}staList.Clear();}}
}

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

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

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

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

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

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. 加载状态定义配置文件

完整代码在上面第2节。​

注意,本Demo绘图时,只给第1个采集柜的第1行图元设置了AT1状态定义,给第2机柜的第1行图元设置了AT2状态定义。其他未设置,大家可以自行设置,也可以修改状态配置文件,查看效果。

C. 绘图数据,具体源码参考Demo工程

D. 根据业务对象状态,以及状态配置,动态刷新图形

        private Random rand = new Random();private void timer1_Tick(object sender, EventArgs e){//实际情况是有一套业务系统和绘图系统,本项目是绘图系统。画的图元都是业务系统存在的业务对象,实时状态数据也是来自业务系统。//此Demo不构建完整的业务系统,直接随机改变绘图系统状态值,从而更新绘图的线条、区域、文字等展示效果List<ShapeElement> shapes = cmdcView.GetShapeList();List<BaseStatus> statuss = staCfg.StatusList;foreach (ShapeElement shape in shapes){foreach(BaseStatus sta in statuss){if(shape.Title == sta.TypeName){//实际情况浮云绘图编辑器画图配置的状态数据是由业务系统的业务对象状态数决定的//此Demo仅演示绘图系统不构建完整的业务系统,此处的图元实时状态值直接从图元可用状态数随机int curStatus = rand.Next(sta.StatusCount);if(curStatus != shape.Status){shape.Status = curStatus;staCfg.SetStatus(cmdcView, shape, curStatus);}}}}}

大家可以下载本案例工程源码,有完整的DLL接口函数再次封装、配置文件定义、配置文件加载和数据关联、定制更新状态和图形展示形态等功能模块。

浮云E绘图高级Demo_业务配置化_复合图元动态更新_电路原理图更新-图像处理文档类资源-CSDN下载

浮云E绘图,既支持类似viso、亿图画图(绘制静态图形),更支持快速二次开发,关联业务对象,实时更新各线、块、文字、图片的状态,可通过配置状态定义txt文件,支持各类绘图项目的免代码开发和维护。如有更特殊的需要,可以驻场定制开发。

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

各类工控设备状态图、车站状态图源码开发,状态数据可配置,后期无需代码开发 浮云E绘图高级Demo相关推荐

  1. 利用CMake编译OpenCV-4.1.2源码,使其可以在VS2012下进行图像处理开发的记录(因缺少OpenBLAS未成功)

    目前,OpenCV已经发展到OpenCV4.X了. OpenCV是以CMake 作为项目架构系统的开源项目. 在OpenCV4中,只为我们CMake编译好了64位的适用于vc14(Visual Stu ...

  2. php 第三方认证中心 框架,仿百度钱包源码红色优享钱包网贷借款源码/接入第三方认证,去后门修复缺陷ThinkPHP开发...

    源码说明 非常漂亮红色网贷借款源码,接入第三方认证,ThinkPHP框架,无加密,无授权,可封装APP 已集成支付.短信.查询借款,支持购买会员.签到,状态短信通知 看上去挺好看的这UI就发出来给大家 ...

  3. 人脸识别算法源码SDK开发包人证比对二次开发检测核验开发包

    人脸识别算法源码SDK开发包人证比对二次开发检测核验开发包 ID:89120059902830359120170116926

  4. unity5.X简易的3d跑酷游戏源码。支持安卓+IOS双端 C#语言开发。

    unity5.X简易的3d跑酷游戏源码.支持安卓+IOS双端 C#语言开发.拿来学习研究和二次开发都很不错. 完整源码下载 unity5.X简易的3d跑酷游戏源码.支持安卓+IOS双端C#语言开发-U ...

  5. 卡牌类手游源码 刀塔传奇 免费分享 基于cocos2d-x3.0引擎开发

    卡牌类手游源码 刀塔传奇 免费分享 基于cocos2d-x3.0引擎开发 https://bbs.wxrym.com/thread-90118-1-1.html (出处: 外星人源码论坛) 今天给大家 ...

  6. 【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )

    文章目录 安卓直播推流专栏博客总结 一. RTMP 协议 二. RTMP 协议使用 三. RTMPDump 源码下载 四. RTMPDump 源码交叉编译 五. RTMPDump 源码导入 Andro ...

  7. 源码安装mysql主从_mysql源码安装和主从同步配置

    mysql源码安装和主从同步配置 mysql介绍: MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL ...

  8. 适合货架、机械、零件等实体产品公司的成品网站源码,带数据完整版本

    源码简介 一个非常完整的成品网站代码,ui设计还不错.源码完整可用,测试过了. 适合货架.机械.零件.金属制品生产加工等实体产品公司使用的网站源码,带数据完整版本. 源码是asp开发的,数据库是acc ...

  9. 基于hadoop的小红书电商网站用户行为分析系统毕业论文+任务书+开题报告+答辩PPT+知网查重报告+项目源码及Mysql数据

    基于hadoop的小红书电商网站用户行为分析系统毕业论文+任务书+开题报告+答辩PPT+知网查重报告+项目源码及Mysql数据库-99源码网,程序代做,代写程序代码,代写编程,代写Java编程,代写p ...

最新文章

  1. 技术开发人员适应其他部门提需求的一个经验
  2. Docker基本组成 和 基本命令
  3. 数据预处理 泰坦尼克号_了解泰坦尼克号数据集的数据预处理
  4. dubbo 分组后,dubbo-admin 看不到服务
  5. 内存恶鬼drawRect - 谈画图功能的内存优化
  6. “Alexa,喂我吃草莓”机器人女仆现身,会做饭还会喂食
  7. 圆为什么有360度?
  8. pb中控件变颜色_基于GDI+技术开发工业仪表盘控件
  9. Iris数据集免费下载
  10. tinymce富文本编辑器(vue)
  11. t999主页劫持/篡改木马
  12. Required request body is missing 问题解决
  13. hadoop 爬虫_这些不用编程的爬虫工具,你一定要知道
  14. 公农历互转js库-solarlunar-es
  15. 直接下载 * http://softforspeed.51xiazai.cn/down/BaiduNetdisk_6.9.7.4.exe
  16. android 自定view 网状结构图
  17. int[]是什么类型?
  18. c语言负2是偶数吗,负2是偶数还是奇数 奇偶数有正负之分吗
  19. 关于ios代码混淆的一些注意事项
  20. HTML_hao123

热门文章

  1. 申请uniapp离线打包时的AppKey
  2. 【多元】多元正态分布,聚类分析
  3. Python中的*args
  4. 安装apache的时候遇到的问题:Errors reported here must be corrected before the service can be started.
  5. php如何修改联系人信息,PHP 制作通讯录(四)
  6. 【平差软件学习---科傻】 一、认识和安装科傻
  7. python的html模块,python模块之HTMLParser
  8. 王国维《人间词话》风格评析七律之冠《登高》-ChatGPT调试
  9. 初学APM 行用性能管理/监控
  10. 数据结构:完全二叉树开胃菜小练习