@ohif/app 3.13.0-beta.116 → 3.13.0-beta.118
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{1206.bundle.47f070e2254d128c.js → 1206.bundle.e04ca1efe6f987ba.js} +1 -1
- package/dist/1483.bundle.5a98bf0d4c26aa01.js +470 -0
- package/dist/{1602.bundle.097ec19e8e61516f.js → 1602.bundle.2a0e1a9a73063ab5.js} +2 -2
- package/dist/{7701.bundle.945445d6681ddd20.js → 2343.bundle.931645133f98ca47.js} +990 -7
- package/dist/{3500.bundle.1e063b7b4910d6cf.js → 3500.bundle.7afd6d2e9345fca0.js} +1 -1
- package/dist/{3760.bundle.6c7eeb4b7f1583ca.js → 3760.bundle.553d1b88392a20b4.js} +2 -2
- package/dist/{5448.bundle.1e50777e4c4e122a.js → 5448.bundle.5686ebb99c379f64.js} +1 -1
- package/dist/{5696.bundle.9f0366ad867385bc.js → 5696.bundle.615658b8dead54ce.js} +7 -4
- package/dist/{5910.bundle.5561806884c95754.js → 5910.bundle.0f19608f3e76859b.js} +2 -2
- package/dist/{419.bundle.9d0e6a72e1e3a17b.js → 6749.bundle.ed2f94d2dd4c9a24.js} +288 -62
- package/dist/{7248.bundle.f761b21f343d4b9f.js → 7248.bundle.4c7d834f2ec140c7.js} +2 -2
- package/dist/{7295.bundle.4d4b6de4d2bb8856.js → 7499.bundle.743782416c5f430e.js} +502 -5
- package/dist/{781.bundle.efb0a6981676cebb.js → 781.bundle.d353624c7a811425.js} +2 -2
- package/dist/{8423.bundle.5d1b3092bc9562c9.js → 8423.bundle.1f3a472a7f691c1a.js} +2 -2
- package/dist/8492.bundle.44a55a259584d665.js +504 -0
- package/dist/8595.css +2 -0
- package/dist/{899.bundle.e786f8dfb66d74ca.js → 899.bundle.50c16f860acbc848.js} +2 -2
- package/dist/{9068.bundle.cd36fcb4e15a153e.js → 9068.bundle.95f1e638ef694ea9.js} +2 -2
- package/dist/{9402.bundle.6549cc304496cd5c.js → 9402.bundle.57041a8d06a36e8e.js} +2 -2
- package/dist/{9415.bundle.2a970c71de4014bf.js → 9415.bundle.770426487f8c0dfa.js} +2 -2
- package/dist/{9437.bundle.0fff227a859992ea.js → 9437.bundle.0045fb70b8fa0e7b.js} +107 -123
- package/dist/app-config.js +1 -1
- package/dist/{app.bundle.55057e411d635dc3.js → app.bundle.707ae3540bb211e8.js} +203 -36
- package/dist/customizations/index.html +400 -0
- package/dist/customizations/segmentation/segmentationAnnotationTools.jsonc +48 -0
- package/dist/customizations/segmentation/segmentationEditing.jsonc +59 -0
- package/dist/customizations/{ctPresets.jsonc → tools/ctPresets.jsonc} +1 -1
- package/dist/customizations/{measurementLabels.jsonc → tools/measurementLabels.jsonc} +1 -1
- package/dist/customizations/{smoothRotate.jsonc → tools/smoothRotate.jsonc} +1 -1
- package/dist/customizations/veterinary/veterinary.jsonc +5 -0
- package/dist/customizations/{veterinaryOverlay.jsonc → veterinary/veterinaryOverlay.jsonc} +3 -3
- package/dist/customizations/{patientBirthDate.jsonc → worklist/patientBirthDate.jsonc} +2 -2
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/package.json +5 -5
- package/dist/4834.bundle.a91450199d0f45e4.js +0 -900
- package/dist/6001.bundle.0789789db5410764.js +0 -1529
- package/dist/customizations/veterinary.jsonc +0 -5
- /package/dist/{100.bundle.ac04a425c0851574.js → 100.bundle.6ba1a0be02710b9f.js} +0 -0
- /package/dist/{1180.bundle.c19c443fe8d26719.js → 1180.bundle.25017eea64524896.js} +0 -0
- /package/dist/{2779.bundle.dca036a18399be96.js → 2779.bundle.56f7da594c887ff6.js} +0 -0
- /package/dist/{4556.bundle.b705ab15473128c7.js → 4556.bundle.454bc9719a06bc3f.js} +0 -0
- /package/dist/{4683.bundle.5d12928efa9f70f4.js → 4683.bundle.bfb5c3739e9886b5.js} +0 -0
- /package/dist/{7295.css → 8492.css} +0 -0
- /package/dist/{8832.bundle.ede981706cac8e15.js → 8832.bundle.6f31a982f82b96da.js} +0 -0
- /package/dist/{9116.bundle.225e003c28c550c1.js → 9116.bundle.079a64a12966429c.js} +0 -0
- /package/dist/{9290.bundle.a18c40b82772a3c6.js → 9290.bundle.db0d1eb62fa6ee8b.js} +0 -0
|
@@ -9,7 +9,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
9
9
|
/* import */ var prop_types__rspack_import_1 = __webpack_require__(97598);
|
|
10
10
|
/* import */ var prop_types__rspack_import_1_default = /*#__PURE__*/__webpack_require__.n(prop_types__rspack_import_1);
|
|
11
11
|
/* import */ var _ohif_ui_next__rspack_import_2 = __webpack_require__(39987);
|
|
12
|
-
/* import */ var _ohif_extension_cornerstone__rspack_import_3 = __webpack_require__(
|
|
12
|
+
/* import */ var _ohif_extension_cornerstone__rspack_import_3 = __webpack_require__(86714);
|
|
13
13
|
/* import */ var _cornerstonejs_tools__rspack_import_4 = __webpack_require__(55526);
|
|
14
14
|
/* import */ var _getContextModule__rspack_import_5 = __webpack_require__(28835);
|
|
15
15
|
/* import */ var _cornerstonejs_core__rspack_import_6 = __webpack_require__(88479);
|
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(globalThis["rspackChunk"] = globalThis["rspackChunk"] || []).push([[1483], {
|
|
3
|
+
77798(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
4
|
+
|
|
5
|
+
// EXPORTS
|
|
6
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
7
|
+
"default": () => (/* binding */ segmentation_src)
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
// UNUSED EXPORTS: customizations, initToolGroups, modeInstance, onModeEnter, segmentationLayout, segmentationRoute
|
|
11
|
+
|
|
12
|
+
;// CONCATENATED MODULE: ../../../modes/segmentation/package.json
|
|
13
|
+
var package_namespaceObject = JSON.parse('{"UU":"@ohif/mode-segmentation"}')
|
|
14
|
+
;// CONCATENATED MODULE: ../../../modes/segmentation/src/id.js
|
|
15
|
+
|
|
16
|
+
const id = package_namespaceObject.UU;
|
|
17
|
+
|
|
18
|
+
;// CONCATENATED MODULE: ../../../modes/segmentation/src/constants.ts
|
|
19
|
+
const MIN_SEGMENTATION_DRAWING_RADIUS = 0.5;
|
|
20
|
+
const MAX_SEGMENTATION_DRAWING_RADIUS = 99.5;
|
|
21
|
+
;// CONCATENATED MODULE: ../../../modes/segmentation/src/initToolGroups.ts
|
|
22
|
+
|
|
23
|
+
const colours = {
|
|
24
|
+
'viewport-0': 'rgb(200, 0, 0)',
|
|
25
|
+
'viewport-1': 'rgb(200, 200, 0)',
|
|
26
|
+
'viewport-2': 'rgb(0, 200, 0)'
|
|
27
|
+
};
|
|
28
|
+
const colorsByOrientation = {
|
|
29
|
+
axial: 'rgb(200, 0, 0)',
|
|
30
|
+
sagittal: 'rgb(200, 200, 0)',
|
|
31
|
+
coronal: 'rgb(0, 200, 0)'
|
|
32
|
+
};
|
|
33
|
+
function createTools({
|
|
34
|
+
utilityModule,
|
|
35
|
+
commandsManager
|
|
36
|
+
}) {
|
|
37
|
+
const {
|
|
38
|
+
toolNames,
|
|
39
|
+
Enums
|
|
40
|
+
} = utilityModule.exports;
|
|
41
|
+
const tools = {
|
|
42
|
+
active: [{
|
|
43
|
+
toolName: toolNames.WindowLevel,
|
|
44
|
+
bindings: [{
|
|
45
|
+
mouseButton: Enums.MouseBindings.Primary
|
|
46
|
+
}]
|
|
47
|
+
}, {
|
|
48
|
+
toolName: toolNames.Pan,
|
|
49
|
+
bindings: [{
|
|
50
|
+
mouseButton: Enums.MouseBindings.Auxiliary
|
|
51
|
+
}]
|
|
52
|
+
}, {
|
|
53
|
+
toolName: toolNames.Zoom,
|
|
54
|
+
bindings: [{
|
|
55
|
+
mouseButton: Enums.MouseBindings.Secondary
|
|
56
|
+
}, {
|
|
57
|
+
numTouchPoints: 2
|
|
58
|
+
}]
|
|
59
|
+
}, {
|
|
60
|
+
toolName: toolNames.StackScroll,
|
|
61
|
+
bindings: [{
|
|
62
|
+
mouseButton: Enums.MouseBindings.Wheel
|
|
63
|
+
}, {
|
|
64
|
+
numTouchPoints: 3
|
|
65
|
+
}]
|
|
66
|
+
}],
|
|
67
|
+
passive: [{
|
|
68
|
+
toolName: 'CircularBrush',
|
|
69
|
+
parentTool: 'Brush',
|
|
70
|
+
configuration: {
|
|
71
|
+
activeStrategy: 'FILL_INSIDE_CIRCLE',
|
|
72
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
73
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5)
|
|
74
|
+
}
|
|
75
|
+
}, {
|
|
76
|
+
toolName: toolNames.LabelmapSlicePropagation
|
|
77
|
+
}, {
|
|
78
|
+
toolName: toolNames.MarkerLabelmap
|
|
79
|
+
}, {
|
|
80
|
+
toolName: toolNames.RegionSegmentPlus
|
|
81
|
+
}, {
|
|
82
|
+
toolName: 'CircularEraser',
|
|
83
|
+
parentTool: 'Brush',
|
|
84
|
+
configuration: {
|
|
85
|
+
activeStrategy: 'ERASE_INSIDE_CIRCLE',
|
|
86
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
87
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5)
|
|
88
|
+
}
|
|
89
|
+
}, {
|
|
90
|
+
toolName: 'SphereBrush',
|
|
91
|
+
parentTool: 'Brush',
|
|
92
|
+
configuration: {
|
|
93
|
+
activeStrategy: 'FILL_INSIDE_SPHERE',
|
|
94
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
95
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5)
|
|
96
|
+
}
|
|
97
|
+
}, {
|
|
98
|
+
toolName: 'SphereEraser',
|
|
99
|
+
parentTool: 'Brush',
|
|
100
|
+
configuration: {
|
|
101
|
+
activeStrategy: 'ERASE_INSIDE_SPHERE',
|
|
102
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
103
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5)
|
|
104
|
+
}
|
|
105
|
+
}, {
|
|
106
|
+
toolName: 'ThresholdCircularBrush',
|
|
107
|
+
parentTool: 'Brush',
|
|
108
|
+
configuration: {
|
|
109
|
+
activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
|
|
110
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
111
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5)
|
|
112
|
+
}
|
|
113
|
+
}, {
|
|
114
|
+
toolName: 'ThresholdSphereBrush',
|
|
115
|
+
parentTool: 'Brush',
|
|
116
|
+
configuration: {
|
|
117
|
+
activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
|
|
118
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
119
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5)
|
|
120
|
+
}
|
|
121
|
+
}, {
|
|
122
|
+
toolName: 'ThresholdCircularBrushDynamic',
|
|
123
|
+
parentTool: 'Brush',
|
|
124
|
+
configuration: {
|
|
125
|
+
activeStrategy: 'THRESHOLD_INSIDE_CIRCLE',
|
|
126
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
127
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5),
|
|
128
|
+
threshold: {
|
|
129
|
+
isDynamic: true,
|
|
130
|
+
dynamicRadius: 3
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}, {
|
|
134
|
+
toolName: toolNames.SegmentBidirectional
|
|
135
|
+
}, {
|
|
136
|
+
toolName: toolNames.SegmentSelect
|
|
137
|
+
}, {
|
|
138
|
+
toolName: 'ThresholdSphereBrushDynamic',
|
|
139
|
+
parentTool: 'Brush',
|
|
140
|
+
configuration: {
|
|
141
|
+
activeStrategy: 'THRESHOLD_INSIDE_SPHERE',
|
|
142
|
+
minRadius: (/* inlined export .MIN_SEGMENTATION_DRAWING_RADIUS */0.5),
|
|
143
|
+
maxRadius: (/* inlined export .MAX_SEGMENTATION_DRAWING_RADIUS */99.5),
|
|
144
|
+
threshold: {
|
|
145
|
+
isDynamic: true,
|
|
146
|
+
dynamicRadius: 3
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}, {
|
|
150
|
+
toolName: toolNames.LabelMapEditWithContourTool
|
|
151
|
+
}, {
|
|
152
|
+
toolName: toolNames.CircleScissors
|
|
153
|
+
}, {
|
|
154
|
+
toolName: toolNames.RectangleScissors
|
|
155
|
+
}, {
|
|
156
|
+
toolName: toolNames.SphereScissors
|
|
157
|
+
}, {
|
|
158
|
+
toolName: toolNames.StackScroll
|
|
159
|
+
}, {
|
|
160
|
+
toolName: toolNames.Magnify
|
|
161
|
+
}, {
|
|
162
|
+
toolName: toolNames.WindowLevelRegion
|
|
163
|
+
}, {
|
|
164
|
+
toolName: toolNames.UltrasoundDirectional
|
|
165
|
+
}, {
|
|
166
|
+
toolName: toolNames.PlanarFreehandContourSegmentation
|
|
167
|
+
}, {
|
|
168
|
+
toolName: toolNames.LivewireContourSegmentation
|
|
169
|
+
}, {
|
|
170
|
+
toolName: toolNames.SculptorTool
|
|
171
|
+
}, {
|
|
172
|
+
toolName: toolNames.PlanarFreehandROI
|
|
173
|
+
}, {
|
|
174
|
+
toolName: 'CatmullRomSplineROI',
|
|
175
|
+
parentTool: toolNames.SplineContourSegmentation,
|
|
176
|
+
configuration: {
|
|
177
|
+
spline: {
|
|
178
|
+
type: 'CATMULLROM',
|
|
179
|
+
enableTwoPointPreview: true
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}, {
|
|
183
|
+
toolName: 'LinearSplineROI',
|
|
184
|
+
parentTool: toolNames.SplineContourSegmentation,
|
|
185
|
+
configuration: {
|
|
186
|
+
spline: {
|
|
187
|
+
type: 'LINEAR',
|
|
188
|
+
enableTwoPointPreview: true
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}, {
|
|
192
|
+
toolName: 'BSplineROI',
|
|
193
|
+
parentTool: toolNames.SplineContourSegmentation,
|
|
194
|
+
configuration: {
|
|
195
|
+
spline: {
|
|
196
|
+
type: 'BSPLINE',
|
|
197
|
+
enableTwoPointPreview: true
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}],
|
|
201
|
+
disabled: [{
|
|
202
|
+
toolName: toolNames.ReferenceLines
|
|
203
|
+
}, {
|
|
204
|
+
toolName: toolNames.AdvancedMagnify
|
|
205
|
+
}]
|
|
206
|
+
};
|
|
207
|
+
const updatedTools = commandsManager.run('initializeSegmentLabelTool', {
|
|
208
|
+
tools
|
|
209
|
+
});
|
|
210
|
+
return updatedTools;
|
|
211
|
+
}
|
|
212
|
+
function initDefaultToolGroup(extensionManager, toolGroupService, commandsManager, toolGroupId) {
|
|
213
|
+
const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.tools');
|
|
214
|
+
const tools = createTools({
|
|
215
|
+
commandsManager,
|
|
216
|
+
utilityModule
|
|
217
|
+
});
|
|
218
|
+
toolGroupService.createToolGroupAndAddTools(toolGroupId, tools);
|
|
219
|
+
}
|
|
220
|
+
function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) {
|
|
221
|
+
const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.tools');
|
|
222
|
+
const servicesManager = extensionManager._servicesManager;
|
|
223
|
+
const {
|
|
224
|
+
cornerstoneViewportService
|
|
225
|
+
} = servicesManager.services;
|
|
226
|
+
const tools = createTools({
|
|
227
|
+
commandsManager,
|
|
228
|
+
utilityModule
|
|
229
|
+
});
|
|
230
|
+
tools.disabled.push({
|
|
231
|
+
toolName: utilityModule.exports.toolNames.Crosshairs,
|
|
232
|
+
configuration: {
|
|
233
|
+
viewportIndicators: true,
|
|
234
|
+
viewportIndicatorsConfig: {
|
|
235
|
+
circleRadius: 5,
|
|
236
|
+
xOffset: 0.95,
|
|
237
|
+
yOffset: 0.05
|
|
238
|
+
},
|
|
239
|
+
disableOnPassive: true,
|
|
240
|
+
autoPan: {
|
|
241
|
+
enabled: false,
|
|
242
|
+
panSize: 10
|
|
243
|
+
},
|
|
244
|
+
getReferenceLineColor: viewportId => {
|
|
245
|
+
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
246
|
+
const viewportOptions = viewportInfo?.viewportOptions;
|
|
247
|
+
if (viewportOptions) {
|
|
248
|
+
return colours[viewportOptions.id] || colorsByOrientation[viewportOptions.orientation] || '#0c0';
|
|
249
|
+
} else {
|
|
250
|
+
console.warn('missing viewport?', viewportId);
|
|
251
|
+
return '#0c0';
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}, {
|
|
256
|
+
toolName: utilityModule.exports.toolNames.ReferenceLines
|
|
257
|
+
});
|
|
258
|
+
toolGroupService.createToolGroupAndAddTools('mpr', tools);
|
|
259
|
+
}
|
|
260
|
+
function initVolume3DToolGroup(extensionManager, toolGroupService) {
|
|
261
|
+
const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.tools');
|
|
262
|
+
const {
|
|
263
|
+
toolNames,
|
|
264
|
+
Enums
|
|
265
|
+
} = utilityModule.exports;
|
|
266
|
+
const tools = {
|
|
267
|
+
active: [{
|
|
268
|
+
toolName: toolNames.TrackballRotateTool,
|
|
269
|
+
bindings: [{
|
|
270
|
+
mouseButton: Enums.MouseBindings.Primary
|
|
271
|
+
}]
|
|
272
|
+
}, {
|
|
273
|
+
toolName: toolNames.Zoom,
|
|
274
|
+
bindings: [{
|
|
275
|
+
mouseButton: Enums.MouseBindings.Secondary
|
|
276
|
+
}, {
|
|
277
|
+
numTouchPoints: 2
|
|
278
|
+
}]
|
|
279
|
+
}, {
|
|
280
|
+
toolName: toolNames.Pan,
|
|
281
|
+
bindings: [{
|
|
282
|
+
mouseButton: Enums.MouseBindings.Auxiliary
|
|
283
|
+
}]
|
|
284
|
+
}]
|
|
285
|
+
};
|
|
286
|
+
toolGroupService.createToolGroupAndAddTools('volume3d', tools);
|
|
287
|
+
}
|
|
288
|
+
function initToolGroups({
|
|
289
|
+
extensionManager,
|
|
290
|
+
toolGroupService,
|
|
291
|
+
commandsManager
|
|
292
|
+
}) {
|
|
293
|
+
initDefaultToolGroup(extensionManager, toolGroupService, commandsManager, 'default');
|
|
294
|
+
initMPRToolGroup(extensionManager, toolGroupService, commandsManager);
|
|
295
|
+
initVolume3DToolGroup(extensionManager, toolGroupService);
|
|
296
|
+
}
|
|
297
|
+
/* export default */ const src_initToolGroups = (initToolGroups);
|
|
298
|
+
;// CONCATENATED MODULE: ../../../modes/segmentation/src/utils/setUpAutoTabSwitchHandler.ts
|
|
299
|
+
/**
|
|
300
|
+
* Sets up auto tab switching for when the first segmentation is added into the viewer.
|
|
301
|
+
*/
|
|
302
|
+
function setUpAutoTabSwitchHandler({
|
|
303
|
+
segmentationService,
|
|
304
|
+
viewportGridService,
|
|
305
|
+
panelService
|
|
306
|
+
}) {
|
|
307
|
+
const autoTabSwitchEvents = [segmentationService.EVENTS.SEGMENTATION_MODIFIED, segmentationService.EVENTS.SEGMENTATION_REPRESENTATION_MODIFIED];
|
|
308
|
+
|
|
309
|
+
// Initially there are no segmentations, so we should switch the tab whenever the first segmentation is added.
|
|
310
|
+
let shouldSwitchTab = true;
|
|
311
|
+
const unsubscribeAutoTabSwitchEvents = autoTabSwitchEvents.map(eventName => segmentationService.subscribe(eventName, () => {
|
|
312
|
+
const segmentations = segmentationService.getSegmentations();
|
|
313
|
+
if (!segmentations.length) {
|
|
314
|
+
// If all the segmentations are removed, then the next time a segmentation is added, we should switch the tab.
|
|
315
|
+
shouldSwitchTab = true;
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const activeViewportId = viewportGridService.getActiveViewportId();
|
|
319
|
+
const activeRepresentation = segmentationService.getSegmentationRepresentations(activeViewportId)?.find(representation => representation.active);
|
|
320
|
+
if (activeRepresentation && shouldSwitchTab) {
|
|
321
|
+
shouldSwitchTab = false;
|
|
322
|
+
switch (activeRepresentation.type) {
|
|
323
|
+
case 'Labelmap':
|
|
324
|
+
panelService.activatePanel('@ohif/extension-cornerstone.panelModule.panelSegmentationWithToolsLabelMap', true);
|
|
325
|
+
break;
|
|
326
|
+
case 'Contour':
|
|
327
|
+
panelService.activatePanel('@ohif/extension-cornerstone.panelModule.panelSegmentationWithToolsContour', true);
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
})).map(subscription => subscription.unsubscribe);
|
|
332
|
+
return {
|
|
333
|
+
unsubscribeAutoTabSwitchEvents
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
// EXTERNAL MODULE: ../../../modes/basic/src/index.tsx + 4 modules
|
|
337
|
+
var src = __webpack_require__(69932);
|
|
338
|
+
;// CONCATENATED MODULE: ../../../modes/segmentation/src/index.tsx
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Extends the basic mode enter with the segmentation panel auto tab switch
|
|
346
|
+
* handling (switching between labelmap/contour panels as segmentations of the
|
|
347
|
+
* relevant type become active).
|
|
348
|
+
*/
|
|
349
|
+
function onModeEnter(ctx) {
|
|
350
|
+
src/* .onModeEnter.call */.jQ.call(this, ctx);
|
|
351
|
+
const {
|
|
352
|
+
segmentationService,
|
|
353
|
+
viewportGridService,
|
|
354
|
+
panelService
|
|
355
|
+
} = ctx.servicesManager.services;
|
|
356
|
+
const {
|
|
357
|
+
unsubscribeAutoTabSwitchEvents
|
|
358
|
+
} = setUpAutoTabSwitchHandler({
|
|
359
|
+
segmentationService,
|
|
360
|
+
viewportGridService,
|
|
361
|
+
panelService
|
|
362
|
+
});
|
|
363
|
+
this._unsubscriptions.push(...unsubscribeAutoTabSwitchEvents);
|
|
364
|
+
}
|
|
365
|
+
const segmentationLayout = {
|
|
366
|
+
id: src/* .ohif.layout */.Dt.layout,
|
|
367
|
+
props: {
|
|
368
|
+
// Literal panel lists; the mode route seeds them into the standard
|
|
369
|
+
// `leftPanels` / `rightPanels` customizations so `mode` phase
|
|
370
|
+
// blocks and global customizations can modify them.
|
|
371
|
+
leftPanels: [src/* .ohif.thumbnailList */.Dt.thumbnailList],
|
|
372
|
+
leftPanelResizable: true,
|
|
373
|
+
rightPanels: [src/* .cornerstone.labelMapSegmentationPanel */.Nu.labelMapSegmentationPanel, src/* .cornerstone.contourSegmentationPanel */.Nu.contourSegmentationPanel],
|
|
374
|
+
rightPanelResizable: true,
|
|
375
|
+
viewports: [{
|
|
376
|
+
namespace: src/* .cornerstone.viewport */.Nu.viewport,
|
|
377
|
+
displaySetsToDisplay: [src/* .ohif.sopClassHandler */.Dt.sopClassHandler]
|
|
378
|
+
}, {
|
|
379
|
+
namespace: src/* .segmentation.viewport */.b2.viewport,
|
|
380
|
+
displaySetsToDisplay: [src/* .segmentation.sopClassHandler */.b2.sopClassHandler]
|
|
381
|
+
}, {
|
|
382
|
+
namespace: src/* .dicomRT.viewport */.V6.viewport,
|
|
383
|
+
displaySetsToDisplay: [src/* .dicomRT.sopClassHandler */.V6.sopClassHandler]
|
|
384
|
+
}]
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
const segmentationRoute = {
|
|
388
|
+
path: 'template',
|
|
389
|
+
layoutTemplate: src/* .layoutTemplate */.ZM,
|
|
390
|
+
layoutInstance: segmentationLayout
|
|
391
|
+
};
|
|
392
|
+
const modeInstance = {
|
|
393
|
+
id: id,
|
|
394
|
+
routeName: 'segmentation',
|
|
395
|
+
displayName: 'Segmentation',
|
|
396
|
+
// Toolbar/tool-group composition: which capability packs this mode uses.
|
|
397
|
+
// The mode route seeds these onto the Mode customization scope on enter, so
|
|
398
|
+
// `?customization=` modules extend them through the `mode` phase (e.g. add
|
|
399
|
+
// the annotation tools/buttons). Pack names are resolved when the toolbar is
|
|
400
|
+
// registered.
|
|
401
|
+
toolbarButtons: [{
|
|
402
|
+
$reference: 'cornerstone.toolbarButtons'
|
|
403
|
+
}, {
|
|
404
|
+
$reference: 'cornerstone.segmentationToolbarButtons'
|
|
405
|
+
}],
|
|
406
|
+
toolbarSections: [{
|
|
407
|
+
$reference: 'cornerstone.segmentationModeToolbarSections'
|
|
408
|
+
}, {
|
|
409
|
+
$reference: 'cornerstone.segmentationToolbarSections'
|
|
410
|
+
}],
|
|
411
|
+
toolGroupAdditions: {
|
|
412
|
+
default: [],
|
|
413
|
+
mpr: [],
|
|
414
|
+
volume3d: []
|
|
415
|
+
},
|
|
416
|
+
// Tool group setup used by onModeEnter; extending modes can replace it.
|
|
417
|
+
initToolGroups: src_initToolGroups,
|
|
418
|
+
// The mode's own customizations, applied by the mode route as the bottom
|
|
419
|
+
// layer of the mode scope. Unlike basic, the registered block is empty (no
|
|
420
|
+
// `panelSegmentation.disableEditing`): the segmentation panel is editable.
|
|
421
|
+
modeCustomizations: 'segmentationModeCustomizations',
|
|
422
|
+
activatePanelTriggers: [],
|
|
423
|
+
/**
|
|
424
|
+
* Lifecycle hooks
|
|
425
|
+
*/
|
|
426
|
+
onModeEnter,
|
|
427
|
+
onModeExit: src/* .onModeExit */.$2,
|
|
428
|
+
validationTags: {
|
|
429
|
+
study: [],
|
|
430
|
+
series: []
|
|
431
|
+
},
|
|
432
|
+
// Data-driven validity: valid unless the study ONLY contains modalities that
|
|
433
|
+
// segmentation cannot be performed on.
|
|
434
|
+
isValidMode: src/* .isValidMode */.ur,
|
|
435
|
+
nonModeModalities: ['SM', 'ECG', 'OT', 'DOC'],
|
|
436
|
+
routes: [segmentationRoute],
|
|
437
|
+
extensions: src/* .extensionDependencies */.tR,
|
|
438
|
+
// Prefer the grid layout hanging protocol when applicable.
|
|
439
|
+
hangingProtocol: ['@ohif/mnGrid'],
|
|
440
|
+
sopClassHandlers: [src/* .ohif.sopClassHandler */.Dt.sopClassHandler, src/* .segmentation.sopClassHandler */.b2.sopClassHandler, src/* .dicomRT.sopClassHandler */.V6.sopClassHandler]
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Customizations the mode registers (Default scope) when it loads. The mode's
|
|
445
|
+
* own block is empty — the segmentation panel is editable in this mode — but
|
|
446
|
+
* it is registered so bootstrap / `?customization=` modules can add
|
|
447
|
+
* mode-scoped values to it.
|
|
448
|
+
*/
|
|
449
|
+
const customizations = {
|
|
450
|
+
segmentationModeCustomizations: {}
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* The mode uses the basic mode's `modeFactory`, which applies
|
|
455
|
+
* immutability-helper commands from `modeConfiguration` onto `modeInstance`,
|
|
456
|
+
* so a site can define a `mySegmentation` mode that extends this one.
|
|
457
|
+
*/
|
|
458
|
+
const mode = {
|
|
459
|
+
id: id,
|
|
460
|
+
modeFactory: src/* .modeFactory */.U1,
|
|
461
|
+
modeInstance,
|
|
462
|
+
extensionDependencies: src/* .extensionDependencies */.tR,
|
|
463
|
+
customizations
|
|
464
|
+
};
|
|
465
|
+
/* export default */ const segmentation_src = (mode);
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
},
|
|
469
|
+
|
|
470
|
+
}]);
|
|
@@ -1116,8 +1116,8 @@ function WorkflowPanel({
|
|
|
1116
1116
|
|
|
1117
1117
|
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 147 modules
|
|
1118
1118
|
var default_src = __webpack_require__(7825);
|
|
1119
|
-
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx +
|
|
1120
|
-
var cornerstone_src = __webpack_require__(
|
|
1119
|
+
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 200 modules
|
|
1120
|
+
var cornerstone_src = __webpack_require__(86714);
|
|
1121
1121
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dynamic-volume/src/panels/DynamicExport.tsx
|
|
1122
1122
|
|
|
1123
1123
|
|