BIMBase API是建立在BIMBase产品基础之上的,需要在BIMBase运行时才能工作。通过这套强大的API,可以添加基于BIMBase API开发的插件来扩展和增强BIMBase的功能和应用。本章将详细介绍如何基于BIMBase API开发自己的插件。
2.3.1 插件注册及加载
可参考1.3.3至1.3.5讲解
2.3.2 外部命令及注册
插件开发者可以通过函数注册实现自己的命令。
- 基本原理
BIMBase中注册的命令可通过命令名直接被激活,一旦插件被加载,外部命令被创建出来。外部命令被集成到BIMBase之后,也可以通过自定义菜单项来进行调用。BIMBase API中的外部命令包括外部函数、基本工具、选择工具三类。外部函数与视图不进行交互,基本工具及选择工具可与视图交互,都可在视图中输入点,选择工具还可选择构件进行过滤。本章将详细介绍这三种命令的实现方式。 - 外部函数
用户可通过实现自己的函数并注册到平台来实现自己的命令,注册时需定义该命令的名称,该名称可在命令行直接输入,也可在菜单上加载。示例代码2-1演示了如何注册自己的函数命令。
void HelloBIMBase()
{
AfxMessageBox(L"Hello BIMBase!");
}
AutoDoRegisterFunctionsBegin
BPToolsMessager::registerFun(_T("HelloBIMBase"), &HelloBIMBase);
AutoDoRegisterFunctionsEnd
代码2-1 注册自己的函数命令
- 基本工具
BIMBase API用户可通过重写类BPPrimitiveTool
来实现用户所需的布置工具,在软件中布置所需的构件。BPPrimitiveTool
提供了各种接口用于实现在不同时机需要实现的功能。
表2-1 布置工具接口列表
方法 | 描述 |
---|---|
_onPostInstall() | 工具启动响应函数 |
_onDataButton(BPBaseButtonEventCP) | 按下鼠标左键响应函数 |
_onDataButtonUp(BPBaseButtonEventCP) | 抬起鼠标左键响应函数 |
_onResetButton(BPBaseButtonEventCP) | 点击鼠标右键响应函数 |
_onModelMotion(BPBaseButtonEventCP) | 鼠标移动响应函数 |
_onStartDrag(BPBaseButtonEventCP) | 按住鼠标左键拖拽开始 |
_onEndDrag(BPBaseButtonEventCP) | 按住鼠标左键拖拽结束 |
_onMouseWheel(BPBaseMouseWheelEventCP) | 鼠标滚轮滚动响应函数 |
_onDynamicFrame(BPBaseButtonEventCP) | 动态绘制函数 |
_onKeyTransition(bool ,P3DVirtualKey, bool, bool) | 键盘响应函数 |
_onTracerChanged(BPTracerInfo) | 追踪器赋值函数 |
_exitTool() | 退出工具响应函数 |
- 选择工具
BIMBase API用户可通过重写类BPEntitySelectSetTool
来实现用户所需的选择工具。BPEntitySelectSetTool
提供了各种接口用于实现在不同时机需要实现的功能。
表2-2 选择工具接口列表
方法 | 描述 |
---|---|
_onPostInstall() | 工具启动响应函数 |
_onDataButton(BPBaseButtonEventCP) | 按下鼠标左键响应函数 |
_onDataButtonUp(BPBaseButtonEventCP) | 抬起鼠标左键响应函数 |
_onResetButton(BPBaseButtonEventCP) | 点击鼠标右键响应函数 |
_onModelMotion(BPBaseButtonEventCP) | 鼠标移动响应函数 |
_onStartDrag(BPBaseButtonEventCP) | 按住鼠标左键拖拽开始 |
_onEndDrag(BPBaseButtonEventCP) | 按住鼠标左键拖拽结束 |
_onMouseWheel(BPBaseMouseWheelEventCP) | 鼠标滚轮滚动响应函数 |
_onDynamicFrame(BPBaseButtonEventCP) | 动态绘制函数 |
_onKeyTransition(bool,P3DVirtualKey,bool, bool) | 键盘响应函数 |
_onTracerChanged(BPTracerInfo) | 追踪器赋值函数 |
_onPostLocate(BPPickDataCP, PStringR ) | 工具拾取实体过滤函数 |
BPEntityArrayPtr getEntityArray() | 获取拾取到的对象集 |
_exitTool() | 退出工具响应函数 |
基本工具和选择工具使用BPToolsManager::registerTool
来进行注册。