浮云绘图编辑器:图形元素的操作和接口代码
浮云绘图是一款完整的绘图软件SDK,包含绘图编辑器、绘图组件DLL、API示例以及说明文档,能够高效实现各类状态图、电子图纸、流程图和平面布局图的开发。该套件的基础绘图单元涵盖直线、矩形方块以及椭圆(包括圆形),本文将对这三类基本图形元素的具体操作方法进行详尽说明,并介绍SDK二次开发过程中涉及的接口函数及其应用实例。对于一些特殊需求,若仅需进行小范围功能调整,可提供免费修改服务;如涉及更多改动,则可支持驻场开发。
以下为浮云绘图的几个示例展示,其具备对线条、区域、文字及图片等元素的颜色、虚实线样式、尺寸以及状态等属性进行动态控制的功能。

浮云绘图实例:车站设施状态示意图

工业控制数据采集装置运行状态可视化示例:浮云绘图应用

1. 浮云绘图开源软件之直线
作为各类绘图软件中最基本的图形元素,直线在实际应用中具有多种功能,例如用于连接点、绘制电路路径、表达关系、划分区域等,并且能够通过组合形成多种几何图形,如三角形、五边形等。
线条所具备的特性涵盖线宽、色彩、线型(包括虚线与隐藏状态)以及端点样式等多个方面。
1.1 直线的画法
绘制直线的操作流程如下:首先在工具栏中选择直线图标按钮,随后在绘图区域单击鼠标左键,接着拖动鼠标进行实时绘线,当松开鼠标后即可完成一条直线的绘制。如需调整该直线的属性,可双击所绘制的直线,此时将弹出属性设置对话框,在其中可对线条的宽度、颜色、线型、端点样式等参数进行设定。

浮云编辑器中绘制直线的操作方法

浮云绘图编辑器中线条属性配置界面的说明如下:1>在绘制直线时,首先需确定左上角的起始点,随后鼠标移动过程中所形成的点为右下角的位置(左上点与右上点共同构成一个矩形区域),最终通过连接矩形的左上角与右下角完成直线绘制。若起始点的y坐标值高于终点的y坐标值,则直线的高度将表现为负数。2>有关旋转与角度的问题。实际上,直线的基础结构是矩形,当该矩形进行旋转操作时,会选取其四个顶点并将其映射回xy坐标系,形成一个新的矩形(如图示)。随着旋转角度的变化,矩形将逐渐接近正方形形态。而正方形在旋转过程中,两个固定点之间的连线角度保持不变,仅长度会发生变化。因此,在特定角度范围内,直线的旋转操作才能正常进行。

矩形旋转导致形变的示意图
应对这一问题的方法是采用浮云绘图中的四边形图元,通过四个顶点进行旋转操作,而非直接对矩形进行旋转,从而实现任意角度的旋转且不发生形变。
1.2 直线API接口定义及使用实例
以C#语言开发的API示例程序(完整浮云绘图SDK开发及源码下载地址)为例
有关直线功能的接口定义如下:
[DllImport("FYEDC.dll", EntryPoint = "SetLineColor", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetLineColor(IntPtr canvas, IntPtr shape, int color);
[DllImport("FYEDC.dll", EntryPoint = "GetLineColor", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetLineColor(IntPtr shape);
[DllImport("FYEDC.dll", EntryPoint = "SetLineStyle", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetLineStyle(IntPtr canvas, IntPtr shape, int style);
[DllImport("FYEDC.dll", EntryPoint = "GetLineStyle", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetLineStyle(IntPtr shape);
[DllImport("FYEDC.dll", EntryPoint = "SetLineWidth", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetLineWidth(IntPtr canvas, IntPtr shape, int width);
[DllImport("FYEDC.dll", EntryPoint = "GetLineWidth", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetLineWidth(IntPtr shape);
[DllImport("FYEDC.dll", EntryPoint = "SetLineEndMode", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetLineEndMode(IntPtr canvas, IntPtr shape, int mode);
[DllImport("FYEDC.dll", EntryPoint = "GetLineEndMode", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetLineEndMode(IntPtr shape);
与直线相关的接口函数应用示例如下所示:
private void btnLine_Click(object sender, EventArgs e)
{
IntPtr shape = GetShapeAt(m_shapeCanvas, m_shapeSeqNum); //获得图元对象
if (shape != IntPtr.Zero)
{
// 获取数据
LinePropForm frm = new LinePropForm();
frm.m_iSeqNum = m_shapeSeqNum;
frm.m_iLineColor = GetLineColor(shape);
frm.m_iLineWidth = GetLineWidth(shape);
frm.m_iLineStyle = GetLineStyle(shape);
frm.m_iEndMode = GetLineEndMode(shape);
// 设置数据
if (DialogResult.OK == frm.ShowDialog())
{
m_shapeSeqNum = frm.m_iSeqNum; // 可以修改默认的图元序号
if (GetShapeCount(m_shapeCanvas) - 1 < m_shapeSeqNum)
m_shapeSeqNum = GetShapeCount(m_shapeCanvas) - 1;
if (m_shapeSeqNum < 0)
m_shapeSeqNum = 0;
IntPtr shape2 = GetShapeAt(m_shapeCanvas, m_shapeSeqNum);
if (shape2 != IntPtr.Zero)
{
SetLineColor(m_shapeCanvas, shape2, frm.m_iLineColor);
SetLineWidth(m_shapeCanvas, shape2, frm.m_iLineWidth);
SetLineStyle(m_shapeCanvas, shape2, frm.m_iLineStyle);
SetLineEndMode(m_shapeCanvas, shape2, frm.m_iEndMode);
}
}
}
}
2. 浮云绘图开源软件之方块(矩形)
矩形方块作为浮云绘图系统中的第二个基本图形元素,具备绘制矩形和正方形的功能,通常用于表示框体、区域块以及设备容器等逻辑对象。
矩形方块的属性主要涵盖线条、区域及文字三个部分。
线条属性包括线宽、颜色以及线型的虚实变化;
区域属性涉及是否对内部区域进行填充以及填充所采用的颜色;
文字属性则包含所显示的文字内容、文字的可见性设置、字体颜色、字体样式以及字体尺寸。
2.1 矩形方块的画法
矩形绘制步骤:首先在左侧工具栏中选择矩形图标按钮,随后在绘图区域内单击鼠标左键,接着拖动鼠标以实时绘制矩形轮廓,当完成绘制后松开鼠标。如需进一步调整属性,可双击所绘制的矩形,此时将弹出属性设置对话框,用于修改矩形线条的宽度、颜色及线型等参数,并可设定填充区域是否启用及其颜色,同时还能对文字内容、字体颜色以及字号等进行编辑和设置。

浮云绘图中的矩形方块绘制技巧
上述图形采用灰底搭配网格线作为背景,目的是更清晰地展现区域填充情况。

浮云绘图中用于配置矩形方块属性的对话框界面
2.2 矩形API接口定义及使用实例
以C#语言实现的API示例程序(完整浮云绘图SDK开发及源码下载地址)
与矩形图形元素相关的接口定义如下(用于配置矩形线条特性的接口与前一节中直线接口的设置方式相同):
[DllImport("FYEDC.dll", EntryPoint = "SetFillColor", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetFillColor(IntPtr canvas, IntPtr shape, int color);
[DllImport("FYEDC.dll", EntryPoint = "GetFillColor", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetFillColor(IntPtr shape);
[DllImport("FYEDC.dll", EntryPoint = "SetIsFill", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetIsFill(IntPtr canvas, IntPtr shape, int isFill);
[DllImport("FYEDC.dll", EntryPoint = "GetIsFill", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetIsFill(IntPtr shape);
[DllImport("FYEDC.dll", EntryPoint = "SetFontColor", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetFontColor(IntPtr canvas, IntPtr shape, int color);
[DllImport("FYEDC.dll", EntryPoint = "GetFontColor", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetFontColor(IntPtr shape);
[DllImport("FYEDC.dll", EntryPoint = "SetFontType", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetFontType(IntPtr canvas, IntPtr shape, string type);
[DllImport("FYEDC.dll", EntryPoint = "GetFontType", CallingConvention = CallingConvention.Cdecl)]
public static extern void GetFontType(IntPtr shape, ref byte type);
[DllImport("FYEDC.dll", EntryPoint = "SetFontSize", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetFontSize(IntPtr canvas, IntPtr shape, int size);
[DllImport("FYEDC.dll", EntryPoint = "GetFontSize", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetFontSize(IntPtr shape);
[DllImport("FYEDC.dll", EntryPoint = "SetShapeText", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetShapeText(IntPtr canvas, IntPtr shape, string text);
[DllImport("FYEDC.dll", EntryPoint = "GetShapeText", CallingConvention = CallingConvention.Cdecl)]
public static extern void GetShapeText(IntPtr shape, ref byte text);
[DllImport("FYEDC.dll", EntryPoint = "SetTextVisible", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetTextVisible(IntPtr canvas, IntPtr shape, int isShow);
[DllImport("FYEDC.dll", EntryPoint = "GetTextVisible", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetTextVisible(IntPtr shape);
浮云绘图DLL组件所提供的矩形接口API应用示例如下所示:
private void btnArea_Click(object sender, EventArgs e)
{
IntPtr shape = GetShapeAt(m_shapeCanvas, m_shapeSeqNum); //获得图元对象
if (shape != IntPtr.Zero)
{
// 获取数据
AreaPropForm frm = new AreaPropForm();
frm.m_iSeqNum = m_shapeSeqNum;
frm.m_iFillColor = GetFillColor(shape);
frm.m_isFill = GetIsFill(shape);
// 设置数据
if (DialogResult.OK == frm.ShowDialog())
{
m_shapeSeqNum = frm.m_iSeqNum; // 可以修改默认的图元序号
if (GetShapeCount(m_shapeCanvas) - 1 < m_shapeSeqNum)
m_shapeSeqNum = GetShapeCount(m_shapeCanvas) - 1;
if (m_shapeSeqNum < 0)
m_shapeSeqNum = 0;
IntPtr shape2 = GetShapeAt(m_shapeCanvas, m_shapeSeqNum);
if (shape2 != IntPtr.Zero)
{
SetFillColor(m_shapeCanvas, shape2, frm.m_iFillColor);
SetIsFill(m_shapeCanvas, shape2, frm.m_isFill);
}
}
}
}
private void btnText_Click(object sender, EventArgs e)
{
IntPtr shape = GetShapeAt(m_shapeCanvas, m_shapeSeqNum); //获得图元对象
if (shape != IntPtr.Zero)
{
// 获取数据
TextPropForm frm = new TextPropForm();
frm.m_iSeqNum = m_shapeSeqNum;
byte[] bys = new byte[200];
lock (bys)
{
GetShapeText(shape, ref bys[0]); //获取图元Title
}
String sTxt = ByteToString(bys);
frm.m_sContent = sTxt;
frm.m_isDisplay = GetTextVisible(shape);
// 设置数据
if (DialogResult.OK == frm.ShowDialog())
{
m_shapeSeqNum = frm.m_iSeqNum; // 可以修改默认的图元序号
if (GetShapeCount(m_shapeCanvas) - 1 < m_shapeSeqNum)
m_shapeSeqNum = GetShapeCount(m_shapeCanvas) - 1;
if (m_shapeSeqNum < 0)
m_shapeSeqNum = 0;
IntPtr shape2 = GetShapeAt(m_shapeCanvas, m_shapeSeqNum);
if (shape2 != IntPtr.Zero)
{
SetShapeText(m_shapeCanvas, shape2, frm.m_sContent);
SetTextVisible(m_shapeCanvas, shape2, frm.m_isDisplay);
}
}
}
}
private void btnFont_Click(object sender, EventArgs e)
{
IntPtr shape = GetShapeAt(m_shapeCanvas, m_shapeSeqNum); //获得图元对象
if (shape != IntPtr.Zero)
{
// 获取数据
FontPropForm frm = new FontPropForm();
frm.m_iSeqNum = m_shapeSeqNum;
frm.m_iFontColor = GetFontColor(shape);
frm.m_iFontSize = GetFontSize(shape);
byte[] bys = new byte[200];
lock (bys)
{
GetFontType(shape, ref bys[0]);
}
String sTxt = ByteToString(bys);
frm.m_sFontStyle = sTxt;
// 设置数据
if (DialogResult.OK == frm.ShowDialog())
{
m_shapeSeqNum = frm.m_iSeqNum; // 可以修改默认的图元序号
if (GetShapeCount(m_shapeCanvas) - 1 < m_shapeSeqNum)
m_shapeSeqNum = GetShapeCount(m_shapeCanvas) - 1;
if (m_shapeSeqNum < 0)
m_shapeSeqNum = 0;
IntPtr shape2 = GetShapeAt(m_shapeCanvas, m_shapeSeqNum);
if (shape2 != IntPtr.Zero)
{
SetFontType(m_shapeCanvas, shape2, frm.m_sFontStyle);
SetFontColor(m_shapeCanvas, shape2, frm.m_iFontColor);
SetFontSize(m_shapeCanvas, shape2, frm.m_iFontSize);
}
}
}
}
3. 浮云绘图开源软件之椭圆(圆)
椭圆作为浮云绘图系统中的第三个基本图形元素,能够绘制多种类型的椭圆以及标准圆形,常用于表示区域、信号灯、球体等逻辑实体。
椭圆所具备的属性与矩形方块相同,主要涵盖线条、区域以及文字三个方面的设置。
线条方面包括线宽、颜色以及线型的虚实变化;
区域方面则涉及是否对内部进行填充以及填充所采用的颜色;
文字部分则包含具体显示的内容、是否启用文字显示功能、字体颜色、字体样式以及字体尺寸。
3.1 椭圆的画法
参照绘制矩形的步骤进行操作。

开源绘图工具浮云中涉及的椭圆功能
3.2 椭圆API接口定义及使用实例
可参照矩形接口的使用方式。
浮云绘图的基础图形元素还涵盖三角形、四边形、多点连线、扇形区域、文本内容以及图像素材等。关于具体的操作方法和相关API的使用示例,建议查阅后续章节内容。若需要进一步个性化定制基础图形元素(小幅调整可免费提供支持),甚至进行现场驻场开发服务,也可提出相应需求。
