栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Eplan Electric P8 API二次开发之项目框架的搭建详解

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Eplan Electric P8 API二次开发之项目框架的搭建详解

一、目的

本博之前写过几篇Eplan Electric P8 API二次开发的一些小的细节,诸如怎么获取当前打开的项目,怎么在当前页面中插入一个符号(Symbol)及功能(Function)等等。对怎么从头搭建一个Eplan Electric P8 API开发的Visual Studio框架,一直让读者自行百度,但本博主尝试百度后,关于这方面的描述也不是很详细,所以有必要通过本文进行一个详细的描述。

二、前提条件

本博使用的是Eplan Electric P8 2.9 + Visual Studio 2019

三、框架步骤介绍 1.打开VS2019, 创建.net Framework 类库项目

2.配置新项目

因为我使用的Eplan Electric P8 2.9, 所以选用的.NET Framework 4.7.2, 否则后面会报错,当然,后面如果报错,也可以再项目属性中修改次框架版本。项目名称可以自行定义

生成新的解决方案后,我们需要修改配置管理器,使我们的Eplan Electric P8 Addin运行在X64平台下,因为我装的是64位的Eplan,如果你用的32位,那就改为X86,

3. 修改程序集名称

在Visual Studio【解决方案资源管理器】中选择刚刚创建的项目ToolEplanAPI, 右键选择属性

在弹出的项目属性配置中,修改如下程序集名称,按照Eplan Electric P8 API的约定,必须修改为前缀是*.EplAddin.* 的名称,否则Eplan Electric P8 无法找到及加载生成的Dll Addin,所以,我们把程序集名称改为EPLAN.EplAddin.ToolEplanAPI, 这一步非常重要。

4. 添加Eplan Electric P8 API引用

在Visual Studio中选择【解决方案资源管理器】中的引用,右键选择【添加引用】打开引用管理器,

然后,点击浏览后找到Eplan的安装路径(默认是在C:Program FilesEPLANPlatform2.9.4Bin),添加所需要的DLL。

具体需要添加那些DLL,视你要开发的功能决定。
一般情况下,以下几个DLL用的比较多,必须要添加的

  1. Eplan.EplApi.AFu.dll
  2. Eplan.EplApi.Baseu.dll
  3. Eplan.EplApi.DataModelu.dll
  4. Eplan.EplApi.Guiu.dll
    当然,我建议你像我一样,使用偷懒的做法,把所有前缀为Eplan.EplApi的DLL都一次性加载进来,避免后面的麻烦。
5. 更改我们Addin程序的入口类。

Visual Studio的【解决方案资源管理器】中我们的项目下面,VS自动创建了一个名称为Class1.cs的类, 不过里面并没有内容,我们需要修改这个类,使其作为我们Addin程序的入口。
通常的情况下,我们把其名字改成和我们项目名字一样,这里,我们直接按F2将其名字改为ToolEplanAPI.cs,当弹出如下对话框时我们直接选择是。

修改成功后,我们双击ToolEplanAPI.cs
首先添加命名空间,然后,让我们的类ToolEplanAPI 添加IEplAddin接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//添加Eplan Electric P8 API需要的命名空间
using Eplan.EplApi.ApplicationFramework;

namespace ToolEpanAPI
{
    public class ToolEplanAPI:IEplAddIn
    {
    }
}

添加完接口后,IEplAddin下面出现波浪线报错,是因为我们需要实现这些接口,宇宙第一IDE Visual Studio通过点击选择可能的修补程序,实现接口,即完成了所有相应接口的方法的生成。

然后我们将其代码修改为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//添加Eplan Electric P8 API需要的命名空间
using Eplan.EplApi.ApplicationFramework;

namespace ToolEpanAPI
{
    public class ToolEplanAPI : IEplAddIn
    {
        public bool OnExit()
        {
            return true;
        }

        public bool OnInit()
        {
            return true;
        }

        public bool OnInitGui()
        {
            return true;
        }

        public bool OnRegister(ref bool bLoadOnStart)
        {
            bLoadOnStart = true;
            return true;
        }

        public bool OnUnregister()
        {
            return true;
        }
    }
}

这就是我们Eplan Electric P8 Addin的入口,也是我们Addin和Eplan P8图形交互的一个接口。需要通过本程序进行相关工具栏按钮、子菜单的添加,接下来,我们尝试添加一个子菜单(获取项目名称),通过点击该子菜单,弹出一个对话框显示当前打开的项目的名称。
所以,我们再修改以上代码,添加子菜单【获取项目名称】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//添加Eplan Electric P8 API需要的命名空间
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Gui;

namespace ToolEpanAPI
{
    public class ToolEplanAPI : IEplAddIn
    {
        public bool OnExit()
        {
            return true;
        }

        public bool OnInit()
        {
            return true;
        }

        public bool OnInitGui()
        {
            //添加子菜单【获取项目名称】并关联Action名字为【GetProjectName】的Action
            Menu oMenu = new Menu();
            oMenu.AddMenuItem("获取项目名称", "GetProjectName");
            return true;
        }

        public bool OnRegister(ref bool bLoadOnStart)
        {
            bLoadOnStart = true;
            return true;
        }

        public bool OnUnregister()
        {
            //删除子菜单
            Menu oMenu = new Menu();
            oMenu.RemoveMenuItem("获取项目名称", "GetProjectName");
            return true;
        }
    }
}

6.创建Action类

接下来,我们需要创建Action,因为将来我们可能会有很多的Action,所以,建议在项目中新建一个文件夹,命名为【EplanActions】,专门用来存放所有的Action类
在这个EplanActions文件下,新建一个Action_GetProjectName.cs类,让其继承IEplAction接口,修改代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//Eplan Electric P8 API 的命名空间
using Eplan.EplApi.ApplicationFramework;

namespace ToolEpanAPI.EplanActions
{
    class Action_GetProjectName : IEplAction
    {
        //我们要执行的Action具体动作
        public bool Execute(ActionCallingContext oActionCallingContext)
        {
            string strProjectName = FunctionLib.Lib_ProjectFunction.GetSelectedProjectName();
            MessageBox.Show(strProjectName, "ToolEplanAPI",MessageBoxButtons.OK, MessageBoxIcon.Information);
            return true;
        }

        public void GetActionProperties(ref ActionProperties actionProperties)
        {
        }

        public bool OnRegister(ref string Name, ref int Ordinal)
        {
            Name = "GetProjectName"; //Action名字,必须与我们之前设定的子菜单项设置名字一样
            Ordinal = 20;  //Action的level,通常设置为20
            return true;
        }
    }
}

7. Eplan Electric P8 Addin具体Function的编写

具体执行的动作,即我们真正要调用大量Eplan Electric P8 API 的地方,为了更好的组织大型Eplan P8 Addin项目的开发,我们需要建立一个文件夹,命名为FunctionLIb,我们在这个文件夹内建立各种类,用于分类诸如Eplan项目级别,Eplan模型级别、Eplan图形级别等各种级别的函数功能。
这些函数功能使用静态函数static,方便由各个Action调用。
本示例简单创建了一个Lib_ProjectFunction.cs,写一个最最简单的获取当前项目名称的静态函数如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Eplan Electric P8 API需要的命名空间
using Eplan.EplApi.Base;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.HEServices;

namespace ToolEpanAPI.FunctionLib
{
    class Lib_ProjectFunction
    {
        static public String GetSelectedProjectName()
        {
            SelectionSet selectionSet = new SelectionSet();
            try
            {
                return selectionSet.CurrentlyEdited.Project.ProjectFullName;
            }
            catch
            {
                return String.Empty;
            }
        }
    }
}

8. 运行及加载Addin

右键点击项目,生成成功后,在Eplan Electric P8中加载生成的EPLAN.EplAddin.ToolEplanAPI.dll


加载后,即在Utility菜单下添加了【获取项目名称】菜单项

如果已经打开了某个项目,当点击该菜单时,即会弹出如下显示项目名称的对话框

四、总结

如果需要创建自定义窗体,最好是先创建一个文件夹,然后把所有窗体创建在一个文件夹内,方便组织。
本博文最后的解决方案文件夹结构如下:

码字不易,如果您觉得对你有些帮助,麻烦点赞收藏,谢谢!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号