小庄
小庄
发布于 2025-10-28 / 13 阅读

BIMBase新建项目

开发环境:

  1. 安装 VS2019、MFC

  2. 安装 BIMBase建模软件2025R1.0_SDK

  3. 安装 BIMBase建模软件2025R1.0

新建项目

  • 打开Visual Studio 2019,单击“创建新项目”→“MFC动态链接库 ”

  • DLL类型:“MFC扩展DLL”

头文件设置

pch.h文件

// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。

#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"

#endif //PCH_H


// 图形平台基础数据头文件
#include "BPExportMacros.h"
#include "PKPMExportMacros.h"
#include "P3DDC/P3DDCAPI.h"
#include "P3DGeomObject/P3DGeomObjectPublicAPI.h"

// BIMBase Publish API头文件
#include "JsonCpp/JsonCppAPI.h"
#include "BPBase/BPBaseAPI.h"
#include "BPDisplay/BPDisplayAPI.h"
#include "BPData/BPDataAPI.h"
#include "BPDataCore/BPDataCoreDef.h"
#include "BPDataCore/BPDataCoreAPI.h"
#include "BPDataCore/BPPlacement.h"
#include "BPDataCore/BPDomainDataInitManager.h"
#include "BPDataCore/BPEntitySymbologyEvent.h"

#include "BPInteraction/BPInteractionAPI.h"
#include "BPFrame/BPFrameAPI.h"
#include "BPSolidCore/BPSolidCoreAPI.h"
#include "BPBase/BPPlatformAPI.h"

// 专业平台头文件
#include "TgGe/TgGe.h"
//#include "PBClashDetection/PBClashDetectionAPI.h"
//#include "PBClashDetection/ClashDetection.h"
#include "PBBimCore/PBBimCoreAPI.h"
#include "PBBimCore/PBAxisElement.h"
#include "BPApp/PBBimAppAPI.h"
#include "PBBimCore/PBBimSchemaManager.h"
#include "PBPlatform/PBPlatformAPI.h"
#include "PBBimCore/PBClippingEvent.h"
#include "PBBimUtilities/rapidjson/document.h"
#include "PBBimUtilities/rapidjson/stringbuffer.h"
#include "PBBimUtilities/rapidjson/Writer.h" 
#include "BPUIFrameWork/BPUIFrameWorkAPI.h"
#include "BPUIFrameWork/BPUIFrameWorkUtil.h"
#include "BPUIFrameWork/BPNewDockContainer.h"
#include "BPUIFrameWork/BPNewDockManager.h"
#include "BPUIFrameWork/RButtonClickItem.h"
#include "BPUIFrameWork/BPViewRButtonClickListener.h"
#include "BPUIFrameWork/BPViewRButtonClickListenerCenter.h"
#include "BPApp/PBToolSettingManager.h"
#include "PBBimUtilities/PBimsErrExceptionUtil.h"
#include "PBBimTools/PBBimToolsAPI.h"
#include "BPPrimaryElement/BPHatchVardef.h"
#include "BPPrimaryElement/BPPrimaryGeomAPI.h"
#include "BPPrimaryElement/BPHatchDefine.h"
#include "BPPrimaryElement/BPHatch.h"
#include "BPPrimaryElement/BPHatchPattern.h"
#include "BPPrimaryElement/BPHatchPatternManager.h"

pch.cpp文件

// pch.cpp: 与预编译标头对应的源文件

#include "pch.h"

// 当使用预编译的头时,需要使用此源文件,编译才能成功。
#pragma comment (lib, "P3DDC.lib")
#pragma comment (lib, "P3DGeomBase.lib")
#pragma comment (lib, "P3DGeomObject.lib")
#pragma comment (lib, "BPDataCore.lib")
#pragma comment (lib, "TgGe.lib")
#pragma comment (lib, "BPPlatform.lib")
#pragma comment (lib, "BPSolidCore.lib")
#pragma comment (lib, "BPDataExt.lib")
#pragma comment (lib, "JsonCpp.lib")
#pragma comment (lib, "BPDrawingCommon.lib")
#pragma comment (lib, "BPUIFrameWork.lib")
#pragma comment (lib, "BPApp.lib")
#pragma comment (lib, "BPApp.lib")
#pragma comment (lib, "BPMaterialConfig.lib")
#pragma comment (lib, "BPDataCore.lib")
#pragma comment (lib, "BPParametricBase.lib")
#pragma comment (lib, "BPPrimaryElement.lib")
#pragma comment (lib, "BPPluginManager.lib")
#pragma comment (lib, "BPCoordInput.lib")
#pragma comment (lib, "BPProjectTree.lib")


#ifdef DEBUG
#pragma comment (lib, "WDUiD.lib")
#else
#pragma comment (lib, "WDUi.lib")
#endif

属性设置

  • VS打开 "属性管理器"→“Release | x64” 上右键 → "添加现有属性表" → 选择SDK示例项目中的 “BimBaseSDK.props” 文件

  • 编译项目测试,没有问题就会生成 "E:\Develop\BIMBase\BIMBase建模软件2025R1.0_SDK V1.6\bin\Release\platform\狼牙.COM.dll"

添加测试命令

新建helloBimbase.cpp

#include "pch.h"

void HelloBIMBase()
{
	AfxMessageBox(L"Hello www.狼牙.com");
}

AutoDoRegisterFunctionsBegin
BIMBase::BPToolsManager::registerFun(_T("helloBIMBase"), &HelloBIMBase);
AutoDoRegisterFunctionsEnd

修改dllmain.cpp文件,最后编译生成dll

// dllmain.cpp : 定义 DLL 的初始化例程。
//

#include "pch.h"
#include "framework.h"
#include <afxwin.h>
#include <afxdllx.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

static AFX_EXTENSION_MODULE 狼牙COMDLL = { false, nullptr };


#include "BPPluginManager/BPPluginManagerApi.h"
class BPPluginDemo :public BIMBase::Plugin::BPPluginFactory
{
public:
	BPPluginDemo() {};
	virtual ~BPPluginDemo() {};

protected:
	virtual void _onLoadPlugin(CWnd* curMainFrame)
	{
		// load assembly list defined in *.plugin file
		auto vecAssembly = BIMBase::Plugin::BPPluginManager::getInstance().getCurPluginAssmebly();
		for (auto& it : vecAssembly)
		{
			loadPluginAssembly(it);
		}
	}
	virtual void _onUnLoadPlugin(::BIMBase::Core::BPProjectR curProject) {};
	virtual void _initPluginInformation(BIMBase::Plugin::PluginInformation& pluginInfomation)
	{
		pluginInfomation.m_wsPluginDescribe = L"www.狼牙.com";
	}
};
static BPPluginDemo _pluginDemo;


extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
	// 如果使用 lpReserved,请将此移除
	UNREFERENCED_PARAMETER(lpReserved);

	if (dwReason == DLL_PROCESS_ATTACH)
	{
		TRACE0("狼牙.COM.DLL 正在初始化!\n");

		// 扩展 DLL 一次性初始化
		if (!AfxInitExtensionModule(狼牙COMDLL, hInstance))
			return 0;

		BIMBase::Plugin::BPPluginManager::getInstance().registerPlugin(&_pluginDemo);
		// 将此 DLL 插入到资源链中
		// 注意:  如果此扩展 DLL 由
		//  MFC 规则 DLL (如 ActiveX 控件)隐式链接到,
		//  而不是由 MFC 应用程序链接到,则需要
		//  将此行从 DllMain 中移除并将其放置在一个
		//  从此扩展 DLL 导出的单独的函数中。  使用此扩展 DLL 的
		//  规则 DLL 然后应显式
		//  调用该函数以初始化此扩展 DLL。  否则,
		//  CDynLinkLibrary 对象不会附加到
		//  规则 DLL 的资源链,并将导致严重的
		//  问题。

		new CDynLinkLibrary(狼牙COMDLL);

	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		TRACE0("狼牙.COM.DLL 正在终止!\n");

		BIMBase::Plugin::BPPluginManager::getInstance().unRegisterPlugin();

		// 在调用析构函数之前终止该库
		AfxTermExtensionModule(狼牙COMDLL);
	}
	return 1;   // 确定
}

加载插件

安装SDK时,会自动在C:\ProgramData\PKPM\BIMBase\Plugins\SDK类别\SDK版本号\c++plugin路径下放置一个默认的plugin文件(安装完SDK后,C盘会默认配置,注意有些电脑ProgramData文件夹是隐藏状态),用于插件加载。其中路径里SDK类别为不同类型的软件,如lite/pro/Traffic版本等,lite是指BIMBase建模软件Lite-模型浏览器这款软件;pro是指BIMBase建模软件,例如BIMBase建模软件2024R1.0;Traffic是指交通版建模软件,例如BIMBase建模软件2025R1.0。示例中下载的BIMBase建模软件2025R1.0,所以插件加载在pro这个路径下。SDK版本号,即SDK安装包上所标识版本号。可通过修改plugin配置文件来加载自己的插件。范例中基于的SDK版本号为V1.6,加载具体流程参考

"C:\ProgramData\PKPM\BIMBase\Plugins\Pro\V1.6\c++plugin\SecondDevConfig_TestCPP.plugin"文件修改

<?xml version="1.0" encoding="utf-8"?>
<BIMBasePlugins>
	<Plugin>
		<!-- 插件名称。标签不可缺少,值不可为空。插件名称要小于128字符-->
		<Name>狼牙</Name>
		<!-- 插件描述。标签不可缺少,值可以为空-->
		<Description>狼牙.com</Description>
		<!-- 开发商信息。标签不可缺少,值可为空-->
		<VendorId>狼牙.com</VendorId>
		<!-- 插件开发标识。标签不可缺少,值不可为空。需要去dev.pkpm.cn申请pluginId-->
		<PluginId>d7bef6d7-9dbb-db5d-b5ef-5e35dfdebad7</PluginId>
		<!-- 插件研发基于BIMBase的版本,默认不用修改 -->
		<PluginSDKVersion>1.6.0</PluginSDKVersion>
		<!-- 插件的版本记录。标签不可缺少,值不可为空。格式要求x.x.x,由插件研发者维护,便于管理插件版本-->
		<PluginVersion>1.0.0</PluginVersion>
		<!-- 插件入口DLL。标签不可缺少,值不可为空。填写入口插件dll全路径-->
		<EntryAssembly>E:\Develop\BIMBase\BIMBase建模软件2025R1.0_SDK V1.6\bin\Release\platform\狼牙.COM.dll</EntryAssembly>
		<!-- 其他Dll列表。需填写dll全路径。标签可缺少,值可以为空-->
		<AssemblyList>
			<Assembly></Assembly>
		</AssemblyList>
		<!-- Schema的路径。标签不可缺少,值可以为空。填写schema文件所在的文件夹路径-->
		<SchemaPath></SchemaPath>
		<!-- SchemaVersion的版本。标签不可缺少,值可以为空。格式要求x.x,若是不符合规则,插件则加载信息失败-->
		<SchemaVersion></SchemaVersion>
		<!-- 界面配置文件。标签可缺少,值可以为空。若需要在软件启动界面配置新模块,则需要配置MajorConfig文件(SDK包中有模板),并在此指定全路径-->
		<!-- MajorConfig文件命名格式要求:MajorConfig_XXX.xml 前缀MajorConfig + 各自专业名称。-->
		<MajorConfig></MajorConfig>
		<!-- 加载菜单。标签可缺少,值可以为空。填写菜单dll的全路径-->
		<Ribbon></Ribbon>
		<!-- 插件作用的模块。标签不可缺少,值不可为空。指定后可在特定模块加载插件。多个使用","隔开,如“电气,BIMBase”,若为All,则作用所有模块-->
		<ActionChDomainKeys>All</ActionChDomainKeys>
		<!-- 插件加载状态。标签不可缺少,值可为空,空则为false -->
		<LoadStatus>true</LoadStatus>
	</Plugin>
</BIMBasePlugins>

测试命令

  • 打开软件 → 输入 “HELLOBIMBASE” 命令,弹窗如下窗口


评论