2.3.1 插件注册及加载
如果想在BIMBase中调用插件,需要对插件进行注册。安装完SDK,会在 C:\ProgramData\PKPM\BIMBase\Plugins\SDK类别\SDK版本号\c#plugin 路径下放置一个默认的plugin文件,用于插件加载。其中路径里SDK类别为不同类型的软件,例如lite/pro版本等,示例中下载的BIMBase建模软件,所以插件加载在pro这个路径下。SDK版本号,可在软件启动后,“关于”功能中查看。plugin文件放置位置示意如图1-9(第一章)所示,以及plugin文件配置1-3(第一章)所示,范例中基于的SDK版本号为V1.2,加载具体流程参考附录一。
2.3.2 外部命令
BIMBase API是建立在BIMBase产品的基础之上的,它是一个类库,需要在BIMBase运行时才能工作。通过这套强大的API,可以添加用于基于BIMBase API开发的插件来扩展和增强BIMBase的功能和应用。BIMBaseNet.UI.dll
程序集包含了所有操作和定制UI的接口,包括:
IBPFunctionCommand
相关接口IBPPointCommand
相关接口IBPSelectCommand
相关接口IExternalApplication
相关接口- 菜单类及其子类
想通过BIMBase API来访问和扩展BIMBase,需要在用户自己的插件中实现特殊的接口,这些接口包括IBPFunctionCommand
、IBPPointCommand
、IBPSelectCommand
和IExternalApplication
。本章将详细介绍这些接口以及它们的注册方式。
插件开发者可以通过IBPFunctionCommand
、IBPPointCommand
、IBPSelectCommand
来添加自己的命令,BIMBase通过.plugin文件来识别和加载外部插件。 - 基本原理
BIMBase中注册的命令可通过命令名直接被激活,一旦插件被加载,外部命令被创建出来。外部命令被集成到BIMBase之后,也可以通过自定义菜单项来进行调用。
BIMBase API中的外部命令包括外部函数、基本工具、选择工具三类。外部函数与视图不进行交互,基本工具及选择工具可与视图交互,都可在视图中输入点,选择工具还可选择构件进行过滤。本章将详细介绍这三种命令的实现方式。 - 外部函数
IBPFunctionCommand
是BIMBase API用户通过外部命令来扩展BIMBase时在外部命令中实现的接口。用户必须在实现IBPFunctionCommand
接口时指定BPExternalCommandAttribute
属性,用于定义该命令的名称,该名称可在命令行直接输入,也可在菜单上加载。IBPFunctionCommand
只有一个抽象函数onExcute,重载这个函数来实现IBPFunctionCommand
。onExcute
函数将作为外部命令的主函数被调用,示例代码2-1演示如何在onExcute
函数中取到BIMBase的Application和Document。
[BPExternalCommandAttribute(name = "TestDemo")]
public class BPDemoCommand:IBPFunctionCommand
{
public override void onExcute(BPCommandContext context){
BPDocument doc = BPApplication.singleton().activeDocument;
base.onExcute(context);
}
}
代码2-1 在onExcute中获取Application和Document
- 基本工具
BIMBase API用户可通过IBPPointCommand来实现用户所需的布置工具,在软件中布置所需的构件。IBPPointCommand提供了各种接口用于实现在不同时机需要实现的功能。
表2-1 布置工具接口列表
方法 | 描述 |
---|---|
onPostInstall() | 工具启动响应函数 |
onLeftClick(BPCommandContext) | 点击鼠标左键响应函数 |
onRightClick(BPCommandContext) | 点击鼠标右键响应函数 |
onDynamicDraw(BPCommandContext) | 动态函数 |
onKeyDown(BPVirtualKey,bool,bool) | 键盘按下响应函数 |
onKeyUp(BPVirtualKey, bool, bool) | 键盘弹起响应函数 |
onTracerChanged(BPTracerInfo) | 追踪器赋值函数 |
onExitTool() | 退出工具响应函数 |
callExitTool() | 退出工具 |
- 选择工具
BIMBase API用户可通过IBPSelectCommand来实现用户所需的选择工具。IBPSelectCommand提供了各种接口用于实现在不同时机需要实现的功能。
表2-2 选择工具接口列表
方法 | 描述 |
---|---|
onPostInstall() | 工具启动响应函数 |
onLeftClick(BPCommandContext) | 点击鼠标左键响应函数 |
onRightClick(BPCommandContext) | 点击鼠标右键响应函数 |
canBeSelect(BPGraphics) | 过滤函数 |
List |
框选事件响应函数 |
onClickSelected(BPGraphics, BPCommandContext) | 点选事件响应函数 |
onKeyDown(BPVirtualKey, bool, bool) | 键盘按下响应函数 |
onKeyUp(BPVirtualKey, bool, bool) | 键盘弹起响应函数 |
onTracerChanged(BPTracerInfo) | 追踪器赋值函数 |
onExitTool() | 退出工具响应函数 |
callExitTool() | 退出工具 |
2.3.3 外部应用
插件开发者同样可以通过实现IExternalApplication来添加自己的应用。BIMBase同样通过.plugin文件来识别和加载实现IExternalApplication的外部插件。IExternalApplication
有两个抽象函数onStartup和onShutdown
。用户可以通过在实现了IExternalApplication
的外部应用中重载onStartup
和onShutdown
,在BIMBase启动和关闭的时候定制所需的功能。
表2-3 IExternalApplication接口定义
方法 | 描述 |
---|---|
onStartup(BPUIApplication) | 插件加载响应函数 |
onShutdown(BPUIApplication) | 插件卸载响应函数 |
onStartup
和onShutdown
函数的参数均为BPUIApplication
类型。可通过BPUIApplication
访问Application
和Document
类,并对其进行操作,示例代码2-2演示如何在onStartup实现定制UI。
public class ApplicationDemo : IExternalApplication
{
public override void onStartup(BPUIApplication uiApp)
{
//添加分类Category
BIMBaseCS.UI.tagsize size = new BIMBaseCS.UI.tagsize();
size.cx = 32;
size.cy = 32;
BPUIApplication.singleton().uiManager.uiRibbonPanel.ribbonAddCategory("测试分类", 16, 16, size, size, -1);
//在分类Category下添加面板
IntPtr panelTmp = IntPtr.Zero;
Bitmap bmp = Resourcel.triangle;
panelTmp = bmp.GetHicon();
BPUIApplication.singleton().uiManager.uiRibbonPanel.ribbonAddPanel("测试分米", "测试面板", panelTmp, 1, -1);
//在指定分类下的指定面板添加按钮
BPUIApplication.singleton().uiManager.uiRibbonPanel.ribbonAddButton("测试分类", "测试面板", "画线", "TestExPlaceLine", panelTmp);
base.onStartup(uiApp);
}
public override void onShutdown(BPUIApplication uiApp)
{
base.onShutdown(uiApp);
}
}
代码2-2 IExternalApplication实现定制菜单

图2-6 定制菜单效果