182 lines
5.5 KiB
TypeScript
182 lines
5.5 KiB
TypeScript
const colours = {
|
|
'viewport-0': 'rgb(200, 0, 0)',
|
|
'viewport-1': 'rgb(200, 200, 0)',
|
|
'viewport-2': 'rgb(0, 200, 0)',
|
|
};
|
|
|
|
const colorsByOrientation = {
|
|
axial: 'rgb(200, 0, 0)',
|
|
sagittal: 'rgb(200, 200, 0)',
|
|
coronal: 'rgb(0, 200, 0)',
|
|
};
|
|
|
|
function createTools(utilityModule) {
|
|
const { toolNames, Enums } = utilityModule.exports;
|
|
return {
|
|
active: [
|
|
{ toolName: toolNames.WindowLevel, bindings: [{ mouseButton: Enums.MouseBindings.Primary }] },
|
|
{ toolName: toolNames.Pan, bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }] },
|
|
{ toolName: toolNames.Zoom, bindings: [{ mouseButton: Enums.MouseBindings.Secondary }] },
|
|
{ toolName: toolNames.StackScroll, bindings: [{ mouseButton: Enums.MouseBindings.Wheel }] },
|
|
],
|
|
passive: [
|
|
{
|
|
toolName: 'CircularBrush',
|
|
parentTool: 'Brush',
|
|
configuration: {
|
|
activeStrategy: 'FILL_INSIDE_CIRCLE',
|
|
},
|
|
},
|
|
{
|
|
toolName: 'CircularEraser',
|
|
parentTool: 'Brush',
|
|
configuration: {
|
|
activeStrategy: 'ERASE_INSIDE_CIRCLE',
|
|
},
|
|
},
|
|
{
|
|
toolName: 'SphereBrush',
|
|
parentTool: 'Brush',
|
|
configuration: {
|
|
activeStrategy: 'FILL_INSIDE_SPHERE',
|
|
},
|
|
},
|
|
{
|
|
toolName: 'SphereEraser',
|
|
parentTool: 'Brush',
|
|
configuration: {
|
|
activeStrategy: 'ERASE_INSIDE_SPHERE',
|
|
},
|
|
},
|
|
{
|
|
toolName: 'ThresholdCircularBrush',
|
|
parentTool: 'Brush',
|
|
configuration: {
|
|
activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
|
|
},
|
|
},
|
|
{
|
|
toolName: 'ThresholdSphereBrush',
|
|
parentTool: 'Brush',
|
|
configuration: {
|
|
activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
|
|
},
|
|
},
|
|
{
|
|
toolName: 'ThresholdCircularBrushDynamic',
|
|
parentTool: 'Brush',
|
|
configuration: {
|
|
activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
|
|
// preview: {
|
|
// enabled: true,
|
|
// },
|
|
strategySpecificConfiguration: {
|
|
// to use the use the center segment index to determine
|
|
// if inside -> same segment, if outside -> eraser
|
|
// useCenterSegmentIndex: true,
|
|
THRESHOLD: {
|
|
isDynamic: true,
|
|
dynamicRadius: 3,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{ toolName: toolNames.CircleScissors },
|
|
{ toolName: toolNames.RectangleScissors },
|
|
{ toolName: toolNames.SphereScissors },
|
|
{ toolName: toolNames.StackScroll },
|
|
{ toolName: toolNames.Magnify },
|
|
{ toolName: toolNames.WindowLevelRegion },
|
|
|
|
{ toolName: toolNames.UltrasoundDirectional },
|
|
],
|
|
disabled: [{ toolName: toolNames.ReferenceLines }, { toolName: toolNames.AdvancedMagnify }],
|
|
};
|
|
}
|
|
|
|
function initDefaultToolGroup(extensionManager, toolGroupService, commandsManager, toolGroupId) {
|
|
const utilityModule = extensionManager.getModuleEntry(
|
|
'@ohif/extension-cornerstone.utilityModule.tools'
|
|
);
|
|
const tools = createTools(utilityModule);
|
|
toolGroupService.createToolGroupAndAddTools(toolGroupId, tools);
|
|
}
|
|
|
|
function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) {
|
|
const utilityModule = extensionManager.getModuleEntry(
|
|
'@ohif/extension-cornerstone.utilityModule.tools'
|
|
);
|
|
const servicesManager = extensionManager._servicesManager;
|
|
const { cornerstoneViewportService } = servicesManager.services;
|
|
const tools = createTools(utilityModule);
|
|
tools.disabled.push(
|
|
{
|
|
toolName: utilityModule.exports.toolNames.Crosshairs,
|
|
configuration: {
|
|
viewportIndicators: true,
|
|
viewportIndicatorsConfig: {
|
|
circleRadius: 5,
|
|
xOffset: 0.95,
|
|
yOffset: 0.05,
|
|
},
|
|
disableOnPassive: true,
|
|
autoPan: {
|
|
enabled: false,
|
|
panSize: 10,
|
|
},
|
|
getReferenceLineColor: viewportId => {
|
|
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
const viewportOptions = viewportInfo?.viewportOptions;
|
|
if (viewportOptions) {
|
|
return (
|
|
colours[viewportOptions.id] ||
|
|
colorsByOrientation[viewportOptions.orientation] ||
|
|
'#0c0'
|
|
);
|
|
} else {
|
|
console.warn('missing viewport?', viewportId);
|
|
return '#0c0';
|
|
}
|
|
},
|
|
},
|
|
},
|
|
{ toolName: utilityModule.exports.toolNames.ReferenceLines }
|
|
);
|
|
toolGroupService.createToolGroupAndAddTools('mpr', tools);
|
|
}
|
|
|
|
function initVolume3DToolGroup(extensionManager, toolGroupService) {
|
|
const utilityModule = extensionManager.getModuleEntry(
|
|
'@ohif/extension-cornerstone.utilityModule.tools'
|
|
);
|
|
|
|
const { toolNames, Enums } = utilityModule.exports;
|
|
|
|
const tools = {
|
|
active: [
|
|
{
|
|
toolName: toolNames.TrackballRotateTool,
|
|
bindings: [{ mouseButton: Enums.MouseBindings.Primary }],
|
|
},
|
|
{
|
|
toolName: toolNames.Zoom,
|
|
bindings: [{ mouseButton: Enums.MouseBindings.Secondary }],
|
|
},
|
|
{
|
|
toolName: toolNames.Pan,
|
|
bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }],
|
|
},
|
|
],
|
|
};
|
|
|
|
toolGroupService.createToolGroupAndAddTools('volume3d', tools);
|
|
}
|
|
|
|
function initToolGroups(extensionManager, toolGroupService, commandsManager) {
|
|
initDefaultToolGroup(extensionManager, toolGroupService, commandsManager, 'default');
|
|
initMPRToolGroup(extensionManager, toolGroupService, commandsManager);
|
|
initVolume3DToolGroup(extensionManager, toolGroupService);
|
|
}
|
|
|
|
export default initToolGroups;
|