Использование stl с квадратом ami.js оставляет артефакты в 2D видах - PullRequest
0 голосов
/ 26 сентября 2018

Я перехожу пример из ami.js https://github.com/FNNDSC/ami/blob/dev/examples/viewers_quadview/viewers_quadview.js, чтобы визуализировать 2D-срез 3D-модели кости, наложенной в виде маски сегментации на 2D-изображение соответствующего КТ-сканирования.

Единственное отличие состоит в том, что я изменил его для чтения сетки 3D-модели из файла STL вместо freesurfer.

Проблема заключается в том, что он визуализирует артефакты маски сегментации из предыдущих срезов поверх текущего CTсканирования.Вместо рендеринга маски, соответствующей текущему КТ-сканированию.

Чтобы визуализировать срезы 3D-модели в виде маски 2D-сегментации при 2D-сканировании CT, в примере создается плоскость, соответствующая 2D-срезу, с помощью CTсканирования.

function updateClipPlane(refObj, clipPlane) {
  const stackHelper = refObj.stackHelper;
  const camera = refObj.camera;
  let vertices = stackHelper.slice.geometry.vertices;
  let p1 = new THREE.Vector3(vertices[0].x, vertices[0].y, vertices[0].z)
  .applyMatrix4(stackHelper._stack.ijk2LPS);
  let p2 = new THREE.Vector3(vertices[1].x, vertices[1].y, vertices[1].z)
  .applyMatrix4(stackHelper._stack.ijk2LPS);
  let p3 = new THREE.Vector3(vertices[2].x, vertices[2].y, vertices[2].z)
  .applyMatrix4(stackHelper._stack.ijk2LPS);

  clipPlane.setFromCoplanarPoints(p1, p2, p3);

  let cameraDirection = new THREE.Vector3(1, 1, 1);
  cameraDirection.applyQuaternion(camera.quaternion);

  if (cameraDirection.dot(clipPlane.normal) > 0) {
    clipPlane.negate();
  }
}

и применяет его к трехмерной сетке в качестве плоскости отсечения во время рендеринга

function render() {
  ... some code ...

  // render r2 view
  r2.renderer.clear();
  r2.renderer.render(r2.scene, r2.camera);
  // mesh
  r2.renderer.clearDepth();
  data.forEach(function(object, key) {
    object.materialFront.clippingPlanes = [clipPlane2];
    object.materialBack.clippingPlanes = [clipPlane2];
  });
  r2.renderer.render(sceneClip, r2.camera);

  ... some code...
}

jsfiddle, которая иллюстрирует проблему здесь http://jsfiddle.net/crfs6ugq/226/

...