可视化模块的组织

简介

从中间版本 20.2 开始,ODA SDK 包含了重新组织的可视化模块。

新的可视化模块结构提高了 ODA SDK 的灵活性,并增加了应用程序开发过程中的机会。例如,您可以构建一个不包含数据库但需要渲染的应用程序,在这种情况下,您可以直接调用渲染模块。此外,您现在可以调用渲染模块分支,同时将图形输出到不同的渲染模块。一个经典的用例是应用程序调用矢量化模块来绘制现有数据库,这没有改变,可以像以前的 ODA SDK 版本一样使用,但新的模块结构为新应用程序提供了额外的可能性。

本文介绍了可视化模块和库的集合,如何正确地将应用程序与它们链接,以及如何加载这些模块。

可视化模块图

 

image2

 

  • 灰色矩形 — 所需的静态库。
  • 蓝色矩形 — 可视化应用程序所需的主要模块。
  • 绿色矩形 — 将渲染流导出为 XML 格式所需的可选模块。
  • 圆角矩形 — 不同的最终应用程序。

TrRenderBase.lib 仅用于构建渲染模块。导出模块(如本图中的 XML 导出)不需要此库来实现其功能。

从 20.2 版本开始的 ODA SDK 变更

  • TrGL2.lib 静态库变为 TrGL2.txr 渲染模块。
  • TrRenderBase.lib 是一个新的静态库,由 OpenGL ES 2.0 渲染器和矢量化器调用。
  • TrXml.txr 是一个新的渲染模块,用于将渲染流导出为 XML 文件格式。
  • XmlGLES2.txv 矢量化模块变为 TrXmlVec.tx 扩展模块。

如果您的最终应用程序仅调用 OpenGL ES 2.0 渲染,则只需考虑前两项。如果您的最终应用程序调用 XML 导出功能,则需考虑后两项。

注意:请不要忘记,在静态库配置中,所有动态库(.tx、.txv、.txr)都将成为应与最终应用程序链接的静态库。由于 WinGLES2 矢量化模块现在内部调用 TrGL2 渲染模块,因此在静态库配置中,应用程序还应在静态模块映射中注册新的渲染模块(此更改将在本文后面的“静态库配置”中进行描述)。

可视化模块说明

模块名称 模块类型 说明
TrBase.lib 静态库 包含所有与可视化相关的库和模块中使用的通用函数和类的库。
TrRenderBase.lib 静态库 包含用于构建渲染模块的通用函数和类的库。
TrVec.lib 静态库 包含构建矢量化模块所需所有基本功能的库。
TrGL2.txr 渲染模块 OpenGL ES 2.0 渲染器。
WinGLES2.txv 矢量化模块 OpenGL ES 2.0 矢量化模块(在基于 Gs 的应用程序中调用 TrGL2.txr 进行渲染)。
TrXml.txr 渲染模块 XML 导出模块。
TrXmlVec.tx 扩展 调用 TrXml.txr 渲染模块以将矢量化数据导出为 XML 格式的矢量化模块。
TrXmlIO.lib 静态库 用于打开和处理 XML 格式矢量化数据的应用程序的库,例如,加载 XML 数据并使用另一个渲染模块进行渲染。

动态库配置

渲染模块

新的渲染模块在 OdModuleNames.h 头文件中定义,该文件适用于所有基于 ODA SDK 的应用程序:

#define OdTrGL2ModuleName        L"TrGL2.txr"

#define OdTrXmlModuleName        L"TrXml.txr"

可以使用以下调用(它使用动态模块链接器)加载渲染模块:

OdTrRndRenderModulePtr pRenderModule = ::odrxDynamicLinker()->loadModule(OdTrGL2ModuleName);
矢量化模块

矢量化模块也有相同的定义:

#define OdWinGLES2ModuleName     L"WinGLES2.txv"

#define OdTrXmlVecModuleName     L"TrXmlVec.tx"

这些模块可以像任何其他矢量化模块一样加载(与以前的 ODA SDK 版本相比没有变化):

OdGsModulePtr pGs = ::odrxDynamicLinker()->loadModule(OdWinGLES2ModuleName);

静态库配置

链接库

要与 TrGL2 渲染器链接,请将以下库集添加到相关项目的 CMakeLists.txt 文件中:

${TR_TXR_GL2_LIB} ${TR_RENDER_LIB} ${TR_BASE_LIB}

将以下库集添加到链接器,以与 WinGLES2 矢量化模块链接:

${TD_TXV_GLES2_LIB} ${TR_TXR_GL2_LIB} ${TR_RENDER_LIB} ${TR_VEC_LIB} ${TR_BASE_LIB}

有一个特殊的 CMake 定义可用于避免添加这个长长的库列表。要链接 WinGLES2 矢量化所需的所有库,您只能使用 $(TD_TXV_GLES2_LIBS} CMake 定义:

set(TD_TXV_GLES2_LIBS ${TD_TXV_GLES2_LIB} ${TR_TXR_GL2_LIB} ${TR_RENDER_LIB} ${TR_VEC_LIB} ${TR_BASE_LIB})

还有一个为旧项目保留的定义;该定义链接到调用过时的 TrGL2.lib 静态库的 WinGLES2 矢量化模块:

# for compatibility with old CMakeLists
set(TR_GL2_LIB ${TR_TXR_GL2_LIB} ${TR_RENDER_LIB})

因此,如果旧项目不在 CMake 中调用非标准功能,则目前不需要在相关的 CMakeLists.txt 文件中进行特殊更改。但最好避免使用过时的 $(TR_GL2_LIB} 定义,因为它将来可能会被删除。

对于需要与 TrXml.txr 渲染模块(XML 导出)链接的库:

${TR_TXR_XML_LIB} ${TR_BASE_LIB}

要与 TrXmlVec.tx 链接,您的应用程序在链接库列表中需要以下库:

${TR_XML_VEC_LIB} ${TR_TXR_XML_LIB} ${TR_VEC_LIB} ${TR_BASE_LIB}
静态模块映射

如果应用程序调用 WinGLES2 矢量化模块,则新的渲染模块也应在静态模块映射中注册:

ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(OdTrGL2RenderModule);
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(GLES2Module);
ODRX_BEGIN_STATIC_MODULE_MAP()
  ODRX_DEFINE_STATIC_APPLICATION(OdTrGL2ModuleName,  OdTrGL2RenderModule)
  ODRX_DEFINE_STATIC_APPMODULE(OdWinGLES2ModuleName, GLES2Module)
ODRX_END_STATIC_MODULE_MAP()

WinGLES2.txv 矢量化模块的入口点是 GLES2Module,与以前的版本一样。对于 TrGL2.txr,渲染模块入口点是 OdTrGL2RenderModule。

XML 导出应用程序也是如此:

ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(OdTrXmlRenderModule);
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(TrXmlModule);
ODRX_BEGIN_STATIC_MODULE_MAP()
  ODRX_DEFINE_STATIC_APPLICATION(OdTrXmlModuleName,    OdTrXmlRenderModule)
  ODRX_DEFINE_STATIC_APPLICATION(OdTrXmlVecModuleName, TrXmlModule)
ODRX_END_STATIC_MODULE_MAP()

TrXmlVec.tx(以前是 XmlGLES2.txv)矢量化模块的入口点是 TrXmlModule,与以前的版本一样。对于 TrXml.txr,渲染模块入口点是 OdTrXmlRenderModule。

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用