@ohif/app 3.8.0-beta.70 → 3.8.0-beta.72

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.
Files changed (33) hide show
  1. package/dist/{155.bundle.0dabe8513b605b01ac3d.js → 155.bundle.bebcbc0ca715c7163f18.js} +53 -43
  2. package/dist/{191.bundle.7d89c921abefd1140d50.js → 191.bundle.c0ea2d031ffddeca32c9.js} +34 -127
  3. package/dist/{342.bundle.6e49f63ea7cea4645c0a.js → 342.bundle.521c0217f82380c0c2ad.js} +22 -8
  4. package/dist/{41.bundle.6ec0794a483e9a30eb94.js → 41.bundle.9db45ce95f2fd889447d.js} +65 -11
  5. package/dist/{504.bundle.993d7e2dec36257d4ce4.js → 433.bundle.6f2308ab10593784778c.js} +135 -11
  6. package/dist/{448.bundle.9177b9d909654efbc8d5.js → 448.bundle.2f5b66d084f92c556edd.js} +47 -2
  7. package/dist/{530.bundle.566bfd08dccb4cf6d98b.js → 530.bundle.f4b7966fb33eafb8cd5d.js} +17 -16
  8. package/dist/{559.bundle.4f111410af43324629ca.js → 540.bundle.792745c8d390c3fc83cf.js} +75 -42
  9. package/dist/{574.bundle.83afbc7922736fc6846d.js → 574.bundle.2b3369042aad5d553463.js} +68 -46
  10. package/dist/{595.bundle.1c1a50c4ff87763b786a.js → 595.bundle.d9e4c2a6311ce8ed929b.js} +187 -70
  11. package/dist/{699.bundle.db05df7b8e2ad605e928.js → 699.bundle.3783f122f84be6a5eb30.js} +20 -2
  12. package/dist/{726.bundle.c8de818cf1a3ff0cf7d2.js → 726.bundle.0b3d9277d22fe7e15b89.js} +2 -2
  13. package/dist/{889.bundle.67c6e5f988c9b1d289ef.js → 889.bundle.9ca0963a74448c6b0366.js} +1 -1
  14. package/dist/{90.bundle.f41c8c4fc78cdfd4de30.js → 90.bundle.3c0e23243f8ad444dcb5.js} +3 -4
  15. package/dist/{987.bundle.6bdfb3cd8762b8889632.js → 987.bundle.e19408decfd59aadd118.js} +50 -137
  16. package/dist/{app.bundle.e21e5afd46fb064cb5de.js → app.bundle.8aa9dfeaad37206d66e3.js} +631 -261
  17. package/dist/app.bundle.css +1 -1
  18. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  19. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  20. package/dist/index.html +1 -1
  21. package/dist/{polySeg.bundle.e7b4c29fb9173e8567b8.js → polySeg.bundle.fe47718e6a8414f175b1.js} +3 -3
  22. package/dist/sw.js +1 -1
  23. package/package.json +18 -18
  24. /package/dist/{164.bundle.0b1a2be351543c1433e8.js → 164.bundle.403c8665844596f8a320.js} +0 -0
  25. /package/dist/{188.bundle.81e83b073b6fd4ae0058.js → 188.bundle.c23415079424cb48aa70.js} +0 -0
  26. /package/dist/{2.bundle.04dbbf67a52fe109749c.js → 2.bundle.a423ca428b035655c6eb.js} +0 -0
  27. /package/dist/{425.bundle.ffcdde2143a5757926b9.js → 425.bundle.fa277d2575477589ff4a.js} +0 -0
  28. /package/dist/{594.bundle.ffeebda1bb9a81182a80.js → 594.bundle.2af345e8ec58d538a9ae.js} +0 -0
  29. /package/dist/{724.bundle.eada9d6c23678a5a2947.js → 724.bundle.abdadacc4d7497aa7431.js} +0 -0
  30. /package/dist/{862.bundle.959ef65b18c1d3b5e2b4.js → 862.bundle.47305c27f0fb939c2f97.js} +0 -0
  31. /package/dist/{905.bundle.eb821474b36b96b897f9.js → 905.bundle.aa96c1209ab1b78fdf2b.js} +0 -0
  32. /package/dist/{907.bundle.ca904d9747480a0e4bf1.js → 907.bundle.f8db9076d882586ac6e6.js} +0 -0
  33. /package/dist/{961.bundle.65967b1a4af002af1d1d.js → 961.bundle.0114ec1cc534b2b7739f.js} +0 -0
@@ -791,7 +791,7 @@ function promptSaveReport({
791
791
  }
792
792
  /* harmony default export */ const TrackedMeasurementsContext_promptSaveReport = (promptSaveReport);
793
793
  // EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-sr/src/index.tsx + 15 modules
794
- var cornerstone_dicom_sr_src = __webpack_require__(89559);
794
+ var cornerstone_dicom_sr_src = __webpack_require__(53540);
795
795
  ;// CONCATENATED MODULE: ../../../extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptHydrateStructuredReport.js
796
796
 
797
797
 
@@ -1119,51 +1119,54 @@ function TrackedMeasurementsContextProvider({
1119
1119
 
1120
1120
  // ~~ Listen for changes to ViewportGrid for potential SRs hung in panes when idle
1121
1121
  (0,react.useEffect)(() => {
1122
- if (viewports.size > 0) {
1123
- const activeViewport = viewports.get(activeViewportId);
1124
- if (!activeViewport || !activeViewport?.displaySetInstanceUIDs?.length) {
1125
- return;
1126
- }
1122
+ const triggerPromptHydrateFlow = async () => {
1123
+ if (viewports.size > 0) {
1124
+ const activeViewport = viewports.get(activeViewportId);
1125
+ if (!activeViewport || !activeViewport?.displaySetInstanceUIDs?.length) {
1126
+ return;
1127
+ }
1127
1128
 
1128
- // Todo: Getting the first displaySetInstanceUID is wrong, but we don't have
1129
- // tracking fusion viewports yet. This should change when we do.
1130
- const {
1131
- displaySetService
1132
- } = servicesManager.services;
1133
- const displaySet = displaySetService.getDisplaySetByUID(activeViewport.displaySetInstanceUIDs[0]);
1134
- if (!displaySet) {
1135
- return;
1136
- }
1129
+ // Todo: Getting the first displaySetInstanceUID is wrong, but we don't have
1130
+ // tracking fusion viewports yet. This should change when we do.
1131
+ const {
1132
+ displaySetService
1133
+ } = servicesManager.services;
1134
+ const displaySet = displaySetService.getDisplaySetByUID(activeViewport.displaySetInstanceUIDs[0]);
1135
+ if (!displaySet) {
1136
+ return;
1137
+ }
1137
1138
 
1138
- // If this is an SR produced by our SR SOPClassHandler,
1139
- // and it hasn't been loaded yet, do that now so we
1140
- // can check if it can be rehydrated or not.
1141
- //
1142
- // Note: This happens:
1143
- // - If the viewport is not currently an OHIFCornerstoneSRViewport
1144
- // - If the displaySet has never been hung
1145
- //
1146
- // Otherwise, the displaySet will be loaded by the useEffect handler
1147
- // listening to displaySet changes inside OHIFCornerstoneSRViewport.
1148
- // The issue here is that this handler in TrackedMeasurementsContext
1149
- // ends up occurring before the Viewport is created, so the displaySet
1150
- // is not loaded yet, and isRehydratable is undefined unless we call load().
1151
- if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && !displaySet.isLoaded && displaySet.load) {
1152
- displaySet.load();
1153
- }
1139
+ // If this is an SR produced by our SR SOPClassHandler,
1140
+ // and it hasn't been loaded yet, do that now so we
1141
+ // can check if it can be rehydrated or not.
1142
+ //
1143
+ // Note: This happens:
1144
+ // - If the viewport is not currently an OHIFCornerstoneSRViewport
1145
+ // - If the displaySet has never been hung
1146
+ //
1147
+ // Otherwise, the displaySet will be loaded by the useEffect handler
1148
+ // listening to displaySet changes inside OHIFCornerstoneSRViewport.
1149
+ // The issue here is that this handler in TrackedMeasurementsContext
1150
+ // ends up occurring before the Viewport is created, so the displaySet
1151
+ // is not loaded yet, and isRehydratable is undefined unless we call load().
1152
+ if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && !displaySet.isLoaded && displaySet.load) {
1153
+ await displaySet.load();
1154
+ }
1154
1155
 
1155
- // Magic string
1156
- // load function added by our sopClassHandler module
1157
- if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && displaySet.isRehydratable === true) {
1158
- console.log('sending event...', trackedMeasurements);
1159
- sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', {
1160
- displaySetInstanceUID: displaySet.displaySetInstanceUID,
1161
- SeriesInstanceUID: displaySet.SeriesInstanceUID,
1162
- viewportId: activeViewportId
1163
- });
1156
+ // Magic string
1157
+ // load function added by our sopClassHandler module
1158
+ if (displaySet.SOPClassHandlerId === SR_SOPCLASSHANDLERID && displaySet.isRehydratable === true) {
1159
+ console.log('sending event...', trackedMeasurements);
1160
+ sendTrackedMeasurementsEvent('PROMPT_HYDRATE_SR', {
1161
+ displaySetInstanceUID: displaySet.displaySetInstanceUID,
1162
+ SeriesInstanceUID: displaySet.SeriesInstanceUID,
1163
+ viewportId: activeViewportId
1164
+ });
1165
+ }
1164
1166
  }
1165
- }
1166
- }, [activeViewportId, sendTrackedMeasurementsEvent, servicesManager.services, viewports]);
1167
+ };
1168
+ triggerPromptHydrateFlow();
1169
+ }, [trackedMeasurements, activeViewportId, sendTrackedMeasurementsEvent, servicesManager.services, viewports]);
1167
1170
  return /*#__PURE__*/react.createElement(TrackedMeasurementsContext.Provider, {
1168
1171
  value: [trackedMeasurements, sendTrackedMeasurementsEvent]
1169
1172
  }, children);
@@ -1256,7 +1259,8 @@ function PanelStudyBrowserTracking({
1256
1259
  displaySetService,
1257
1260
  uiDialogService,
1258
1261
  hangingProtocolService,
1259
- uiNotificationService
1262
+ uiNotificationService,
1263
+ measurementService
1260
1264
  } = servicesManager.services;
1261
1265
  const navigate = (0,dist/* useNavigate */.Zp)();
1262
1266
  const {
@@ -1505,6 +1509,12 @@ function PanelStudyBrowserTracking({
1505
1509
  sendTrackedMeasurementsEvent('UNTRACK_SERIES', {
1506
1510
  SeriesInstanceUID: displaySet.SeriesInstanceUID
1507
1511
  });
1512
+ const measurements = measurementService.getMeasurements();
1513
+ measurements.forEach(m => {
1514
+ if (m.referenceSeriesUID === displaySet.SeriesInstanceUID) {
1515
+ measurementService.remove(m.uid);
1516
+ }
1517
+ });
1508
1518
  },
1509
1519
  onClickThumbnail: () => {},
1510
1520
  onDoubleClickThumbnail: onDoubleClickThumbnailHandler,
@@ -9538,129 +9538,6 @@ async function _addLabelmapToViewport(viewport, labelmapData, segmentationRepres
9538
9538
 
9539
9539
 
9540
9540
 
9541
- /***/ }),
9542
-
9543
- /***/ 31163:
9544
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9545
-
9546
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9547
- /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
9548
- /* harmony export */ });
9549
- /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50719);
9550
- /* harmony import */ var _enums_SegmentationRepresentations__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83946);
9551
- /* harmony import */ var _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63421);
9552
- /* harmony import */ var _stateManagement_segmentation_config_segmentationVisibility__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(23308);
9553
- /* harmony import */ var _stateManagement_segmentation_segmentationState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30322);
9554
- /* harmony import */ var _store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(52610);
9555
- /* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(96214);
9556
- /* harmony import */ var _Surface__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(57313);
9557
- /* harmony import */ var _Contour__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2884);
9558
- /* harmony import */ var _Labelmap__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(94318);
9559
- /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(61738);
9560
- /* harmony import */ var _annotation_PlanarFreehandContourSegmentationTool__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(20070);
9561
-
9562
-
9563
-
9564
-
9565
-
9566
-
9567
-
9568
-
9569
-
9570
-
9571
-
9572
-
9573
-
9574
- const planarContourToolName = _annotation_PlanarFreehandContourSegmentationTool__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A.toolName;
9575
- class SegmentationDisplayTool extends _base__WEBPACK_IMPORTED_MODULE_6__/* .BaseTool */ .oS {
9576
- constructor(toolProps = {}, defaultToolProps = {
9577
- configuration: {},
9578
- }) {
9579
- super(toolProps, defaultToolProps);
9580
- this.renderSegmentation = (toolGroupId) => {
9581
- const toolGroup = (0,_store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_5__.getToolGroup)(toolGroupId);
9582
- if (!toolGroup) {
9583
- return;
9584
- }
9585
- const toolGroupSegmentationRepresentations = (0,_stateManagement_segmentation_segmentationState__WEBPACK_IMPORTED_MODULE_4__.getSegmentationRepresentations)(toolGroupId);
9586
- if (!toolGroupSegmentationRepresentations ||
9587
- toolGroupSegmentationRepresentations.length === 0) {
9588
- return;
9589
- }
9590
- const toolGroupViewports = toolGroup.viewportsInfo.map(({ renderingEngineId, viewportId }) => {
9591
- const enabledElement = (0,_cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.getEnabledElementByIds)(viewportId, renderingEngineId);
9592
- if (enabledElement) {
9593
- return enabledElement.viewport;
9594
- }
9595
- });
9596
- const segmentationRenderList = toolGroupSegmentationRepresentations.map((representation) => {
9597
- const config = this._getMergedRepresentationsConfig(toolGroupId);
9598
- const viewportsRenderList = [];
9599
- const renderers = {
9600
- [_enums_SegmentationRepresentations__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.Labelmap]: _Labelmap__WEBPACK_IMPORTED_MODULE_9__/* .labelmapDisplay */ .Zy,
9601
- [_enums_SegmentationRepresentations__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.Contour]: _Contour__WEBPACK_IMPORTED_MODULE_8__/* .contourDisplay */ .T,
9602
- [_enums_SegmentationRepresentations__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.Surface]: _Surface__WEBPACK_IMPORTED_MODULE_7__/* .surfaceDisplay */ .u,
9603
- };
9604
- if (representation.type === _enums_SegmentationRepresentations__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.Contour) {
9605
- this.addPlanarFreeHandToolIfAbsent(toolGroupId);
9606
- }
9607
- const display = renderers[representation.type];
9608
- for (const viewport of toolGroupViewports) {
9609
- const renderedViewport = display.render(viewport, representation, config);
9610
- viewportsRenderList.push(renderedViewport);
9611
- }
9612
- return viewportsRenderList;
9613
- });
9614
- Promise.allSettled(segmentationRenderList).then(() => {
9615
- toolGroupViewports.forEach((viewport) => {
9616
- viewport.render();
9617
- });
9618
- });
9619
- };
9620
- }
9621
- onSetToolEnabled() {
9622
- const toolGroupId = this.toolGroupId;
9623
- const toolGroupSegmentationRepresentations = (0,_stateManagement_segmentation_segmentationState__WEBPACK_IMPORTED_MODULE_4__.getSegmentationRepresentations)(toolGroupId);
9624
- if (!toolGroupSegmentationRepresentations ||
9625
- toolGroupSegmentationRepresentations.length === 0) {
9626
- return;
9627
- }
9628
- toolGroupSegmentationRepresentations.forEach((segmentationRepresentation) => {
9629
- (0,_stateManagement_segmentation_config_segmentationVisibility__WEBPACK_IMPORTED_MODULE_3__.setSegmentationVisibility)(toolGroupId, segmentationRepresentation.segmentationRepresentationUID, true);
9630
- });
9631
- }
9632
- onSetToolDisabled() {
9633
- const toolGroupId = this.toolGroupId;
9634
- const toolGroupSegmentationRepresentations = (0,_stateManagement_segmentation_segmentationState__WEBPACK_IMPORTED_MODULE_4__.getSegmentationRepresentations)(toolGroupId);
9635
- if (!toolGroupSegmentationRepresentations ||
9636
- toolGroupSegmentationRepresentations.length === 0) {
9637
- return;
9638
- }
9639
- toolGroupSegmentationRepresentations.forEach((segmentationRepresentation) => {
9640
- (0,_stateManagement_segmentation_config_segmentationVisibility__WEBPACK_IMPORTED_MODULE_3__.setSegmentationVisibility)(toolGroupId, segmentationRepresentation.segmentationRepresentationUID, false);
9641
- });
9642
- }
9643
- addPlanarFreeHandToolIfAbsent(toolGroupId) {
9644
- if (!(planarContourToolName in _store__WEBPACK_IMPORTED_MODULE_10__/* .state */ .wk.tools)) {
9645
- (0,_store__WEBPACK_IMPORTED_MODULE_10__/* .addTool */ .Gx)(_annotation_PlanarFreehandContourSegmentationTool__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A);
9646
- }
9647
- const toolGroup = (0,_store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_5__.getToolGroup)(toolGroupId);
9648
- if (!toolGroup.hasTool(planarContourToolName)) {
9649
- toolGroup.addTool(planarContourToolName);
9650
- toolGroup.setToolPassive(planarContourToolName);
9651
- }
9652
- }
9653
- _getMergedRepresentationsConfig(toolGroupId) {
9654
- const toolGroupConfig = _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_2__.config.getToolGroupSpecificConfig(toolGroupId);
9655
- const globalConfig = _stateManagement_segmentation__WEBPACK_IMPORTED_MODULE_2__.config.getGlobalConfig();
9656
- const mergedConfig = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.utilities.deepMerge(globalConfig, toolGroupConfig);
9657
- return mergedConfig;
9658
- }
9659
- }
9660
- SegmentationDisplayTool.toolName = 'SegmentationDisplay';
9661
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SegmentationDisplayTool);
9662
-
9663
-
9664
9541
  /***/ }),
9665
9542
 
9666
9543
  /***/ 94152:
@@ -20271,8 +20148,8 @@ class AnnotationEraserTool extends base/* BaseTool */.oS {
20271
20148
  AnnotationEraserTool.toolName = 'Eraser';
20272
20149
  /* harmony default export */ const tools_AnnotationEraserTool = (AnnotationEraserTool);
20273
20150
 
20274
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/displayTools/SegmentationDisplayTool.js
20275
- var SegmentationDisplayTool = __webpack_require__(31163);
20151
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/displayTools/SegmentationDisplayTool.js + 4 modules
20152
+ var SegmentationDisplayTool = __webpack_require__(33944);
20276
20153
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/segmentation/strategies/fillRectangle.js
20277
20154
  var fillRectangle = __webpack_require__(21080);
20278
20155
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/tools/segmentation/strategies/eraseRectangle.js
@@ -23134,6 +23011,32 @@ function removeContourSegmentationAnnotation(annotation) {
23134
23011
 
23135
23012
 
23136
23013
 
23014
+ /***/ }),
23015
+
23016
+ /***/ 53891:
23017
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
23018
+
23019
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23020
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
23021
+ /* harmony export */ });
23022
+ function calculatePerimeter(polyline, closed) {
23023
+ let perimeter = 0;
23024
+ for (let i = 0; i < polyline.length - 1; i++) {
23025
+ const point1 = polyline[i];
23026
+ const point2 = polyline[i + 1];
23027
+ perimeter += Math.sqrt(Math.pow(point2[0] - point1[0], 2) + Math.pow(point2[1] - point1[1], 2));
23028
+ }
23029
+ if (closed) {
23030
+ const firstPoint = polyline[0];
23031
+ const lastPoint = polyline[polyline.length - 1];
23032
+ perimeter += Math.sqrt(Math.pow(lastPoint[0] - firstPoint[0], 2) +
23033
+ Math.pow(lastPoint[1] - firstPoint[1], 2));
23034
+ }
23035
+ return perimeter;
23036
+ }
23037
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (calculatePerimeter);
23038
+
23039
+
23137
23040
  /***/ }),
23138
23041
 
23139
23042
  /***/ 84045:
@@ -23190,6 +23093,7 @@ __webpack_require__.d(__webpack_exports__, {
23190
23093
  AnnotationToPointData: () => (/* reexport */ contours_AnnotationToPointData),
23191
23094
  acceptAutogeneratedInterpolations: () => (/* reexport */ acceptAutogeneratedInterpolations),
23192
23095
  areCoplanarContours: () => (/* reexport */ areCoplanarContours),
23096
+ calculatePerimeter: () => (/* reexport */ calculatePerimeter/* default */.A),
23193
23097
  contourFinder: () => (/* reexport */ contourFinder),
23194
23098
  detectContourHoles: () => (/* reexport */ detectContourHoles),
23195
23099
  findHandlePolylineIndex: () => (/* reexport */ findHandlePolylineIndex/* default */.A),
@@ -23608,6 +23512,8 @@ function acceptAutogeneratedInterpolations(annotationGroupSelector, selector) {
23608
23512
  var interpolation = __webpack_require__(69115);
23609
23513
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/contours/findHandlePolylineIndex.js
23610
23514
  var findHandlePolylineIndex = __webpack_require__(84045);
23515
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/contours/calculatePerimeter.js
23516
+ var calculatePerimeter = __webpack_require__(53891);
23611
23517
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/contours/index.js
23612
23518
 
23613
23519
 
@@ -23624,6 +23530,7 @@ var findHandlePolylineIndex = __webpack_require__(84045);
23624
23530
 
23625
23531
 
23626
23532
 
23533
+
23627
23534
  /***/ }),
23628
23535
 
23629
23536
  /***/ 69115:
@@ -29244,7 +29151,7 @@ function getHoveredContourSegmentationAnnotation(segmentationId) {
29244
29151
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50719);
29245
29152
  /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84901);
29246
29153
  /* harmony import */ var _store_ToolGroupManager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52610);
29247
- /* harmony import */ var _tools_displayTools_SegmentationDisplayTool__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31163);
29154
+ /* harmony import */ var _tools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(94152);
29248
29155
 
29249
29156
 
29250
29157
 
@@ -29314,7 +29221,7 @@ class SegmentationRenderingEngine {
29314
29221
  }
29315
29222
  })
29316
29223
  .filter(Boolean);
29317
- const segmentationDisplayToolInstance = toolGroup.getToolInstance(_tools_displayTools_SegmentationDisplayTool__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.toolName);
29224
+ const segmentationDisplayToolInstance = toolGroup.getToolInstance(_tools__WEBPACK_IMPORTED_MODULE_3__/* .SegmentationDisplayTool */ .t0.toolName);
29318
29225
  if (!segmentationDisplayToolInstance) {
29319
29226
  console.warn('No segmentation tool found inside', toolGroupId);
29320
29227
  return;
@@ -2678,8 +2678,8 @@ function _generateToolState() {
2678
2678
  // and over again.
2679
2679
  sopUIDImageIdIndexMap = imageIds.reduce(function (acc, imageId) {
2680
2680
  var _metadataProvider$get = metadataProvider.get("generalImageModule", imageId),
2681
- sopInstanceUid = _metadataProvider$get.sopInstanceUid;
2682
- acc[sopInstanceUid] = imageId;
2681
+ sopInstanceUID = _metadataProvider$get.sopInstanceUID;
2682
+ acc[sopInstanceUID] = imageId;
2683
2683
  return acc;
2684
2684
  }, {});
2685
2685
  overlapping = false;
@@ -4746,7 +4746,8 @@ var PlanarFreehandROI = /** @class */ (function () {
4746
4746
  function PlanarFreehandROI() {
4747
4747
  }
4748
4748
  PlanarFreehandROI.getMeasurementData = function (MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
4749
- var _a = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, PlanarFreehandROI.toolType), defaultState = _a.defaultState, SCOORDGroup = _a.SCOORDGroup, ReferencedFrameNumber = _a.ReferencedFrameNumber;
4749
+ var _a;
4750
+ var _b = MeasurementReport.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, PlanarFreehandROI.toolType), defaultState = _b.defaultState, NUMGroup = _b.NUMGroup, SCOORDGroup = _b.SCOORDGroup, ReferencedFrameNumber = _b.ReferencedFrameNumber;
4750
4751
  var referencedImageId = defaultState.annotation.metadata.referencedImageId;
4751
4752
  var GraphicData = SCOORDGroup.GraphicData;
4752
4753
  var worldCoords = [];
@@ -4770,8 +4771,7 @@ var PlanarFreehandROI = /** @class */ (function () {
4770
4771
  }
4771
4772
  var state = defaultState;
4772
4773
  state.annotation.data = {
4773
- polyline: worldCoords,
4774
- isOpenContour: isOpenContour,
4774
+ contour: { polyline: worldCoords, closed: !isOpenContour },
4775
4775
  handles: {
4776
4776
  points: points,
4777
4777
  activeHandleIndex: null,
@@ -4779,13 +4779,21 @@ var PlanarFreehandROI = /** @class */ (function () {
4779
4779
  hasMoved: false
4780
4780
  }
4781
4781
  },
4782
+ cachedStats: (_a = {},
4783
+ _a["imageId:".concat(referencedImageId)] = {
4784
+ area: NUMGroup
4785
+ ? NUMGroup.MeasuredValueSequence.NumericValue
4786
+ : null
4787
+ },
4788
+ _a),
4782
4789
  frameNumber: ReferencedFrameNumber
4783
4790
  };
4784
4791
  return state;
4785
4792
  };
4786
4793
  PlanarFreehandROI.getTID300RepresentationArguments = function (tool, worldToImageCoords) {
4787
4794
  var data = tool.data, finding = tool.finding, findingSites = tool.findingSites, metadata = tool.metadata;
4788
- var isOpenContour = data.isOpenContour, polyline = data.polyline;
4795
+ var _a = data.contour, polyline = _a.polyline, closed = _a.closed;
4796
+ var isOpenContour = closed !== true;
4789
4797
  var referencedImageId = metadata.referencedImageId;
4790
4798
  if (!referencedImageId) {
4791
4799
  throw new Error("PlanarFreehandROI.getTID300RepresentationArguments: referencedImageId is not defined");
@@ -4799,12 +4807,18 @@ var PlanarFreehandROI = /** @class */ (function () {
4799
4807
  // Explicitly expand to avoid ciruclar references.
4800
4808
  points.push([firstPoint[0], firstPoint[1]]);
4801
4809
  }
4802
- var area = 0; // TODO -> The tool doesn't have these stats yet.
4803
- var perimeter = 0;
4810
+ var _b = data.cachedStats["imageId:".concat(referencedImageId)] || {}, area = _b.area, areaUnit = _b.areaUnit, modalityUnit = _b.modalityUnit, perimeter = _b.perimeter, mean = _b.mean, max = _b.max, stdDev = _b.stdDev;
4804
4811
  return {
4812
+ /** From cachedStats */
4805
4813
  points: points,
4806
4814
  area: area,
4815
+ areaUnit: areaUnit,
4807
4816
  perimeter: perimeter,
4817
+ modalityUnit: modalityUnit,
4818
+ mean: mean,
4819
+ max: max,
4820
+ stdDev: stdDev,
4821
+ /** Other */
4808
4822
  trackingIdentifierTextValue: trackingIdentifierTextValue$2,
4809
4823
  finding: finding,
4810
4824
  findingSites: findingSites || []
@@ -93,14 +93,22 @@ function initDefaultToolGroup(extensionManager, toolGroupService, commandsManage
93
93
  toolName: toolNames.Angle
94
94
  }, {
95
95
  toolName: toolNames.CobbAngle
96
- }, {
97
- toolName: toolNames.PlanarFreehandROI
98
96
  }, {
99
97
  toolName: toolNames.Magnify
100
98
  }, {
101
99
  toolName: toolNames.SegmentationDisplay
102
100
  }, {
103
101
  toolName: toolNames.CalibrationLine
102
+ }, {
103
+ toolName: toolNames.AdvancedMagnify
104
+ }, {
105
+ toolName: toolNames.UltrasoundDirectional
106
+ }, {
107
+ toolName: toolNames.PlanarFreehandROI
108
+ }, {
109
+ toolName: toolNames.SplineROI
110
+ }, {
111
+ toolName: toolNames.LivewireContour
104
112
  }],
105
113
  // enabled
106
114
  enabled: [{
@@ -154,6 +162,10 @@ function initSRToolGroup(extensionManager, toolGroupService) {
154
162
  toolName: SRToolNames.SREllipticalROI
155
163
  }, {
156
164
  toolName: SRToolNames.SRCircleROI
165
+ }, {
166
+ toolName: SRToolNames.SRPlanarFreehandROI
167
+ }, {
168
+ toolName: SRToolNames.SRRectangleROI
157
169
  }],
158
170
  enabled: [{
159
171
  toolName: SRToolNames.DICOMSRDisplay,
@@ -352,6 +364,20 @@ const toolbarButtons = [{
352
364
  tooltip: 'Ellipse ROI',
353
365
  commands: setToolActiveToolbar,
354
366
  evaluate: 'evaluate.cornerstoneTool'
367
+ }), createButton({
368
+ id: 'PlanarFreehandROI',
369
+ icon: 'tool-freehand-polygon',
370
+ label: 'Freehand',
371
+ tooltip: 'Freehand ROI',
372
+ commands: setToolActiveToolbar,
373
+ evaluate: 'evaluate.cornerstoneTool'
374
+ }), createButton({
375
+ id: 'RectangleROI',
376
+ icon: 'tool-rectangle',
377
+ label: 'Rectangle',
378
+ tooltip: 'Rectangle ROI',
379
+ commands: setToolActiveToolbar,
380
+ evaluate: 'evaluate.cornerstoneTool'
355
381
  }), createButton({
356
382
  id: 'CircleROI',
357
383
  icon: 'tool-circle',
@@ -359,6 +385,27 @@ const toolbarButtons = [{
359
385
  tooltip: 'Circle Tool',
360
386
  commands: setToolActiveToolbar,
361
387
  evaluate: 'evaluate.cornerstoneTool'
388
+ }), createButton({
389
+ id: 'PlanarFreehandROI',
390
+ icon: 'icon-tool-freehand-roi',
391
+ label: 'Freehand ROI',
392
+ tooltip: 'Freehand ROI',
393
+ commands: setToolActiveToolbar,
394
+ evaluate: 'evaluate.cornerstoneTool'
395
+ }), createButton({
396
+ id: 'SplineROI',
397
+ icon: 'icon-tool-spline-roi',
398
+ label: 'Spline ROI',
399
+ tooltip: 'Spline ROI',
400
+ commands: setToolActiveToolbar,
401
+ evaluate: 'evaluate.cornerstoneTool'
402
+ }), createButton({
403
+ id: 'LivewireContour',
404
+ icon: 'icon-tool-livewire',
405
+ label: 'Livewire tool',
406
+ tooltip: 'Livewire tool',
407
+ commands: setToolActiveToolbar,
408
+ evaluate: 'evaluate.cornerstoneTool'
362
409
  })]
363
410
  }
364
411
  }, {
@@ -561,7 +608,7 @@ const moreTools = [{
561
608
  commands: 'invertViewport',
562
609
  evaluate: 'evaluate.viewportProperties.toggle'
563
610
  }), moreTools_createButton({
564
- id: 'Probe',
611
+ id: 'DragProbe',
565
612
  icon: 'tool-probe',
566
613
  label: 'Probe',
567
614
  tooltip: 'Probe',
@@ -588,13 +635,6 @@ const moreTools = [{
588
635
  tooltip: 'Magnify',
589
636
  commands: setToolActiveToolbar,
590
637
  evaluate: 'evaluate.cornerstoneTool'
591
- }), moreTools_createButton({
592
- id: 'RectangleROI',
593
- icon: 'tool-rectangle',
594
- label: 'Rectangle',
595
- tooltip: 'Rectangle',
596
- commands: setToolActiveToolbar,
597
- evaluate: 'evaluate.cornerstoneTool'
598
638
  }), moreTools_createButton({
599
639
  id: 'CalibrationLine',
600
640
  icon: 'tool-calibration',
@@ -604,10 +644,24 @@ const moreTools = [{
604
644
  evaluate: 'evaluate.cornerstoneTool'
605
645
  }), moreTools_createButton({
606
646
  id: 'TagBrowser',
607
- icon: 'list-bullets',
647
+ icon: 'dicom-tag-browser',
608
648
  label: 'Dicom Tag Browser',
609
649
  tooltip: 'Dicom Tag Browser',
610
650
  commands: 'openDICOMTagViewer'
651
+ }), moreTools_createButton({
652
+ id: 'AdvancedMagnify',
653
+ icon: 'icon-tool-loupe',
654
+ label: 'Loupe',
655
+ tooltip: 'Loupe',
656
+ commands: setToolActiveToolbar,
657
+ evaluate: 'evaluate.cornerstoneTool'
658
+ }), moreTools_createButton({
659
+ id: 'UltrasoundDirectionalTool',
660
+ icon: 'icon-tool-ultrasound-bidirectional',
661
+ label: 'Ultrasound Directional',
662
+ tooltip: 'Ultrasound Directional',
663
+ commands: setToolActiveToolbar,
664
+ evaluate: ['evaluate.cornerstoneTool', 'evaluate.isUS']
611
665
  })]
612
666
  }
613
667
  }];