You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Forge Viewer 2D:Leaflet转PDFLoader时带旋转的SVG标记矩阵适配问题

Autodesk Forge Viewer 2D标记跨Loader适配解决方案

问题背景

在Autodesk Forge Viewer的2D图纸中使用标记功能,标记基于Leaflet空间创建,需在PDF/矢量空间(切换至PDFLoader时)正常显示,覆盖两种场景:

  • 场景1:同一模型同时支持Leaflet与PDF加载器,默认使用LeafletLoader,用户可切换至PDFLoader
  • 场景2:仅支持PDF/矢量加载,清单无Leaflet资源,仍需渲染先前基于Leaflet空间创建并以SVG持久化的标记

当前参考相关内容,对SVG根元素应用基础变换矩阵:
M<sub>basic</sub> = N<sub>P</sub><sup>-1</sup> N<sub>L</sub> P<sub>src</sub>
其中:

  • N<sub>P</sub><sup>-1</sup>:PDF归一化矩阵的逆矩阵
  • N<sub>L</sub>:Leaflet归一化矩阵
  • P<sub>src</sub>:标记自身的放置变换矩阵

测试结果

  • 场景1:Leaflet图纸无旋转时标记显示正常,一旦LeafletLoader应用旋转/放置操作,标记出现偏移
  • 场景2:模拟PDFUtils.leafletToPdfWorld逻辑,重构包含旋转/放置信息的Leaflet边界框后,执行以下代码可正常适配页面旋转:
const NL = SceneMath.getNormalizingMatrix(null, reconstructedLeafletBBox);
// NP为PDF归一化矩阵,NP_inv为其逆矩阵
const M = NP_inv * NL * Psrc;

推测场景1的问题在于基础矩阵链未包含LeafletLoader的页面旋转/放置因子,而场景2的重构边界框已内置该信息。

核心疑问

同一Viewer从LeafletLoader切换至PDFLoader时,考虑Leaflet页面旋转/放置的正确矩阵组合是什么?具体包括:

  • 矩阵链是否需包含Leaflet放置变换(如viewer.model.getPlacementTransform())?
  • 若需包含,矩阵顺序应为M = N<sub>P</sub><sup>-1</sup> PR<sub>L</sub> N<sub>L</sub> P<sub>src</sub>或其他形式?

解决方案

修正后的矩阵组合

场景1中必须显式加入Leaflet模型的放置变换矩阵(记为PR<sub>L</sub>),正确的矩阵链顺序为:
M = N<sub>P</sub><sup>-1</sup> * PR<sub>L</sub> * N<sub>L</sub> * P<sub>src</sub>

关键API与坐标约定

  1. 获取Leaflet放置变换矩阵:
    通过viewer.model.getPlacementTransform()获取LeafletLoader应用的旋转、平移等空间调整矩阵,该矩阵包含页面的旋转角度、偏移信息。
  2. 归一化矩阵获取:
    • Leaflet归一化矩阵N<sub>L</sub>:调用SceneMath.getNormalizingMatrix(null, leafletBBox),其中leafletBBox是LeafletLoader加载的原始边界框(未应用放置变换前的边界)。
    • PDF归一化矩阵N<sub>P</sub>:调用SceneMath.getNormalizingMatrix(null, pdfBBox),pdfBBox为PDFLoader加载的图纸边界框;其逆矩阵N<sub>P</sub><sup>-1</sup>通过matrix.invert()生成。
  3. 矩阵运算顺序说明:
    矩阵变换遵循从右到左的执行顺序:先应用标记自身的放置变换P<sub>src</sub>,再将坐标归一化到Leaflet空间N<sub>L</sub>,接着应用Leaflet的页面放置变换PR<sub>L</sub>,最后将坐标转换到PDF空间N<sub>P</sub><sup>-1</sup>。

场景适配验证

  • 场景1切换Loader时:先获取当前Leaflet模型的PR<sub>L</sub>,按修正后的矩阵链计算变换矩阵并应用到SVG标记根元素,即可解决旋转/放置导致的偏移问题。
  • 场景2:重构的reconstructedLeafletBBox已整合旋转/放置信息,因此无需额外加入PR<sub>L</sub>,原矩阵逻辑即可正常工作。

内容的提问来源于stack exchange,提问作者Luis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:27:24