Используйте движение мыши для изменения уровня / окна в AMI Medical Imaging (AMI) JS ToolKit

Я немного играю с AMI Medical Imaging (AMI) JS ToolKit. Есть ли способ переместить окно на событие мыши, например, щелкнуть правой кнопкой мыши и переместить?

Я знаю, что можно изменить окно / уровень с помощью меню на примерах, но я хотел бы изменить контроллер, чтобы он перемещал мышь.

Спасибо!

1 ответ

Решение

Для управления окном / уровнем, перемещая мышь, вы должны будете слушать mousemouve событие затем обновить stackHelper -> slice -> windowWidth/Center как хотите.

Вы можете включить окно / уровень, если пользователь нажмет shift:

var drag =  {
  x: null,
  y: null
}

var shiftDown = false;

function onKeyPressed(event){

  shiftDown = event.shiftKey;

  if(!shiftDown){
    drag.x = null;
    drag.y = null;
  }

}

container.addEventListener('keydown', onKeyPressed);
container.addEventListener('keyup', onKeyPressed);

Затем обновите окно / уровень при перемещении мыши:

function onMouseMove(event){

  if(!shiftDown || !stack || !stackHelper){
    return;
  }

  if(drag.x === null){
    drag.x = event.offsetX;
    drag.y = event.offsetY;
  }

  var threshold = 15;
  var dynamicRange = stack.minMax[1] - stack.minMax[0];
  dynamicRange /= container.clientWidth;

  if(Math.abs(event.offsetX - drag.x) > threshold){
    // window width
    stackHelper.slice.windowWidth += dynamicRange * (event.offsetX - drag.x);
    drag.x = event.offsetX;
  }

  if(Math.abs(event.offsetY - drag.y) > threshold){
    // window center
    stackHelper.slice.windowCenter -= dynamicRange * (event.offsetY - drag.y);
    drag.y = event.offsetY;
  }

}
container.addEventListener('mousemove', onMouseMove);

Смотрите демонстрацию в режиме реального времени (сдвиг + перемещение мыши для управления уровнем окна): http://jsfiddle.net/vabL3qo0/41/

Другие вопросы по тегам