使用cornerstoneTools搭建标注系统相关代码

  • cornerstoneTools引入
  • 注册cornerstoneTools工具
  • cornerstone 右键平移
  • 标注工具的切换
  • 初始化标注
  • 获取标注数据toolState
  • 使用橡皮擦Eraser后其他标注会暂时消失(remove事件)
  • 检测创建标注结束事件、修改标注事件

即使是Google上搜到的博客也是GitHub的issues,相关资料较少,文档也近似没有。
文档(太写意了,形散神也散)


cornerstoneTools引入

import * as cornerstone from 'cornerstone-core'
// import * as cornerstoneWebImageLoader from 'cornerstone-web-image-loader'import * as cornerstoneTools from 'cornerstone-tools';
import Hammer from 'hammerjs';
import * as cornerstoneMath from 'cornerstone-math';cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
cornerstoneTools.external.cornerstone = cornerstone;
cornerstoneTools.external.Hammer = Hammer;cornerstoneTools.init({showSVGCursors: true,}
);

注册cornerstoneTools工具

放在vue的mounted

 const element = document.getElementById('dicomimage');cornerstone.enable(element);cornerstone.registerImageLoader('example', this.getExampleImage);this.img_show_element = element;this.img_show_element.tabIndex = 0;this.img_show_element.focus();// 多边形标注const FreehandRoiTool = cornerstoneTools.FreehandRoiTool;cornerstoneTools.addTool(FreehandRoiTool)// cornerstoneTools.setToolActive('FreehandRoi', { mouseButtonMask: 1 })// 滑轮放大const ZoomMouseWheelTool = cornerstoneTools.ZoomMouseWheelTool;cornerstoneTools.addTool(ZoomMouseWheelTool)cornerstoneTools.setToolActive('ZoomMouseWheel', { mouseButtonMask: 1 })// 平移工具// const PanTool = cornerstoneTools.PanTool;// cornerstoneTools.addTool(PanTool)// cornerstoneTools.setToolActive('Pan', { mouseButtonMask: 1 })// 橡皮擦工具const EraserTool = cornerstoneTools.EraserTool;cornerstoneTools.addTool(EraserTool)

cornerstone 右键平移

放在vue的mounted

element.addEventListener('mousedown', function (e) {let lastX = e.pageX;let lastY = e.pageY;const mouseButton = e.which;function mouseMoveHandler(e) {const deltaX = e.pageX - lastX;const deltaY = e.pageY - lastY;lastX = e.pageX;lastY = e.pageY;if (mouseButton === 3) {// 鼠标右键let viewport = cornerstone.getViewport(element);viewport.translation.x += (deltaX / viewport.scale);viewport.translation.y += (deltaY / viewport.scale);cornerstone.setViewport(element, viewport);}}function mouseUpHandler() {document.removeEventListener('mouseup', mouseUpHandler);document.removeEventListener('mousemove', mouseMoveHandler);}document.addEventListener('mousemove', mouseMoveHandler);document.addEventListener('mouseup', mouseUpHandler);});

标注工具的切换

由对应button的click调用

 FreehandRoi_activate(){cornerstoneTools.setToolDisabled('Eraser');cornerstoneTools.setToolActive('FreehandRoi', { mouseButtonMask: 1 });},Eraser_activate(){cornerstoneTools.setToolDisabled('FreehandRoi');cornerstoneTools.setToolActive('Eraser', { mouseButtonMask: 1 });},

初始化标注

FreehandRoi为例:

firstLoadData为列表,可通过console.log复制ToolState来模拟:

const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager;
ToolStateManager.restoreImageIdToolState(imageId, {FreehandRoi: { data: firstLoadData }
});
cornerstoneTools.addTool(cornerstoneTools.FreehandRoiTool);
cornerstoneTools.setToolPassive("FreehandRoi");

获取标注数据toolState

let markings = cornerstoneTools.getToolState(this.img_show_element, 'FreehandRoi');

注意获取的markings是内存中的浅拷贝,也就是说直接修改就会影响对应的标注

使用橡皮擦Eraser后其他标注会暂时消失(remove事件)

监测MEASUREMENT_REMOVED事件,执行setToolEnabled

放在vue的mounted中:

element.addEventListener(cornerstoneTools.EVENTS.MEASUREMENT_REMOVED, function(evt){cornerstoneTools.setToolEnabled('FreehandRoi', { mouseButtonMask: 1 });});

cornerstone支持的所有events事件可参考cornerstoneTools/src/events.js

检测创建标注结束事件、修改标注事件

注意:每次创建标注完成会调用MEASUREMENT_COMPLETED其中每次点击也会调用MEASUREMENT_MODIFIED,而每次修改时两者都会被调用。(本人通过判断ToolState中data的length是否发生变动来判断)。

放在vue的mounted中:

 element.addEventListener(cornerstoneTools.EVENTS.MEASUREMENT_COMPLETED, function(evt){const eventData = evt.detail;// measurementData 即为刚刚完成的标注const measurementData = eventData.measurementData;});element.addEventListener(cornerstoneTools.EVENTS.MEASUREMENT_MODIFIED, function(){});

本人才疏学浅,若有错误请见谅

【cornerstoneTools】【vue】使用cornerstoneTools搭建标注系统相关代码相关推荐

  1. vue全家桶搭建后台系统(小菜鸟篇一)

    一.前言 一直在vue的门边徘徊的小菜鸟终于下定决心来继续深入学习啦(

  2. 服务器中搭建OA系统,云服务器搭建oa系统

    云服务器搭建oa系统 内容精选 换一换 云服务器创建后区域固定,不能将云服务器转移到另一个区域,也不能将云服务器转移到另一个帐号.您可以通过镜像迁移方式实现云服务器的跨帐号跨区域迁移.服务器迁移的常见 ...

  3. 服务器如何搭建oa系统,云服务器搭建oa系统

    云服务器搭建oa系统 内容精选 换一换 本节操作介绍购买云耀云服务器的操作步骤.购买时,为减少您配置参数的时间,部分参数由系统自动分配,以下参数配置供你了解系统的默认配置.购买云耀云服务器仅支持&qu ...

  4. Flask + Vue 搭建简易系统步骤总结

    之前一段时间一直在学习 python,后来在项目中用 weex 时接触到了 vue.js,本来 python 是自己想学的一门脚本技术,weex 是项目需要,必须了解些 vue.js 方面的语法,所以 ...

  5. 【完整项目搭建】基于vue-cli实现vue前端搭建考试系统——③项目开发中引入vue-router,并进行配置

    1.引入vue - router :搜索vue-router,打开vue-router官方文档 2.由于本项目基于vue2开发,因此将官网切换到v3.x版本,在导航-安装 目录下选择npm安装方式 安 ...

  6. SSM+基于Vue框架的在线投票系统的设计与实现 毕业设计-附源码221604

    基于Vue框架的在线投票系统的设计与实现 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于在线投票系统也是十分常见的.过去使用手工的管理方式对在线投票系统进行管理,造成了 ...

  7. SSM+基于Vue框架的在线投票系统的设计与实现 毕业设计-附源码

    基于Vue框架的在线投票系统的设计与实现 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于在线投票系统也是十分常见的.过去使用手工的管理方式对在线投票系统进行管理,造成了 ...

  8. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  9. 基于Go语言GoFrame+Vue+ElementUI的OA办公系统

    项目介绍 一款 Go 语言基于GoFrame.Vue.ElementUI.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构敏捷开发框架,可快速搭建前后端分离后台管理系统,本着简化开 ...

最新文章

  1. 算法提高课-搜索-多源BFS-AcWing 173. 矩阵距离:bfs、多源bfs
  2. python 列表元素操作 push()和append()的区别
  3. 对于tnsping的连接超时的功能补充(二)
  4. python学习-if、name、main、PyPi、pip
  5. 用dreamweaver cs6快速布局后台架构_后台系统:产品设计 | 七步法
  6. 10个常见的JS语言错误总汇
  7. Bootstrap 分页导航中的翻页组件
  8. 放生大海的鱼,为什么要在鱼肚子上捅一个洞?
  9. 如何运用Python建立你的第一个Slack聊天机器人?
  10. Python-file -note
  11. windows下用navicat远程链接虚拟机Linux下MySQL数据库
  12. Neo4j数据导入与可视化
  13. 【车牌识别】基于matlab GUI RGB颜色模型车牌识别【含Matlab源码 888期】
  14. 安卓9安装xpose
  15. 课题:交通标志识别——设计思路与实现步骤记录
  16. 【一日一logo_day_36】fai
  17. coreldraw x8里线段显示尺寸_CorelDRAW X8如何精确添加辅助线
  18. 手机邮箱怎么弄_安卓手机邮箱设置教程 教您如何使用手机接收邮件
  19. java用户权限管理与角色设置(一)
  20. 硬件架构的艺术:同步FIFO设计

热门文章

  1. 小米装android4.4,在VM已安装Android4.4 连接小米手环 网络设置
  2. 去掉超链接的颜色_Word中怎么快速批量删除去掉网站超链接技巧
  3. hnu 暑期实训之回文串
  4. Python之list添加新元素
  5. string的compare operator
  6. Python——如何将不规范的英文名字转化为“首字母大写,其他字母小写”的规范名字
  7. 【干货】60 余家免费正版图片网站
  8. 求不小于N且二进制串包含K个1的最小的数字
  9. 移远EC600S-CN (3) - HTTP(S)应用GET请求POST请求,HTTP接入OneNET物联网云平台
  10. 模版 ----- 一维指数型枚举 排列型枚举 组合型枚举