OpenDRIVE (XODR) 的 WebAssembly 桥接:加载 WASM 脚本、将 XODR 内容注入模块并获取道路/信号/对象/隧道等数据。依赖业务提供的 window.Module(由 WASM 脚本注入)。
pnpm add @threejs-shared/wasm本包无 peer 依赖,但运行时需先通过 loadWasm(url) 加载业务提供的 WASM 脚本,该脚本会挂载 window.Module(含 cwrap、_malloc、_free、lengthBytesUTF8、stringToUTF8、onRuntimeInitialized 等)。
动态插入 script 加载 WASM 库,并在 Module.onRuntimeInitialized 完成时 resolve。
loadWasm(url: string): Promise<void>| 参数 | 类型 | 说明 |
|---|---|---|
url |
string |
WASM 库的 JS 入口 URL(如 /wasm/OdrHandle.js) |
返回值:Promise<void>,在 window.Module.onRuntimeInitialized 被调用后 resolve;若脚本已存在相同 id 则不再插入,仅等待初始化。
说明:会覆盖 window.Module.onRuntimeInitialized,在回调中先执行原有回调(若有),再 resolve(window.Module)。业务需保证 window.Module 在脚本加载后存在。
向页面插入指定 id 的 script,避免重复插入。
loadScript(src: string, id: string): Promise<HTMLScriptElement | void>| 参数 | 类型 | 说明 |
|---|---|---|
src |
string |
脚本 URL |
id |
string |
脚本元素 id,已存在则直接 resolve |
返回值:加载完成后 resolve 该 script 元素;若已存在 id 则 resolve undefined。
异常:加载失败时 reject。
以下函数均依赖已初始化的 window.Module(即先调用 loadWasm)。内部通过 Module.cwrap 调用 C/WASM 导出。
将 XODR 字符串写入 WASM 堆并调用底层 loadOpenDRIVEContent,供后续 getRoadData 等使用。
loadOpenDRIVEContent(xodr: string): void| 参数 | 类型 | 说明 |
|---|---|---|
xodr |
string |
完整 XODR 文件内容 |
说明:内部会 _malloc、stringToUTF8、调用 cwrap 封装的 loadOpenDRIVEContent、再 _free。必须先调用此函数再调用 getRoadData 等。
在已调用 loadOpenDRIVEContent 的前提下,按步长逐条获取道路数据,直到底层返回空。
getRoadData(step?: number): Promise<any[]>| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
step |
number |
1 |
步长,传给底层 getSingleRoadData(step) |
返回值:解析后的道路数据数组,每条为 getSingleRoadData 返回的 JSON 解析结果。控制台会输出 data 和 'getSingleRoadData'。
获取信号信息列表。
getXodrSignalsInfo(): Promise<any[]>返回值:底层 getSignalsInfo() 返回的 JSON 解析数组,无数据时为空数组 []。
获取对象信息列表(用于绘制或业务逻辑)。
drawXodrObjects(): Promise<any[]>返回值:底层 getObjectsInfo() 返回的 JSON 解析数组,无数据时为空数组 []。
获取桥梁绘制信息(内部调用 getBridgesDrawInfo(1))。当前实现仅 console.log 解析结果,未 return。
getBridgesDrawInfo(): Promise<any>返回值:无有效返回;若结果为 null 或包含 'null' 字符串则返回 null,否则仅打印。
获取隧道绘制信息。
getTunnelsDrawInfo(step?: number): Promise<any>| 参数 | 类型 | 说明 |
|---|---|---|
step |
number |
传给底层 getTunnelsDrawInfo(step) |
返回值:底层返回的 JSON 解析结果;若为空或包含 'null' 则返回 null,否则返回解析后的列表(或单值)。
- 函数:
loadWasm,loadOpenDRIVEContent,getRoadData,getXodrSignalsInfo,drawXodrObjects,getTunnelsDrawInfo getBridgesDrawInfo在源码中存在,但未在index.ts中导出,若需使用需在业务侧从wasmTool自行引用或在本包index中补充导出。
- 使用
loadWasm(basePath + '/wasm/OdrHandle.js')加载并等待初始化。 - 获取 XODR 字符串(例如通过
@threejs-shared/xodr的loadXodr/loadXodrChunked)。 - 调用
loadOpenDRIVEContent(xodrString)。 - 再调用
getRoadData(step)、getXodrSignalsInfo()、drawXodrObjects()、getTunnelsDrawInfo(step)等获取数据。