CornerstoneJs React restoreImageIdToolState not loading annotations automatically after running code

218 views Asked by At

After this Code Runs I have to hover the cornerstoneViewport to activate the annotations i want that annotation to show up after this code runs without hovering the CVport

  const restore = () => {
    let element;
    const stack = {
      currentImageIdIndex: 0,
      imageIds,
    };
    console.log(dicomAnnotaionList);

    imageIds.forEach((imageId) => {
      element = document.getElementsByClassName("cornerstone-canvas")[0];
      cornerstone.enable(element);
      dicomAnnotaionList.forEach((ann) => {
        cornerstone.loadImage(imageId).then(function (image) {
          cornerstone.displayImage(element, image);
          cornerstoneTools.addStackStateManager(element, ["stack"]);
          cornerstoneTools.addToolState(element, "stack", stack);
          cornerstone.draw(element);

          const ToolStateManager =
            cornerstoneTools.globalImageIdSpecificToolStateManager;
          ToolStateManager.restoreImageIdToolState(imageId, {
            ...ann,
          });

          
        });
      });
    });
    cornerstoneTools.addTool(cornerstoneTools.LengthTool);
    cornerstoneTools.setToolPassive("Length");
    cornerstoneTools.addTool(cornerstoneTools.RectangleRoiTool);
    cornerstoneTools.setToolPassive("RectangleRoi");
    cornerstoneTools.addTool(cornerstoneTools.EllipticalRoiTool);
    cornerstoneTools.setToolPassive("EllipticalRoi");
    cornerstoneTools.addTool(cornerstoneTools.FreehandRoiTool);
    cornerstoneTools.setToolPassive("FreehandRoi");

    setIsRestored(true);
  };
1

There are 1 answers

0
Thomas Zimmermann On

I have this bit of code that might help

Promise.all(imageIds.map(imageId => cs.loadAndCacheImage(imageId)))
  .then(image => {
      //... do stuff ... 
      setLoading(false);
  })
  .catch(error => console.log(error));

This block runs in an useEffect. As you can see, I'm using "Promise.all" to have access to a callback when all images are loaded, and use setState mechanics at this moment.