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的接口,包括:

[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

表2-1 布置工具接口列表

方法 描述
onPostInstall() 工具启动响应函数
onLeftClick(BPCommandContext) 点击鼠标左键响应函数
onRightClick(BPCommandContext) 点击鼠标右键响应函数
onDynamicDraw(BPCommandContext) 动态函数
onKeyDown(BPVirtualKey,bool,bool) 键盘按下响应函数
onKeyUp(BPVirtualKey, bool, bool) 键盘弹起响应函数
onTracerChanged(BPTracerInfo) 追踪器赋值函数
onExitTool() 退出工具响应函数
callExitTool() 退出工具

表2-2 选择工具接口列表

方法 描述
onPostInstall() 工具启动响应函数
onLeftClick(BPCommandContext) 点击鼠标左键响应函数
onRightClick(BPCommandContext) 点击鼠标右键响应函数
canBeSelect(BPGraphics) 过滤函数
List getBoxSelected() 框选事件响应函数
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的外部应用中重载onStartuponShutdown,在BIMBase启动和关闭的时候定制所需的功能。

表2-3 IExternalApplication接口定义

方法 描述
onStartup(BPUIApplication) 插件加载响应函数
onShutdown(BPUIApplication) 插件卸载响应函数

onStartuponShutdown函数的参数均为BPUIApplication类型。可通过BPUIApplication访问ApplicationDocument类,并对其进行操作,示例代码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 定制菜单效果