Autodesk Forge получит скриншот с разметкой - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть расширение разметки для программы просмотра Autodesk Forge. Я хочу получить скриншот с наценками, но получил только скриншот без наценок. Я пытаюсь получить скриншот с этим кодом

          getScreenShoot.addEventListener('click', () => {
            let screenshot = new Image();
            markup.leaveEditMode();
            markupsData = JSON.parse(localStorage.getItem('markupsData'));
            markupsData.map((mark, index) => {
              markup.loadMarkups(mark, `markups-svg + ${index}`);
            });
            let canvas = document.getElementById('snapshot');
            canvas.width = viewer.container.clientWidth;
            canvas.height = viewer.container.clientHeight;
            let ctx = canvas.getContext('2d');
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.drawImage(screenshot, 0, 0, canvas.width, canvas.height);
            markup.renderToCanvas(ctx);

            viewer.getScreenShot(viewer.container.clientWidth, viewer.container.clientHeight, function (blobURL) {
              screenshot.src = blobURL;
              var saveImg = document.createElement('a');
              screenshot.appendChild(saveImg);
              saveImg.style.display = 'none';
              saveImg.href = blobURL;
              saveImg.download = "screenshot.jpg";
              document.body.appendChild(saveImg);
              saveImg.click();
              markup.hide();
              markup.leaveEditMode();
              markupTools.style.display = 'none';
            });
    })````
Please help me to find a trouble in this code, maybe it's not supported in viewer 7.*

1 Ответ

0 голосов
/ 24 февраля 2020

Пожалуйста, используйте следующий способ для вызова renderToCanvas, так как задание повторного рендеринга выполняется асинхронно c, и загрузка изображения также выполняется асинхронно c.

markup.renderToCanvas(ctx, function() {
  var canvas = document.getElementById('snapshot');

  const a = document.createElement('a');
  //a.style = 'display: none';
  document.body.appendChild(a);

  a.href = canvas.toDataURL();
  a.download = 'markup.png';
  a.click();

  document.body.removeChild(a);
}, true);

Полный код:

function snaphot() {
  var screenshot = new Image();
  screenshot.onload = function () {
      viewer.loadExtension('Autodesk.Viewing.MarkupsCore').then(function (markupCore) {

          // load the markups
          markupCore.show();
          markupCore.loadMarkups(markupSVG, "layerName");

          // ideally should also restore the state of Viewer for this markup

          // prepare to render the markups
          var canvas = document.getElementById('snapshot');
          canvas.width = viewer.container.clientWidth;
          canvas.height = viewer.container.clientHeight;
          var ctx = canvas.getContext('2d');
          ctx.clearRect(0, 0, canvas.width, canvas.height);
          ctx.drawImage(screenshot, 0, 0, canvas.width, canvas.height);

          markupCore.renderToCanvas(ctx, function() {
            // hide the markups
            //markupCore.hide();

            var canvas = document.getElementById('snapshot');

            const a = document.createElement('a');
            //a.style = 'display: none';
            document.body.appendChild(a);

            a.href = canvas.toDataURL();
            a.download = 'markup.png';
            a.click();

            document.body.removeChild(a);
          }, true);

          // hide the markups
          markupCore.hide();
      });
};

// Get the full image
viewer.getScreenShot(viewer.container.clientWidth, viewer.container.clientHeight, function (blobURL) {
    screenshot.src = blobURL;
});
...