快速定制开发CAD电路图(电气原理图)详细流程及源码 浮云E绘图
时间:2024-01-04 20:37:01
电气设备的工作原理和各电气元件之间的关系,有利于快速掌握设备的工作原理,分析电气线路,消除电路故障,编程。现有的基于浮云E绘图SDK(包括电路图编辑器 绘图DLL组件 API Demo 电子元件模板库 说明文档),可快速绘制开发CAD电路图(电气原理图),并且实时更新图形各元件的状态。
1. 创建图元模板
继电器、传感器、变压器等复杂器、变压器等复杂部件, 浮云E绘图编辑器支持创建复合图元模板,后续直接模板图元绘图更加灵活方便。
创建和使用复合图元的操作过程:菜单视图 -> 模板绘图 -> 工具栏按钮新模板 --> 在绘图区画复合图元 -> 工具栏按钮保持模板数据文件,即完成复合图元库的制作。请参见下一节。
绘制复合图元流程:绘制第一个基本图元 -> 填写第一图元业务属性标识 -> 画第二个基本图元 -> ... -> 画N个基础图元 -> 最后画一个矩形图元 -> 设置最后的矩形图元属性:不填充、线条隐藏 -> 本次选择所有基本图元,点组合就是完成复合图元的制作。
以上图第一个模板图元无极继电器1为例,画第一个基本图元(圆) -> 设置圆标识属性(无极继电器1) -> 左边画一条直线 -> 画右侧直线 ->画矩形框住这个圆 2条直线 ->设置矩形属性:不填充,隐藏线条 -> 框选住1圆 2线段 1矩形,点击组合完成。然后可以继续画其他复合模板图元。然后可以继续画其他复合模板图元。
第一个基本图元的标识内容是整个复合图元的名称,将在加载动态创建复合图元操作按钮时设置为按钮名称。
2. 复合图元加载
上一步功能可以为电路原理图、工艺流程图、工业控制图等领域创建复合图元模板库。菜单视图 -> 模板绘图 -> 工具栏按钮加载模板 -> 选择复合图元模板库数据文件 -> 检查绘图中使用的复合图元(复合图元按钮将在工具栏中动态创建)-> 点击工具栏中的复合图元按钮绘制复合图元。
3. 绘制电路原理图,保存绘图数据文件
使用浮云E绘图编辑器操作流程:工具栏按钮新建 -> 点击左侧工具栏基础图元按钮(如直线) ->画直线 -> 点击其他图元按钮(包括复合图元按钮)绘图 -> ... -> 工具栏按钮保存绘图数据文件,完成图形编辑绘制。通过自己的项目,通过自己的项目FYEDC.dll加载绘图数据文件,控制线条(颜色、虚实、宽度)、区域、文字等属性值。
4. 基于创建新项目FYEDC.dll控制图纸组件接口
下载浮云E绘图SDK3.包括电路图编辑器 绘图DLL组件 API Demo 电子元件模板库 说明文档浮云E绘图SDK3.0.快速开发开源电路图、电子图、工业控制系统图-桌面系统文档资源-CSDN下载
4.1 打开浮云E绘图API Demo查看工程源码FYEDC.dll接口定义
C#和VC 调用dll步骤、接口指针、字符串等对应关系_浮云画博客-CSDN博客_vc 调用dll
Demo有VC版和C#版,下面列出C#部分导出函数定义版本(完整版本)Demo工程源码)
#region 浮云绘图DLL 接口 //组件接口 [DllImport("FYEDC.dll", EntryPoint = "NewFYEDC", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr NewFYEDC(); [DllImport("FYEDC.dll", EntryPoint = "CreateFYEDC", CallingConvention = CallingConvention.Cdecl)] public static extern void CreateFYEDC(IntPtr canvas, IntPtr hParentWnd, int x, int y, int w, int h); [DllImport("FYEDC.dll", EntryPoint = "LoadShapes", CallingConvention = CallingConvention.Cdecl)] public static extern void LoadShapes(IntPtr canvas, string fileName); [DllImport("FYEDC.dll", EntryPoint = "DeleteFYEDC", CallingConvention = CallingConvention.Cdecl)] public static extern void DeleteFYEDC(IntPtr canvas); // 图元对象 [DllImport("FYEDC.dll", EntryPoint = "GetShapeCount", CallingConvention = CallingConvention.Cdecl)] public static extern int GetShapeCount(IntPtr canvas); [DllImport("FYEDC.dll", EntryPoint = "GetShape", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr GetShape(IntPtr canvas, string type, string name); [DllImport("FYEDC.dll", EntryPoint = "GetShapeAt", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr GetShapeAt(IntPtr canvas, int index); [DllImport("FYEDC.dll", EntryPoint = "GetmCompElementCount", CallingConvention = CallingConvention.Cdecl)] public static extern int GetmCompElementCount(IntPtr editor, string type, string name); [DllImport("FYEDC.dll", EntryPoint = "GetCompElement", CallingConvention = CallingConvention.Cdecl)] public static extern int GetCompElement(ref IntPtr diagrams, IntPtr editor, string type, string name); [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); [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 = "SetGridShow", CallingConvention = CallingConvention.Cdecl)] public static extern void StGridShow(IntPtr canvas, int bShow);
// 存为图片
[DllImport("FYEDC.dll", EntryPoint = "SaveToPicture", CallingConvention = CallingConvention.Cdecl)]
public static extern int SaveToPicture(IntPtr canvas, string fileName);
#endregion 浮云绘图DLL 接口
4.2 查看浮云E绘图API Demo接口调用示例
以C# API Demo控制线条属性为例
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);
}
}
}
}
4.3 创建自己的新工程,调用FYEDC.dll控制图元状态
通过绘图时设置图元的标识(Title)、名称(Name)业务属性,与自己项目的业务对象关联上,就可以找到每一个图元对象,并控制图元的线、区域、文字、图片的显示状态。