* feat: Add a new hanging protocol @ohif/mn * Add @ohif/seg example * PR comments and a couple more fixes to make things cleaner * PR comment * Added an example to cause the PR checks to rerun
318 lines
6.9 KiB
TypeScript
318 lines
6.9 KiB
TypeScript
import { Types } from '@ohif/core';
|
|
|
|
const mpr: Types.HangingProtocol.Protocol = {
|
|
id: 'mpr',
|
|
name: 'Multi-Planar Reconstruction',
|
|
locked: true,
|
|
hasUpdatedPriorsInformation: false,
|
|
createdDate: '2021-02-23',
|
|
modifiedDate: '2023-04-03',
|
|
availableTo: {},
|
|
editableBy: {},
|
|
// Unknown number of priors referenced - so just match any study
|
|
numberOfPriorsReferenced: 0,
|
|
protocolMatchingRules: [],
|
|
imageLoadStrategy: 'nth',
|
|
callbacks: {
|
|
// Switches out of MPR mode when the layout change button is used
|
|
onLayoutChange: [
|
|
{
|
|
commandName: 'toggleHangingProtocol',
|
|
commandOptions: { protocolId: 'mpr' },
|
|
context: 'DEFAULT',
|
|
},
|
|
],
|
|
// Turns off crosshairs when switching out of MPR mode
|
|
onProtocolExit: [
|
|
{
|
|
commandName: 'toolbarServiceRecordInteraction',
|
|
commandOptions: {
|
|
interactionType: 'tool',
|
|
commands: [
|
|
{
|
|
commandOptions: {
|
|
toolName: 'WindowLevel',
|
|
},
|
|
context: 'CORNERSTONE',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
},
|
|
displaySetSelectors: {
|
|
activeDisplaySet: {
|
|
seriesMatchingRules: [
|
|
{
|
|
weight: 1,
|
|
attribute: 'isReconstructable',
|
|
constraint: {
|
|
equals: {
|
|
value: true,
|
|
},
|
|
},
|
|
required: true,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
stages: [
|
|
{
|
|
name: 'MPR 1x3',
|
|
viewportStructure: {
|
|
layoutType: 'grid',
|
|
properties: {
|
|
rows: 1,
|
|
columns: 3,
|
|
layoutOptions: [
|
|
{
|
|
x: 0,
|
|
y: 0,
|
|
width: 1 / 3,
|
|
height: 1,
|
|
},
|
|
{
|
|
x: 1 / 3,
|
|
y: 0,
|
|
width: 1 / 3,
|
|
height: 1,
|
|
},
|
|
{
|
|
x: 2 / 3,
|
|
y: 0,
|
|
width: 1 / 3,
|
|
height: 1,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
viewports: [
|
|
{
|
|
viewportOptions: {
|
|
toolGroupId: 'mpr',
|
|
viewportType: 'volume',
|
|
orientation: 'axial',
|
|
initialImageOptions: {
|
|
preset: 'middle',
|
|
},
|
|
syncGroups: [
|
|
{
|
|
type: 'voi',
|
|
id: 'mpr',
|
|
source: true,
|
|
target: true,
|
|
},
|
|
],
|
|
},
|
|
displaySets: [
|
|
{
|
|
id: 'activeDisplaySet',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
viewportOptions: {
|
|
toolGroupId: 'mpr',
|
|
viewportType: 'volume',
|
|
orientation: 'sagittal',
|
|
initialImageOptions: {
|
|
preset: 'middle',
|
|
},
|
|
syncGroups: [
|
|
{
|
|
type: 'voi',
|
|
id: 'mpr',
|
|
source: true,
|
|
target: true,
|
|
},
|
|
],
|
|
},
|
|
displaySets: [
|
|
{
|
|
id: 'activeDisplaySet',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
viewportOptions: {
|
|
toolGroupId: 'mpr',
|
|
viewportType: 'volume',
|
|
orientation: 'coronal',
|
|
initialImageOptions: {
|
|
preset: 'middle',
|
|
},
|
|
syncGroups: [
|
|
{
|
|
type: 'voi',
|
|
id: 'mpr',
|
|
source: true,
|
|
target: true,
|
|
},
|
|
],
|
|
},
|
|
displaySets: [
|
|
{
|
|
id: 'activeDisplaySet',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
};
|
|
|
|
const mprAnd3DVolumeViewport = {
|
|
id: 'mprAnd3DVolumeViewport',
|
|
locked: true,
|
|
hasUpdatedPriorsInformation: false,
|
|
name: 'mpr',
|
|
createdDate: '2023-03-15T10:29:44.894Z',
|
|
modifiedDate: '2023-03-15T10:29:44.894Z',
|
|
availableTo: {},
|
|
editableBy: {},
|
|
protocolMatchingRules: [],
|
|
imageLoadStrategy: 'interleaveCenter',
|
|
displaySetSelectors: {
|
|
mprDisplaySet: {
|
|
seriesMatchingRules: [
|
|
{
|
|
weight: 1,
|
|
attribute: 'isReconstructable',
|
|
constraint: {
|
|
equals: {
|
|
value: true,
|
|
},
|
|
},
|
|
required: true,
|
|
},
|
|
{
|
|
attribute: 'Modality',
|
|
constraint: {
|
|
equals: {
|
|
value: 'CT',
|
|
},
|
|
},
|
|
required: true,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
stages: [
|
|
{
|
|
id: 'mpr3Stage',
|
|
name: 'mpr',
|
|
viewportStructure: {
|
|
layoutType: 'grid',
|
|
properties: {
|
|
rows: 2,
|
|
columns: 2,
|
|
},
|
|
},
|
|
viewports: [
|
|
{
|
|
viewportOptions: {
|
|
toolGroupId: 'mpr',
|
|
viewportType: 'volume',
|
|
orientation: 'axial',
|
|
initialImageOptions: {
|
|
preset: 'middle',
|
|
},
|
|
syncGroups: [
|
|
{
|
|
type: 'voi',
|
|
id: 'mpr',
|
|
source: true,
|
|
target: true,
|
|
},
|
|
],
|
|
},
|
|
displaySets: [
|
|
{
|
|
id: 'mprDisplaySet',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
viewportOptions: {
|
|
toolGroupId: 'volume3d',
|
|
viewportType: 'volume3d',
|
|
orientation: 'coronal',
|
|
customViewportProps: {
|
|
hideOverlays: true,
|
|
},
|
|
},
|
|
displaySets: [
|
|
{
|
|
id: 'mprDisplaySet',
|
|
options: {
|
|
presetName: 'CT-Bone',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{
|
|
viewportOptions: {
|
|
toolGroupId: 'mpr',
|
|
viewportType: 'volume',
|
|
orientation: 'coronal',
|
|
initialImageOptions: {
|
|
preset: 'middle',
|
|
},
|
|
syncGroups: [
|
|
{
|
|
type: 'voi',
|
|
id: 'mpr',
|
|
source: true,
|
|
target: true,
|
|
},
|
|
],
|
|
},
|
|
displaySets: [
|
|
{
|
|
id: 'mprDisplaySet',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
viewportOptions: {
|
|
toolGroupId: 'mpr',
|
|
viewportType: 'volume',
|
|
orientation: 'sagittal',
|
|
initialImageOptions: {
|
|
preset: 'middle',
|
|
},
|
|
syncGroups: [
|
|
{
|
|
type: 'voi',
|
|
id: 'mpr',
|
|
source: true,
|
|
target: true,
|
|
},
|
|
],
|
|
},
|
|
displaySets: [
|
|
{
|
|
id: 'mprDisplaySet',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
};
|
|
|
|
function getHangingProtocolModule() {
|
|
return [
|
|
{
|
|
name: mpr.id,
|
|
protocol: mpr,
|
|
},
|
|
{
|
|
name: mprAnd3DVolumeViewport.id,
|
|
protocol: mprAnd3DVolumeViewport,
|
|
},
|
|
];
|
|
}
|
|
|
|
export default getHangingProtocolModule;
|