【从0上手Cornerstone3D】如何使用CornerstoneTools中的工具之同步器

同步器(Synchronizers)可以使多个视图同步响应同一个工具的操作,例如我们在MPR视图下,同步操作三个视图的缩放程度、windowLevel等等

一个同步器必须需要以下几个部分才可以执行

  • 一个监听事件(什么情况下触发同步)

  • 一个回调函数(监听事件触发时需要执行什么操作)

  • 一组源视图(原作用于哪些视图)

  • 一组目标视图(要同步于哪些视图)

使用同步器

同步器的使用方式类似于工具组,先使用 SynchronizerManager 创建一个同步器,被创建的同步器含有addSource、addTarget、add(将视图作为source视图和target视图同步添加)等函数。

特别值得注意的是:当绑定了同步器的视图被禁用时,同步器会自动在target列表和source列表中移除被禁用的视图,而无需手动操作。

内置的同步器

可以在 @cornerstonejs/tools 抛出的 synchronizers 对象中查看内置的同步器,从以下图片可看到目前内置了5种同步器(实际是4种,createStackImageSynchronizercreateImageSliceSynchronizer 功能性一致,只是兼容性处理)
在这里插入图片描述

  • createCameraPositionSynchronizer: 创建一个新的同步器,监听CAMERA_MODIFIED呈现事件并调用cameraSyncCallback。

  • createVOISynchronizer :创建一个新的同步器,监听VOI_MODIFIED渲染事件并调用voiSyncCallback。

  • createZoomPanSynchronizer:创建一个新的同步器,监听CAMERA_MODIFIED事件并调用zoomPanSyncCallback

  • createImageSliceSynchronizer:创建一个新的同步器,监听STACK_NEW_IMAGE渲染事件并调用ImageSliceSyncCallback。

使用内置同步器

以同步更新缩放和位移位置为例,演示一下在我们的代码中如何使用内置同步器

创建同步器

import {synchronizers, SynchronizerManager} from '@cornerstonejs/tools'
synchronizers.createZoomPanSynchronizer(CAMERA_SYNCHRONIZER_ID);

绑定视图

// 根据同步器ID获取到对应的同步器
const cameraSynchronizer = SynchronizerManager.getSynchronizer('CAMERA_SYNCHRONIZER_ID');

// 为同步器绑定视图,add表示将当前视图同步绑定到source列表和target列表中
cameraSynchronizer.add({
  renderingEngineId,
  viewportId,
});

自定义同步器

如果内置的同步器无法满足我们的需求,支持自定义一个同步器。如果我们想要自定义一个同步器主要需要实现以下一个核心点

 import { Enums } from '@cornerstonejs/core';
import { SynchronizerManager } from '@cornerstonejs/tools';

const cameraPositionSynchronizer = SynchronizerManager.createSynchronizer(
  'synchronizerName', // 核心点1:同步器的ID
  Enums.Events.CAMERA_MODIFIED, // 核心点2:同步器监听的事件
  (
    synchronizerInstance,
    sourceViewport,
    targetViewport,
    cameraModifiedEvent
  ) => {
    // 核心点3:监听事件后触发的回调函数
  }
);

以下为内置的createCameraPositionSynchronizer同步器的实现

export default function createCameraPositionSynchronizer(
  synchronizerName: string
): Synchronizer {
  const cameraPositionSynchronizer = createSynchronizer(
    synchronizerName,
    CAMERA_MODIFIED,
    cameraSyncCallback
  );

  return cameraPositionSynchronizer;
}

总结回顾

在这里插入图片描述

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Cornerstone3D,一个体积(volume)通常由以下变量组成: 1. pixelData:一个一维数组,包含体积每个像素的数值。 2. rows:体积每个二维图像的行数。 3. columns:体积每个二维图像的列数。 4. height:体积图像的数量,也就是体积的深度。 5. spacing:一个包含三个数字的数组,分别代表体积相邻像素在x、y、z轴方向上的物理距离。 6. bitsAllocated:每个像素所占的位数。 7. bitsStored:每个像素实际存储的位数。 8. pixelRepresentation:像素数值的编码方式,0表示无符号整数,1表示有符号整数。 9. lut:一个查找表,将像素数值映射到RGB颜色值,用于可视化体积数据。 ### 回答2: 在Cornerstone3D,Valume是一个用于管理和控制3D模型的类。它由多个变量组成,包括: 1. transform:用于表示3D模型的变换信息,包括位置、旋转和缩放。通过修改transform的值,可以对模型进行平移、旋转和缩放操作。 2. material:用于定义3D模型的材质属性,包括颜色、纹理、透明度等。可以通过更改material的值,改变模型的外观效果。 3. mesh:用于描述3D模型的顶点、面和UV坐标等几何信息。mesh包含顶点的坐标、面的连接信息以及纹理坐标等数据,用于绘制模型的外观。 4. collider:用于检测模型与其他物体的碰撞。collider可以是简单的几何形状(如球体、立方体),也可以是更复杂的网格碰撞器(mesh collider),用于模拟真实的物理碰撞效果。 5. animation:用于控制模型的动画。可以定义模型的骨骼动画或关键帧动画,通过修改animation的值,可以播放、停止或暂停模型的动画效果。 6. light:用于模拟光照效果。可以定义不同类型的光源,如平行光、点光源等,通过修改light的参数,可以改变模型的明暗效果。 7. camera:用于观察模型的视角。camera可以定义相机的位置、旋转和虚拟焦距等,通过修改camera的值,可以改变模型的观察角度。 这些变量共同组成了Valume类,通过对它们的操作和调整,可以实现对3D模型的精确控制和渲染。 ### 回答3: Cornerstone3D是一个用于虚拟现实和增强现实应用程序开发的软件开发套件。在Cornerstone3D,valume是一个用于表示虚拟对象的类,并由几个变量组成。 首先,valume的一个重要变量是position。这个变量定义了虚拟对象在虚拟世界的位置。通过改变position的值,我们可以控制虚拟对象在三维空间的位置,使其出现在我们想要的位置。 其次,valume还包含一个scale变量。这个变量决定了虚拟对象的大小。通过调整scale的值,我们可以控制虚拟对象在虚拟世界的尺寸,使其变得更大或更小。 另一个变量是rotation。这个变量定义了虚拟对象的旋转角度。通过改变rotation的值,我们可以使虚拟对象在虚拟世界发生旋转,使其在不同的角度展示给用户。 此外,valume还可能包含一些其他的变量,例如颜色、纹理等,具体的变量会根据开发者的需求和应用程序的需求而有所不同。 总之,Cornerstone3D的valume通过position、scale、rotation等变量来定义和控制虚拟对象在虚拟世界的位置、大小和旋转角度,使开发者可以灵活地创建和编辑虚拟现实和增强现实应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值