浮云E绘图提供完整的SDK开发包,支持快速定制开发各类状态图、流程图、电子图纸、平面布局图等项目源码。支持状态数据定义可配置,后期免维护。本案例工程源码,有完整的DLL接口函数再次封装、配置文件定义、配置文件加载和数据关联、定制更新状态和图形展示形态等功能模块。既支持类似viso、亿图画图(绘制静态图形),更支持快速二次开发,关联业务对象,实时更新各线、块、文字、图片的状态,可通过配置状态定义txt文件,支持各类绘图项目的免代码开发和维护。
浮云E绘图提供完整的SDK开发包,支持快速定制开发各类状态图、流程图、电子图纸、平面布局图等项目源码。支持状态数据定义可配置,后期免维护。
使用浮云E绘图开发流程:
1. 使用浮云E绘图编辑器(类似viso绘图)画静态图,并保存为本地绘图数据文件
2. 业务状态配置化,适应各类状态图,后期代码免修改
3. 新建第三方C#/VC等工程,集成FYDC.dll(参看Demo项目源码)
4. 调用API接口函数创建加载图形,关联业务对象,动态更新展示效果。
如下图工控采集状态图所示,根据实际的采集设备工作状态图形化实时展示。
1. 使用绘图编辑器画静态图,并保存数据文件
浮云绘图编辑器支持直线、多点线、矩形、椭圆、扇形、三角形、四角形、文字和图片基础图元。并支持基础图元之间灵活组合成复合模板图元。
编辑器详情参看:
浮云绘图CAD编辑器源码开发之直线、方块、圆等基础图元操作和接口定义
浮云E绘图SDK,快速开发电子图纸、逻辑电路图、工业控制图、工艺流程图等绘图项目
2. 业务数据定义配置化,支持各类状态图,后期无需开发代码
业务对象对应的图形可以是直线、多电线、矩形、圆、三角形、扇形、文字、图片等图元,这个图元有各自的属性值,根据不同的属性值有不同的绘图展示效果。如下图所示矩形图元的属性项,我们可以把需要修改的属性组合成某种状态的展示形式。
如在下图中间所示,修改矩形线条宽度和颜色;下图右侧图所示,修改矩形填充颜色,即可表示不同的状态的不同图形展示效果。
本Demo设计了一个比较通用的状态配置定义文件示例,如下所示。
一般线条,在初始绘图基础上通过修改线的颜色、(宽度)、虚实风格表示不同状态。如电路断开可用虚线或者红颜色线,未知状态可用用灰色线等。
一般块类(矩形、圆、三角形、扇形中间区域),在初始绘图基础上,可用控制填充颜色以及是否填充。块类图元的边框也是线条,属性也可以控制。
我们可以定义【状态图配置示例.txt】如下所示:
此配置文件定义可以用在多个项目里。有不同的业务状态需要,也可以丰富定义。真正的做到后续状态项目之需要编辑器画图+定义配置文件即可,而不需要开发/修改软件代码(更不需要重新发布安装软件)。
“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),即可以按定义动态更新此图元的展示效果。
namespace 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,65280
foreach (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#绘图操作类,如下所示:
B. 加载状态定义配置文件
完整代码在上面第2节。
注意,本Demo绘图时,只给第1个采集柜的第1行图元设置了AT1状态定义,给第2机柜的第1行图元设置了AT2状态定义。其他未设置,大家可以自行设置,也可以修改状态配置文件,查看效果。
C. 绘图数据,具体源码参考Demo工程
D. 根据业务对象状态,以及状态配置,动态刷新图形
大家可以下载本案例工程源码,有完整的DLL接口函数再次封装、配置文件定义、配置文件加载和数据关联、定制更新状态和图形展示形态等功能模块。
浮云E绘图高级Demo_业务配置化_复合图元动态更新.zip
浮云E绘图,既支持类似viso、亿图画图(绘制静态图形),更支持快速二次开发,关联业务对象,实时更新各线、块、文字、图片的状态,可通过配置状态定义txt文件,支持各类绘图项目的免代码开发和维护。如有更特殊的需要,可以驻场定制开发。
浮云E绘图SDK3.2海量绘图模板,简单好用。支持快速开发状态图、电路原理图、平面布局图源码-图像处理文档类资源-CSDN下载