Advertisement

浮云绘图编辑器:图形元素的操作和接口代码

阅读量:

浮云绘图是一款完整的绘图软件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的使用示例,建议查阅后续章节内容。若需要进一步个性化定制基础图形元素(小幅调整可免费提供支持),甚至进行现场驻场开发服务,也可提出相应需求。

全部评论 (0)

还没有任何评论哟~