Loading
0

3D模型格式转换工具HOOPS Exchange如何初始化使用?

初始化HOOPS交换

本指南解释了如何在您的项目中加载和初始化HOOPS Exchange以供使用。确保您已经按照上一个教程中所示配置了项目。

HOOPS Exchange是一个通过C API使用的库,以头文件和二进制文件的形式提供。主二进制文件是一个名为A3DLIBS.dll、libA3DLIBS.so或A3DLIBS.dylib的共享库,具体取决于您的操作系统。对于iOS,它是一个名为A3DLIBS.a的静态库。

要加载C语言库,您可以在应用程序构建期间链接它,也可以在运行时使用LoadLibrary (Windows)或dlopen(GNU编译器)等系统调用手动加载它。HOOPS Exchange使用显式加载方法。

交换标头

在您的程序中,负责初始化HOOPS Exchange的源文件必须包含头文件A3DSDKLoader.h。只有一个源文件应加载HOOPS Exchange,并且它应包含A3DSDKLoader.h。其他项目文件可以包含单个源文件(如A3DSDKConvert.h),或使用一劳永逸的A3DSDKIncludes.h来包含整个API。

Linux和macOS开发人员请注意:HOOPS Exchange使用动态加载。如果您在Linux或macOS上使用HOOPS Exchange,请确保您的编译器配置了HAVE_DLFCN_H预处理器标志,并使用链接器选项链接到DLFCN -ldl。

加载库

要加载库,请使用库文件夹的路径调用函数A3DSDKLoadLibrary。例如:

A3DBool loaded = A3DSDKLoadLibraryA(PATH_TO_A3DLIBS_DIR);
if (loaded) { // HOOPS Exchange Loaded}

提供许可证

加载库后,第一个调用的函数是A3DLicPutUnifiedLicense().此函数提供库运行所需的许可证密钥:

A3DStatus result = A3DLicPutUnifiedLicense(HOOPS_LICENSE);
if (result == A3D_SUCCESS) { // License provided}

如果在没有有效许可证的情况下进行任何API调用,则会返回A3D_INVALID_LICENSE。

初始化库

HOOPS Exchange的初始化是执行内部初始化的库端操作。A3DDllInitialize()使用主要版本号和次要版本号进行调用。使用A3D_DLL_MAJORVERSION和A3D_DLL_MINORVERSION指定与头文件相同的版本。例如:

A3DStatus result = A3DDllInitialize(A3D_DLL_MAJORVERSION, A3D_DLL_MINORVERSION);

if (result == A3D_SUCCESS) {// HOOPS Exchange initialized}

初始化是一项一次性操作。如果多个程序加载相同的HOOPS Exchange二进制文件,则初始化是共享的。该函数A3DDllIsInitialized()检查库是否已经初始化。

终止库

当您的应用程序完成HOOPS Exchange后,请调用A3DDllTerminate()以处置任何使用的资源。每个应用程序应该调用一次,并且应该与对 的调用配对A3DDllInitialize()。

卸载库

要卸载库,请使用A3DSDKUnloadLibrary().这会将所有函数指针重置为0并卸载库文件。

A3DSDKUnloadLibrary()

代码示例

下面是一个用C编写的最小工作示例,演示了如何初始化HOOPS Exchange:

#define INITIALIZE_A3D_API
#include 
int main(int argc, char* argv[])
{
    // Load the library
    A3DBool loaded = A3DSDKLoadLibraryA(PATH_TO_A3DLIBS_DIR);
    assert(loaded);

    // Initialize and terminate if not already done
    A3DBool must_initialize = !A3DDllIsInitialized();

    if (must_initialize) {
        A3DStatus result = A3DLicPutUnifiedLicense(HOOPS_LICENSE);
        assert(result == A3D_SUCCESS);

        result = A3DDllInitialize(A3D_DLL_MAJORVERSION, A3D_DLL_MINORVERSION);
        assert(result == A3D_SUCCESS);
    }
    // HOOPS Exchange ready to use!
    if (must_initialize) {
        A3DDllTerminate();
    }
    // Unload the library
    A3DSDKUnloadLibrary()
    return EXIT_SUCCESS;
}

包含INITIALIZE_A3D_API宏以提供必要的功能。请记住仅将其包含在一个源文件中,以避免多重定义错误。

特别规则

对于iOS版本,HOOPS Exchange提供HOOPS Parasolid Bridge作为扩展库。它允许HOOPS Exchange和Parasolid之间的转换。在iOS上将HOOPS Exchange与Parasolid Bridge一起使用时,定义A3DAPI_NO_IOS_HEPB_STUB宏以避免链接器错误问题。

#define A3DAPI_NO_IOS_HEPB_STUB
#include 
// HOOPS Exchange Initialization

A3DSDKLoader.h头文件提供函数并定义函数指针。确保仅将其包含在一个源文件中以避免错误。

HOOPS ExchangeLoader类

对于C++应用程序,您可以使用该类HOOPSExchangeLoader来简化HOOPS Exchange的初始化和处置。该类确保HOOPS Exchange在其生命周期内进行初始化,并在实例超出范围时自动释放。

申请HOOPS Exchange试用               HOOPS中文网

慧都科技是Tech Soft 3D-HOOPS在中国区的唯一增值服务商,负责HOOPSCEETRON试用,咨询,销售,技术支持,售后,旨在为企业提供一站式的3D开发解决方案。如果您的企业目前也有3D数据格式转换3D Web轻量化渲染的需求,欢迎咨询在线客服申请3D 轻量化引擎HOOPS的60天免费试用。

↓↓扫码添加客服微信,及时获取“HOOPS技术”支持↓↓