Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 1x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 1x 4x 4x 4x 1x 4x 4x 4x 4x 1x 4x 4x 4x 4x 1x 4x 4x 4x 4x | import { getEnabledElement, Types } from '@cornerstonejs/core';
import {
mouseEventListeners,
wheelEventListener,
keyEventListener,
} from '../eventListeners';
import {
imageRenderedEventDispatcher,
cameraModifiedEventDispatcher,
mouseToolEventDispatcher,
keyboardToolEventDispatcher,
imageSpacingCalibratedEventDispatcher,
// touchToolEventDispatcher,
} from '../eventDispatchers';
// ~~
import filterToolsWithAnnotationsForElement from './filterToolsWithAnnotationsForElement';
import { state } from './state';
import getToolsWithModesForElement from '../utilities/getToolsWithModesForElement';
import { ToolModes } from '../enums';
import { removeAnnotation } from '../stateManagement';
import getSynchronizersForViewport from './SynchronizerManager/getSynchronizersForViewport';
import getToolGroupForViewport from './ToolGroupManager/getToolGroupForViewport';
import { annotationRenderingEngine } from '../utilities/triggerAnnotationRender';
const VIEWPORT_ELEMENT = 'viewport-element';
function removeEnabledElement(
elementDisabledEvt: Types.EventTypes.ElementDisabledEvent
): void {
// Is DOM element
const { element, viewportId } = elementDisabledEvt.detail;
_resetSvgNodeCache(element);
const viewportNode = element;
const svgLayer = viewportNode.querySelector('svg');
const internalViewportNode = element.querySelector(`div.${VIEWPORT_ELEMENT}`);
Eif (svgLayer) {
internalViewportNode.removeChild(svgLayer);
}
// Remove this element from the annotation rendering engine
annotationRenderingEngine.removeViewportElement(viewportId);
// Listeners
mouseEventListeners.disable(element);
wheelEventListener.disable(element);
keyEventListener.disable(element);
// labelmap
// Dispatchers: renderer
imageRenderedEventDispatcher.disable(element);
cameraModifiedEventDispatcher.disable(element);
imageSpacingCalibratedEventDispatcher.disable(element);
// Dispatchers: interaction
mouseToolEventDispatcher.disable(element);
keyboardToolEventDispatcher.disable(element);
// touchToolEventDispatcher.disable(canvas);
// State
// @TODO: We used to "disable" the tool before removal. Should we preserve the hook that would call on tools?
_removeViewportFromSynchronizers(element);
_removeViewportFromToolGroup(element);
// _removeAllToolsForElement(canvas)
_removeEnabledElement(element);
}
const _removeViewportFromSynchronizers = (element: HTMLDivElement) => {
const enabledElement = getEnabledElement(element);
const synchronizers = getSynchronizersForViewport(
enabledElement.viewportId,
enabledElement.renderingEngineId
);
synchronizers.forEach((sync) => {
sync.remove(enabledElement);
});
};
const _removeViewportFromToolGroup = (element: HTMLDivElement) => {
const { renderingEngineId, viewportId } = getEnabledElement(element);
const toolGroup = getToolGroupForViewport(viewportId, renderingEngineId);
Eif (toolGroup) {
toolGroup.removeViewports(renderingEngineId, viewportId);
}
};
const _removeAllToolsForElement = function (element) {
const tools = getToolsWithModesForElement(element, [
ToolModes.Active,
ToolModes.Passive,
]);
const toolsWithData = filterToolsWithAnnotationsForElement(element, tools);
toolsWithData.forEach(({ annotations }) => {
annotations.forEach((annotation) => {
removeAnnotation(annotation.annotationUID, element);
});
});
};
function _resetSvgNodeCache(element: HTMLDivElement) {
const { viewportUid: viewportId, renderingEngineUid: renderingEngineId } =
element.dataset;
const elementHash = `${viewportId}:${renderingEngineId}`;
delete state.svgNodeCache[elementHash];
}
/**
* @private
* @param enabledElement
*/
const _removeEnabledElement = function (element: HTMLDivElement) {
const foundElementIndex = state.enabledElements.findIndex(
(el) => el === element
);
Eif (foundElementIndex > -1) {
state.enabledElements.splice(foundElementIndex, 1);
}
};
export default removeEnabledElement;
|