如何在没有标记的情况下获取 forgeviewer 的快照

Posted

技术标签:

【中文标题】如何在没有标记的情况下获取 forgeviewer 的快照【英文标题】:How do I get a snapshot of the forgeviewer without markups 【发布时间】:2021-01-28 18:47:13 【问题描述】:

如何获取查看器的快照并将其单独保存为图像?

谢谢

【问题讨论】:

【参考方案1】:

这可以通过组合Viewer3D#getScreenShot 方法和Autodesk.Viewing.MarkupsCore 扩展的renderToCanvas 方法来完成,如下所示:

async function getScreenshotDataUrl(viewer, width, height) 
  const markupExt = await viewer.getExtension('Autodesk.Viewing.MarkupsCore');
  return new Promise(function (resolve, reject) 
    const canvas = document.createElement('canvas');
    canvas.width = width;
    canvas.height = height;
    const context = canvas.getContext('2d');
    const image = new Image();
    image.onload = function () 
      context.drawImage(image, 0, 0);
      markupExt.renderToCanvas(context, function () 
        resolve(canvas.toDataURL('image/png'));
      );
    ;
    viewer.getScreenShot(width, height, blob => image.src = blob);
  );

这是一个演示上述代码的代码笔:https://codepen.io/petrbroz/pen/gOMPYRV?editors=0010。

【讨论】:

嗨,这给了我一个错误提示,但使用forge.autodesk.com/blog/screenshot-markups 设法完成了它。但是怎么能单独保存图片呢? 如果您只想存储查看器快照,只需删除 markupExt.renderToCanvas 方法调用并将其替换为 resolve(canvas.toDataURL('image/png')); 或者,如果您只对标记的图像感兴趣,请完全排除 image.onloadviewer.getScreenShot。只需创建一个画布,获取其上下文,调用markupExt.renderToCanvas,最后使用resolve(canvas.toDataURL('image/png')); 返回结果。 谢谢@Petr,它对我有用。设法获取 blob URL。干杯

以上是关于如何在没有标记的情况下获取 forgeviewer 的快照的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ForgeViewer 中从 2D 模型 (dxf) 中获取层状态

Forge Viewer - 如何在场景中访问(或获取渲染/片段代理)克隆的网格?

如何在没有 QCheckBox 框的情况下绘制本机复选标记

Forge Viewer - 标记 - 我们可以获得当前选择的 xy 坐标吗?

Unity3D如何在没有标记的情况下创建增强现实?

如何在不登录的情况下保护 Web 服务