MicroStation是Bentley 工程软件系统有限公司在建筑、土木工程、交通运输、加工工厂、离散制造业、政府部门、公用事业和电讯网络等领域解决方案的基础平台。最近学习Bentley 系列软件发现该系列软件做线性工程极其方便,且该系列大都数软件都基于Microstation平台进行开发的 。Microstation二次开发有三种方法,一是利用VBA进行开发,二是利用C#进行开发叫Addins,三是利用C++进行开发叫MDL。MDL相对来说开发难度较大,但是能够实现的功能也更多。如果用C#开发,借助Visual Studio和.NET平台,开发环境配置非常方便。
本人尝试利用C#进行开发来实现在MicroStation软件中画直线。
开发平台:VS2017 .NET Framework 4.7
软件:MicroStation CE(Update 14)
添加动态链接库:
…\MicroStation\Bentley.DgnDisplayNet.dll
…\MicroStation\Bentley.DgnPlatformNET.dll
…\MicroStation\Assemblies\ECFramework\Bentley.EC.Persistence3.dll
…\ MicroStation\Assemblies\ECFramework\Bentley.ECObjects.Interop3.dll
…\MicroStation\Assemblies\ECFramework\Bentley.ECObjects3.dll
…\MicroStation\Assemblies\ECFramework\Bentley.ECSystem3.dll
…\MicroStation\Assemblies\ECFramework\Bentley.General.1.0.dll
…\MicroStation\Bentley.GeometryNET.dll
…\MicroStation\Bentley.GeometryNET.Common.dll
…\MicroStation\Bentley.GeometryNET.Structs.dll
…\MicroStation\Assemblies\Bentley.Interop.MicroStationDGN.dll
…\MicroStation\Assemblies\Bentley.MicroStation.dll
…\MicroStation\Assemblies\Bentley.MicroStation.Interfaces.1.0.dll
…\MicroStation\Assemblies\Bentley.MicroStation.Ribbon.dll
…\MicroStation\Assemblies\Bentley.MicroStation.WPF.dll
…\MicroStation\Assemblies\ECFramework\Bentley.Platform.dll
…\MicroStation\Assemblies\ECFramework\Bentley.UI.dll
…\MicroStation\Assemblies\ECFramework\Bentley.Windowing.dll
…\MicroStation\ustation.dll
主类代码:
using System.Windows.Forms;
using Bentley.Interop.MicroStationDGN;
using Bentley.MstnPlatformNET;
using Bentley.MstnPlatformNET.InteropServices;
namespace ClassLibrary2
{
internal sealed class MyAddin : AddIn
{
public static MyAddin Addin = null;
private MyAddin(System.IntPtr mdlDesc) : base(mdlDesc)
{
Addin = this;
}
protected override int Run(string[] commandLine)
{
Bentley.Interop.MicroStationDGN.Application app = Utilities.ComApp;
Point3d startPoint = app.Point3dZero();
Point3d endPoint = app.Point3dOne();
LineElement line = app.CreateLineElement2(null, startPoint, endPoint);
app.ActiveModelReference.AddElement(line);
return 0;
}
}
}