@cornerstonejs/tools 0.40.2 → 0.41.0

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.
@@ -0,0 +1,40 @@
1
+ import AnnotationDisplayTool from './base/AnnotationDisplayTool';
2
+ import { ScaleOverlayAnnotation } from '../types/ToolSpecificAnnotationTypes';
3
+ import type { Types } from '@cornerstonejs/core';
4
+ import { EventTypes, PublicToolProps, ToolProps, SVGDrawingHelper } from '../types';
5
+ declare class ScaleOverlayTool extends AnnotationDisplayTool {
6
+ static toolName: any;
7
+ touchDragCallback: any;
8
+ mouseDragCallback: any;
9
+ _throttledCalculateCachedStats: any;
10
+ editData: {
11
+ renderingEngine: any;
12
+ viewport: any;
13
+ annotation: ScaleOverlayAnnotation;
14
+ } | null;
15
+ isDrawing: boolean;
16
+ isHandleOutsideImage: boolean;
17
+ constructor(toolProps?: PublicToolProps, defaultToolProps?: ToolProps);
18
+ _init: () => void;
19
+ onSetToolEnabled: () => void;
20
+ onCameraModified: (evt: Types.EventTypes.CameraModifiedEvent) => void;
21
+ renderAnnotation(enabledElement: Types.IEnabledElement, svgDrawingHelper: SVGDrawingHelper): boolean;
22
+ _getTextLines(scaleSize: number): string[] | undefined;
23
+ computeScaleSize: (worldWidthViewport: number, worldHeightViewport: number, location: any) => any;
24
+ computeEndScaleTicks: (canvasCoordinates: any, location: any) => {
25
+ endTick1: any[][];
26
+ endTick2: any[][];
27
+ };
28
+ computeInnerScaleTicks: (scaleSize: number, location: string, annotationUID: string, leftTick: any[][], rightTick: any[][]) => {
29
+ tickIds: any[];
30
+ tickUIDs: any[];
31
+ tickCoordinates: any[];
32
+ };
33
+ computeWorldScaleCoordinates: (scaleSize: any, location: any, pointSet: any) => any;
34
+ computeCanvasScaleCoordinates: (canvasSize: any, canvasCoordinates: any, vscaleBounds: any, hscaleBounds: any, location: any) => any;
35
+ computeScaleBounds: (canvasSize: any, horizontalReduction: any, verticalReduction: any, location: any) => {
36
+ height: any;
37
+ width: any;
38
+ };
39
+ }
40
+ export default ScaleOverlayTool;
@@ -0,0 +1,395 @@
1
+ import AnnotationDisplayTool from './base/AnnotationDisplayTool';
2
+ import { vec3 } from 'gl-matrix';
3
+ import { getEnabledElementByIds, getRenderingEngines, utilities as csUtils, } from '@cornerstonejs/core';
4
+ import { addAnnotation, getAnnotations, } from '../stateManagement/annotation/annotationState';
5
+ import { drawLine as drawLineSvg, drawTextBox as drawTextBoxSvg, } from '../drawingSvg';
6
+ import { getToolGroup } from '../store/ToolGroupManager';
7
+ const SCALEOVERLAYTOOL_ID = 'scaleoverlay-viewport';
8
+ const viewportsWithAnnotations = [];
9
+ class ScaleOverlayTool extends AnnotationDisplayTool {
10
+ constructor(toolProps = {}, defaultToolProps = {
11
+ configuration: {
12
+ viewportId: '',
13
+ scaleLocation: 'bottom',
14
+ },
15
+ }) {
16
+ super(toolProps, defaultToolProps);
17
+ this.editData = {};
18
+ this._init = () => {
19
+ const renderingEngines = getRenderingEngines();
20
+ const renderingEngine = renderingEngines[0];
21
+ if (!renderingEngine) {
22
+ return;
23
+ }
24
+ const viewportIds = getToolGroup(this.toolGroupId).viewportsInfo;
25
+ if (!viewportIds)
26
+ return;
27
+ const enabledElements = viewportIds.map((e) => getEnabledElementByIds(e.viewportId, e.renderingEngineId));
28
+ let viewport = enabledElements[0].viewport;
29
+ if (this.configuration.viewportId) {
30
+ enabledElements.forEach((element) => {
31
+ if (element.viewport.id == this.configuration.viewportId) {
32
+ viewport = element.viewport;
33
+ }
34
+ });
35
+ }
36
+ if (!viewport) {
37
+ return;
38
+ }
39
+ const { element } = viewport;
40
+ const { viewUp, viewPlaneNormal } = viewport.getCamera();
41
+ const viewportCanvasCornersInWorld = csUtils.getViewportImageCornersInWorld(viewport);
42
+ let annotation = this.editData.annotation;
43
+ const annotations = getAnnotations(element, this.getToolName());
44
+ if (annotations) {
45
+ annotation = annotations.filter((thisAnnotation) => thisAnnotation.data.viewportId == viewport.id)[0];
46
+ }
47
+ if (!viewportsWithAnnotations.includes(viewport.id)) {
48
+ const newAnnotation = {
49
+ metadata: {
50
+ toolName: this.getToolName(),
51
+ viewPlaneNormal: [...viewPlaneNormal],
52
+ viewUp: [...viewUp],
53
+ FrameOfReferenceUID: viewport.getFrameOfReferenceUID(),
54
+ referencedImageId: null,
55
+ },
56
+ data: {
57
+ handles: {
58
+ points: viewportCanvasCornersInWorld,
59
+ },
60
+ viewportId: viewport.id,
61
+ },
62
+ };
63
+ viewportsWithAnnotations.push(viewport.id);
64
+ addAnnotation(element, newAnnotation);
65
+ annotation = newAnnotation;
66
+ }
67
+ else if (this.editData.annotation.data.viewportId == viewport.id) {
68
+ this.editData.annotation.data.handles.points =
69
+ viewportCanvasCornersInWorld;
70
+ this.editData.annotation.data.viewportId = viewport.id;
71
+ }
72
+ this.editData = {
73
+ viewport,
74
+ renderingEngine,
75
+ annotation,
76
+ };
77
+ };
78
+ this.onSetToolEnabled = () => {
79
+ this._init();
80
+ };
81
+ this.onCameraModified = (evt) => {
82
+ this.configuration.viewportId = evt.detail.viewportId;
83
+ this._init();
84
+ };
85
+ this.computeScaleSize = (worldWidthViewport, worldHeightViewport, location) => {
86
+ const scaleSizes = [
87
+ 16000, 8000, 4000, 2000, 1000, 500, 250, 100, 50, 25, 10, 5, 2,
88
+ ];
89
+ let currentScaleSize;
90
+ if (location == 'top' || location == 'bottom') {
91
+ currentScaleSize = scaleSizes.filter((scaleSize) => scaleSize < worldWidthViewport * 0.6 &&
92
+ scaleSize > worldWidthViewport * 0.2);
93
+ }
94
+ else {
95
+ currentScaleSize = scaleSizes.filter((scaleSize) => scaleSize < worldHeightViewport * 0.6 &&
96
+ scaleSize > worldHeightViewport * 0.2);
97
+ }
98
+ return currentScaleSize[0];
99
+ };
100
+ this.computeEndScaleTicks = (canvasCoordinates, location) => {
101
+ const locationTickOffset = {
102
+ bottom: [
103
+ [0, -10],
104
+ [0, -10],
105
+ ],
106
+ top: [
107
+ [0, 10],
108
+ [0, 10],
109
+ ],
110
+ left: [
111
+ [0, 0],
112
+ [10, 0],
113
+ ],
114
+ right: [
115
+ [0, 0],
116
+ [-10, 0],
117
+ ],
118
+ };
119
+ const endTick1 = [
120
+ [
121
+ canvasCoordinates[1][0] + locationTickOffset[location][0][0],
122
+ canvasCoordinates[1][1] + locationTickOffset[location][0][0],
123
+ ],
124
+ [
125
+ canvasCoordinates[1][0] + locationTickOffset[location][1][0],
126
+ canvasCoordinates[1][1] + locationTickOffset[location][1][1],
127
+ ],
128
+ ];
129
+ const endTick2 = [
130
+ [
131
+ canvasCoordinates[0][0] + locationTickOffset[location][0][0],
132
+ canvasCoordinates[0][1] + locationTickOffset[location][0][0],
133
+ ],
134
+ [
135
+ canvasCoordinates[0][0] + locationTickOffset[location][1][0],
136
+ canvasCoordinates[0][1] + locationTickOffset[location][1][1],
137
+ ],
138
+ ];
139
+ return {
140
+ endTick1: endTick1,
141
+ endTick2: endTick2,
142
+ };
143
+ };
144
+ this.computeInnerScaleTicks = (scaleSize, location, annotationUID, leftTick, rightTick) => {
145
+ let canvasScaleSize;
146
+ if (location == 'bottom' || location == 'top') {
147
+ canvasScaleSize = rightTick[0][0] - leftTick[0][0];
148
+ }
149
+ else if (location == 'left' || location == 'right') {
150
+ canvasScaleSize = rightTick[0][1] - leftTick[0][1];
151
+ }
152
+ const tickIds = [];
153
+ const tickUIDs = [];
154
+ const tickCoordinates = [];
155
+ let numberSmallTicks = scaleSize;
156
+ if (scaleSize >= 50) {
157
+ numberSmallTicks = scaleSize / 10;
158
+ }
159
+ const tickSpacing = canvasScaleSize / numberSmallTicks;
160
+ for (let i = 0; i < numberSmallTicks - 1; i++) {
161
+ const locationOffset = {
162
+ bottom: [
163
+ [tickSpacing * (i + 1), 0],
164
+ [tickSpacing * (i + 1), 5],
165
+ ],
166
+ top: [
167
+ [tickSpacing * (i + 1), 0],
168
+ [tickSpacing * (i + 1), -5],
169
+ ],
170
+ left: [
171
+ [0, tickSpacing * (i + 1)],
172
+ [-5, tickSpacing * (i + 1)],
173
+ ],
174
+ right: [
175
+ [0, tickSpacing * (i + 1)],
176
+ [5, tickSpacing * (i + 1)],
177
+ ],
178
+ };
179
+ tickIds.push(`${annotationUID}-tick${i}`);
180
+ tickUIDs.push(`tick${i}`);
181
+ if ((i + 1) % 5 == 0) {
182
+ tickCoordinates.push([
183
+ [
184
+ leftTick[0][0] + locationOffset[location][0][0],
185
+ leftTick[0][1] + locationOffset[location][0][1],
186
+ ],
187
+ [
188
+ leftTick[1][0] + locationOffset[location][0][0],
189
+ leftTick[1][1] + locationOffset[location][0][1],
190
+ ],
191
+ ]);
192
+ }
193
+ else {
194
+ tickCoordinates.push([
195
+ [
196
+ leftTick[0][0] + locationOffset[location][0][0],
197
+ leftTick[0][1] + locationOffset[location][0][1],
198
+ ],
199
+ [
200
+ leftTick[1][0] + locationOffset[location][1][0],
201
+ leftTick[1][1] + locationOffset[location][1][1],
202
+ ],
203
+ ]);
204
+ }
205
+ }
206
+ return { tickIds, tickUIDs, tickCoordinates };
207
+ };
208
+ this.computeWorldScaleCoordinates = (scaleSize, location, pointSet) => {
209
+ let worldCoordinates;
210
+ let topBottomVec = vec3.subtract(vec3.create(), pointSet[0], pointSet[1]);
211
+ topBottomVec = vec3.normalize(vec3.create(), topBottomVec);
212
+ let topRightVec = vec3.subtract(vec3.create(), pointSet[2], pointSet[0]);
213
+ topRightVec = vec3.normalize(vec3.create(), topRightVec);
214
+ const midpointLocation = {
215
+ bottom: [pointSet[1], pointSet[2]],
216
+ top: [pointSet[0], pointSet[3]],
217
+ right: [pointSet[2], pointSet[3]],
218
+ left: [pointSet[0], pointSet[1]],
219
+ };
220
+ const midpoint = vec3
221
+ .add(vec3.create(), midpointLocation[location][0], midpointLocation[location][0])
222
+ .map((i) => i / 2);
223
+ const offset = scaleSize /
224
+ 2 /
225
+ Math.sqrt(Math.pow(topBottomVec[0], 2) +
226
+ Math.pow(topBottomVec[1], 2) +
227
+ Math.pow(topBottomVec[2], 2));
228
+ if (location == 'top' || location == 'bottom') {
229
+ worldCoordinates = [
230
+ vec3.subtract(vec3.create(), midpoint, topRightVec.map((i) => i * offset)),
231
+ vec3.add(vec3.create(), midpoint, topRightVec.map((i) => i * offset)),
232
+ ];
233
+ }
234
+ else if (location == 'left' || location == 'right') {
235
+ worldCoordinates = [
236
+ vec3.add(vec3.create(), midpoint, topBottomVec.map((i) => i * offset)),
237
+ vec3.subtract(vec3.create(), midpoint, topBottomVec.map((i) => i * offset)),
238
+ ];
239
+ }
240
+ return worldCoordinates;
241
+ };
242
+ this.computeCanvasScaleCoordinates = (canvasSize, canvasCoordinates, vscaleBounds, hscaleBounds, location) => {
243
+ let scaleCanvasCoordinates;
244
+ if (location == 'top' || location == 'bottom') {
245
+ const worldDistanceOnCanvas = canvasCoordinates[0][0] - canvasCoordinates[1][0];
246
+ scaleCanvasCoordinates = [
247
+ [canvasSize.width / 2 - worldDistanceOnCanvas / 2, vscaleBounds.height],
248
+ [canvasSize.width / 2 + worldDistanceOnCanvas / 2, vscaleBounds.height],
249
+ ];
250
+ }
251
+ else if (location == 'left' || location == 'right') {
252
+ const worldDistanceOnCanvas = canvasCoordinates[0][1] - canvasCoordinates[1][1];
253
+ scaleCanvasCoordinates = [
254
+ [hscaleBounds.width, canvasSize.height / 2 - worldDistanceOnCanvas / 2],
255
+ [hscaleBounds.width, canvasSize.height / 2 + worldDistanceOnCanvas / 2],
256
+ ];
257
+ }
258
+ return scaleCanvasCoordinates;
259
+ };
260
+ this.computeScaleBounds = (canvasSize, horizontalReduction, verticalReduction, location) => {
261
+ const hReduction = horizontalReduction * Math.min(1000, canvasSize.width);
262
+ const vReduction = verticalReduction * Math.min(1000, canvasSize.height);
263
+ const locationBounds = {
264
+ bottom: [-vReduction, -hReduction],
265
+ top: [vReduction, hReduction],
266
+ left: [vReduction, hReduction],
267
+ right: [-vReduction, -hReduction],
268
+ };
269
+ const canvasBounds = {
270
+ bottom: [canvasSize.height, canvasSize.width],
271
+ top: [0, canvasSize.width],
272
+ left: [canvasSize.height, 0],
273
+ right: [canvasSize.height, canvasSize.width],
274
+ };
275
+ return {
276
+ height: canvasBounds[location][0] + locationBounds[location][0],
277
+ width: canvasBounds[location][1] + locationBounds[location][1],
278
+ };
279
+ };
280
+ }
281
+ renderAnnotation(enabledElement, svgDrawingHelper) {
282
+ if (!this.editData.viewport) {
283
+ return;
284
+ }
285
+ const location = this.configuration.scaleLocation;
286
+ const { viewport } = enabledElement;
287
+ const { element } = viewport;
288
+ const annotations = getAnnotations(element, this.getToolName());
289
+ const annotation = annotations.filter((thisAnnotation) => thisAnnotation.data.viewportId == viewport.id)[0];
290
+ const canvas = enabledElement.viewport.canvas;
291
+ const renderStatus = false;
292
+ if (!viewport) {
293
+ return renderStatus;
294
+ }
295
+ const styleSpecifier = {
296
+ toolGroupId: this.toolGroupId,
297
+ toolName: this.getToolName(),
298
+ viewportId: enabledElement.viewport.id,
299
+ };
300
+ const canvasSize = {
301
+ width: canvas.width,
302
+ height: canvas.height,
303
+ };
304
+ const topLeft = annotation.data.handles.points[0];
305
+ const topRight = annotation.data.handles.points[1];
306
+ const bottomLeft = annotation.data.handles.points[2];
307
+ const bottomRight = annotation.data.handles.points[3];
308
+ const pointSet1 = [topLeft, bottomLeft, topRight, bottomRight];
309
+ const worldWidthViewport = vec3.distance(bottomLeft, bottomRight);
310
+ const worldHeightViewport = vec3.distance(topLeft, bottomLeft);
311
+ const hscaleBounds = this.computeScaleBounds(canvasSize, 0.05, 0.05, location);
312
+ const vscaleBounds = this.computeScaleBounds(canvasSize, 0.05, 0.05, location);
313
+ const scaleSize = this.computeScaleSize(worldWidthViewport, worldHeightViewport, location);
314
+ const canvasCoordinates = this.computeWorldScaleCoordinates(scaleSize, location, pointSet1).map((world) => viewport.worldToCanvas(world));
315
+ const scaleCanvasCoordinates = this.computeCanvasScaleCoordinates(canvasSize, canvasCoordinates, vscaleBounds, hscaleBounds, location);
316
+ const scaleTicks = this.computeEndScaleTicks(scaleCanvasCoordinates, location);
317
+ const { annotationUID } = annotation;
318
+ styleSpecifier.annotationUID = annotationUID;
319
+ const lineWidth = this.getStyle('lineWidth', styleSpecifier, annotation);
320
+ const lineDash = this.getStyle('lineDash', styleSpecifier, annotation);
321
+ const color = this.getStyle('color', styleSpecifier, annotation);
322
+ const shadow = this.getStyle('shadow', styleSpecifier, annotation);
323
+ const scaleId = `${annotationUID}-scaleline`;
324
+ const scaleLineUID = '1';
325
+ drawLineSvg(svgDrawingHelper, annotationUID, scaleLineUID, scaleCanvasCoordinates[0], scaleCanvasCoordinates[1], {
326
+ color,
327
+ width: lineWidth,
328
+ lineDash,
329
+ shadow,
330
+ }, scaleId);
331
+ const leftTickId = `${annotationUID}-left`;
332
+ const leftTickUID = '2';
333
+ drawLineSvg(svgDrawingHelper, annotationUID, leftTickUID, scaleTicks.endTick1[0], scaleTicks.endTick1[1], {
334
+ color,
335
+ width: lineWidth,
336
+ lineDash,
337
+ shadow,
338
+ }, leftTickId);
339
+ const rightTickId = `${annotationUID}-right`;
340
+ const rightTickUID = '3';
341
+ drawLineSvg(svgDrawingHelper, annotationUID, rightTickUID, scaleTicks.endTick2[0], scaleTicks.endTick2[1], {
342
+ color,
343
+ width: lineWidth,
344
+ lineDash,
345
+ shadow,
346
+ }, rightTickId);
347
+ const locationTextOffest = {
348
+ bottom: [-10, -42],
349
+ top: [-12, -35],
350
+ left: [-40, -20],
351
+ right: [-50, -20],
352
+ };
353
+ const textCanvasCoordinates = [
354
+ scaleCanvasCoordinates[0][0] + locationTextOffest[location][0],
355
+ scaleCanvasCoordinates[0][1] + locationTextOffest[location][1],
356
+ ];
357
+ const textBoxLines = this._getTextLines(scaleSize);
358
+ const { tickIds, tickUIDs, tickCoordinates } = this.computeInnerScaleTicks(scaleSize, location, annotationUID, scaleTicks.endTick1, scaleTicks.endTick2);
359
+ for (let i = 0; i < tickUIDs.length; i++) {
360
+ drawLineSvg(svgDrawingHelper, annotationUID, tickUIDs[i], tickCoordinates[i][0], tickCoordinates[i][1], {
361
+ color,
362
+ width: lineWidth,
363
+ lineDash,
364
+ shadow,
365
+ }, tickIds[i]);
366
+ }
367
+ const textUID = 'text0';
368
+ drawTextBoxSvg(svgDrawingHelper, annotationUID, textUID, textBoxLines, [textCanvasCoordinates[0], textCanvasCoordinates[1]], {
369
+ fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
370
+ fontSize: '14px',
371
+ lineDash: '2,3',
372
+ lineWidth: '1',
373
+ shadow: true,
374
+ color: color,
375
+ });
376
+ return renderStatus;
377
+ }
378
+ _getTextLines(scaleSize) {
379
+ let scaleSizeDisplayValue;
380
+ let scaleSizeUnits;
381
+ if (scaleSize >= 50) {
382
+ scaleSizeDisplayValue = scaleSize / 10;
383
+ scaleSizeUnits = ' cm';
384
+ }
385
+ else {
386
+ scaleSizeDisplayValue = scaleSize;
387
+ scaleSizeUnits = ' mm';
388
+ }
389
+ const textLines = [scaleSizeDisplayValue.toString().concat(scaleSizeUnits)];
390
+ return textLines;
391
+ }
392
+ }
393
+ ScaleOverlayTool.toolName = 'ScaleOverlay';
394
+ export default ScaleOverlayTool;
395
+ //# sourceMappingURL=ScaleOverlayTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScaleOverlayTool.js","sourceRoot":"","sources":["../../../src/tools/ScaleOverlayTool.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,IAAI,OAAO,GACrB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,cAAc,GACf,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,QAAQ,IAAI,WAAW,EACvB,WAAW,IAAI,cAAc,GAC9B,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAUpC,MAAM,gBAAiB,SAAQ,qBAAqB;IAclD,YACE,YAA6B,EAAE,EAC/B,mBAA8B;QAC5B,aAAa,EAAE;YACb,UAAU,EAAE,EAAE;YACd,aAAa,EAAE,QAAQ;SACxB;KACF;QAED,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAjBrC,aAAQ,GAIG,EAAS,CAAC;QAgBrB,UAAK,GAAG,GAAS,EAAE;YACjB,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;YAC/C,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAE5C,IAAI,CAAC,eAAe,EAAE;gBACpB,OAAO;aACR;YAGD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC;YAEjE,IAAI,CAAC,WAAW;gBAAE,OAAO;YAGzB,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,sBAAsB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAC1D,CAAC;YAEF,IAAI,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAK3C,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;gBACjC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAClC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;wBACxD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;qBAC7B;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO;aACR;YAED,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;YAC7B,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YAEzD,MAAM,4BAA4B,GAChC,OAAO,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;YAEnD,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAE1C,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAIhE,IAAI,WAAW,EAAE;gBACf,UAAU,GAAG,WAAW,CAAC,MAAM,CAC7B,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,CAClE,CAAC,CAAC,CAA2B,CAAC;aAChC;YAID,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBACnD,MAAM,aAAa,GAA2B;oBAC5C,QAAQ,EAAE;wBACR,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;wBAC5B,eAAe,EAAgB,CAAC,GAAG,eAAe,CAAC;wBACnD,MAAM,EAAgB,CAAC,GAAG,MAAM,CAAC;wBACjC,mBAAmB,EAAE,QAAQ,CAAC,sBAAsB,EAAE;wBACtD,iBAAiB,EAAE,IAAI;qBACxB;oBACD,IAAI,EAAE;wBACJ,OAAO,EAAE;4BACP,MAAM,EAAE,4BAA4B;yBACrC;wBACD,UAAU,EAAE,QAAQ,CAAC,EAAE;qBACxB;iBACF,CAAC;gBAEF,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAE3C,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACtC,UAAU,GAAG,aAAa,CAAC;aAC5B;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,EAAE;gBAClE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC1C,4BAA4B,CAAC;gBAC/B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;aACxD;YAED,IAAI,CAAC,QAAQ,GAAG;gBACd,QAAQ;gBACR,eAAe;gBACf,UAAU;aACX,CAAC;QACJ,CAAC,CAAC;QAEF,qBAAgB,GAAG,GAAS,EAAE;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC;QAEF,qBAAgB,GAAG,CAAC,GAAyC,EAAQ,EAAE;YAGrE,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;YACtD,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC;QAgPF,qBAAgB,GAAG,CACjB,kBAA0B,EAC1B,mBAA2B,EAC3B,QAAa,EACb,EAAE;YACF,MAAM,UAAU,GAAG;gBACjB,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;aAC/D,CAAC;YACF,IAAI,gBAAgB,CAAC;YACrB,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,EAAE;gBAC7C,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAClC,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,GAAG,kBAAkB,GAAG,GAAG;oBACpC,SAAS,GAAG,kBAAkB,GAAG,GAAG,CACvC,CAAC;aACH;iBAAM;gBACL,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAClC,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,GAAG,mBAAmB,GAAG,GAAG;oBACrC,SAAS,GAAG,mBAAmB,GAAG,GAAG,CACxC,CAAC;aACH;YAED,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QAOF,yBAAoB,GAAG,CAAC,iBAAiB,EAAE,QAAQ,EAAE,EAAE;YACrD,MAAM,kBAAkB,GAAG;gBACzB,MAAM,EAAE;oBACN,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBACR,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;iBACT;gBACD,GAAG,EAAE;oBACH,CAAC,CAAC,EAAE,EAAE,CAAC;oBACP,CAAC,CAAC,EAAE,EAAE,CAAC;iBACR;gBACD,IAAI,EAAE;oBACJ,CAAC,CAAC,EAAE,CAAC,CAAC;oBACN,CAAC,EAAE,EAAE,CAAC,CAAC;iBACR;gBACD,KAAK,EAAE;oBACL,CAAC,CAAC,EAAE,CAAC,CAAC;oBACN,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBACT;aACF,CAAC;YAEF,MAAM,QAAQ,GAAG;gBACf;oBACE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5D,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7D;gBACD;oBACE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5D,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7D;aACF,CAAC;YACF,MAAM,QAAQ,GAAG;gBACf;oBACE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5D,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7D;gBACD;oBACE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5D,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7D;aACF,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;aACnB,CAAC;QACJ,CAAC,CAAC;QAEF,2BAAsB,GAAG,CACvB,SAAiB,EACjB,QAAgB,EAChB,aAAqB,EACrB,QAAiB,EACjB,SAAkB,EAClB,EAAE;YACF,IAAI,eAAe,CAAC;YACpB,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE;gBAC7C,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACpD;iBAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAO,EAAE;gBACpD,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACpD;YACD,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,MAAM,eAAe,GAAG,EAAE,CAAC;YAC3B,IAAI,gBAAgB,GAAG,SAAS,CAAC;YAEjC,IAAI,SAAS,IAAI,EAAE,EAAE;gBACnB,gBAAgB,GAAG,SAAS,GAAG,EAAE,CAAC;aACnC;YAED,MAAM,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC;YAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,cAAc,GAAG;oBACrB,MAAM,EAAE;wBACN,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC1B,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC3B;oBACD,GAAG,EAAE;wBACH,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC1B,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC5B;oBACD,IAAI,EAAE;wBACJ,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC1B,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC5B;oBACD,KAAK,EAAE;wBACL,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC1B,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC3B;iBACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACpB,eAAe,CAAC,IAAI,CAAC;wBACnB;4BACE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBAChD;wBACD;4BACE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBAChD;qBACF,CAAC,CAAC;iBACJ;qBAAM;oBACL,eAAe,CAAC,IAAI,CAAC;wBACnB;4BACE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBAChD;wBACD;4BACE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBAChD;qBACF,CAAC,CAAC;iBACJ;aACF;YAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAChD,CAAC,CAAC;QAEF,iCAA4B,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC/D,IAAI,gBAAgB,CAAC;YACrB,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAiB,CAAC;YAE3E,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;YAEzD,MAAM,gBAAgB,GAAG;gBACvB,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;aACjC,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI;iBAClB,GAAG,CACF,IAAI,CAAC,MAAM,EAAE,EACb,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC7B,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC9B;iBACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAiB,CAAC;YAErC,MAAM,MAAM,GACV,SAAS;gBACT,CAAC;gBACD,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC/B,CAAC;YAEJ,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,EAAE;gBAC7C,gBAAgB,GAAG;oBACjB,IAAI,CAAC,QAAQ,CACX,IAAI,CAAC,MAAM,EAAE,EACb,QAAQ,EACR,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAiB,CACnD;oBACD,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,MAAM,EAAE,EACb,QAAQ,EACR,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAiB,CACnD;iBACF,CAAC;aACH;iBAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAO,EAAE;gBACpD,gBAAgB,GAAG;oBACjB,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,MAAM,EAAE,EACb,QAAQ,EACR,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAiB,CACpD;oBACD,IAAI,CAAC,QAAQ,CACX,IAAI,CAAC,MAAM,EAAE,EACb,QAAQ,EACR,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAiB,CACpD;iBACF,CAAC;aACH;YAED,OAAO,gBAAgB,CAAC;QAC1B,CAAC,CAAC;QASF,kCAA6B,GAAG,CAC9B,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,EAAE;YACF,IAAI,sBAAsB,CAAC;YAC3B,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,EAAE;gBAC7C,MAAM,qBAAqB,GACzB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,sBAAsB,GAAG;oBACvB,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;oBACvE,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;iBACxE,CAAC;aACH;iBAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAO,EAAE;gBACpD,MAAM,qBAAqB,GACzB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,sBAAsB,GAAG;oBACvB,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC,CAAC;oBACvE,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC,CAAC;iBACxE,CAAC;aACH;YAED,OAAO,sBAAsB,CAAC;QAChC,CAAC,CAAC;QASF,uBAAkB,GAAG,CACnB,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,QAAQ,EACR,EAAE;YACF,MAAM,UAAU,GAAG,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1E,MAAM,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,cAAc,GAAG;gBACrB,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC;gBAClC,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;gBAC7B,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;gBAC9B,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC;aAClC,CAAC;YACF,MAAM,YAAY,GAAG;gBACnB,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC;gBAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC;gBAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5B,KAAK,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC;aAC7C,CAAC;YAEF,OAAO;gBACL,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/D,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC/D,CAAC;QACJ,CAAC,CAAC;IA5mBF,CAAC;IA+GD,gBAAgB,CACd,cAAqC,EACrC,gBAAkC;QAElC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC3B,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;QACpC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAE7B,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CACnC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE,CAClE,CAAC,CAAC,CAAC,CAAC;QACL,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE9C,MAAM,YAAY,GAAG,KAAK,CAAC;QAE3B,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,YAAY,CAAC;SACrB;QAED,MAAM,cAAc,GAAmB;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;YAC5B,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE;SACvC,CAAC;QAEF,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;QAEF,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtD,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/D,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAG/D,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAC1C,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,QAAQ,CACT,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAC1C,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,QAAQ,CACT,CAAC;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CACrC,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,CACT,CAAC;QAIF,MAAM,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CACzD,SAAS,EACT,QAAQ,EACR,SAAS,CACV,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAIhD,MAAM,sBAAsB,GAAG,IAAI,CAAC,6BAA6B,CAC/D,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,QAAQ,CACT,CAAC;QAGF,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAC1C,sBAAsB,EACtB,QAAQ,CACT,CAAC;QAEF,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC;QAErC,cAAc,CAAC,aAAa,GAAG,aAAa,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QAEnE,MAAM,OAAO,GAAG,GAAG,aAAa,YAAY,CAAC;QAC7C,MAAM,YAAY,GAAG,GAAG,CAAC;QACzB,WAAW,CACT,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,sBAAsB,CAAC,CAAC,CAAC,EACzB,sBAAsB,CAAC,CAAC,CAAC,EACzB;YACE,KAAK;YACL,KAAK,EAAE,SAAS;YAChB,QAAQ;YACR,MAAM;SACP,EACD,OAAO,CACR,CAAC;QACF,MAAM,UAAU,GAAG,GAAG,aAAa,OAAO,CAAC;QAC3C,MAAM,WAAW,GAAG,GAAG,CAAC;QAExB,WAAW,CACT,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAiB,EACtC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAiB,EACtC;YACE,KAAK;YACL,KAAK,EAAE,SAAS;YAChB,QAAQ;YACR,MAAM;SACP,EACD,UAAU,CACX,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,aAAa,QAAQ,CAAC;QAC7C,MAAM,YAAY,GAAG,GAAG,CAAC;QAEzB,WAAW,CACT,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAiB,EACtC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAiB,EACtC;YACE,KAAK;YACL,KAAK,EAAE,SAAS;YAChB,QAAQ;YACR,MAAM;SACP,EACD,WAAW,CACZ,CAAC;QAEF,MAAM,kBAAkB,GAAG;YACzB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAClB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAChB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;SAClB,CAAC;QAEF,MAAM,qBAAqB,GAAG;YAC5B,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9D,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC/D,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEnD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,sBAAsB,CACxE,SAAS,EACT,QAAQ,EACR,aAAa,EACb,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,QAAQ,CACpB,CAAC;QAGF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,WAAW,CACT,gBAAgB,EAChB,aAAa,EACb,QAAQ,CAAC,CAAC,CAAC,EACX,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrB,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrB;gBACE,KAAK;gBACL,KAAK,EAAE,SAAS;gBAChB,QAAQ;gBACR,MAAM;aACP,EACD,OAAO,CAAC,CAAC,CAAC,CACX,CAAC;SACH;QAED,MAAM,OAAO,GAAG,OAAO,CAAC;QACxB,cAAc,CACZ,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,EACpD;YACE,UAAU,EAAE,8CAA8C;YAC1D,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,GAAG;YACd,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,KAAK;SACb,CACF,CAAC;QAEF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,qBAAqB,CAAC;QAC1B,IAAI,cAAc,CAAC;QACnB,IAAI,SAAS,IAAI,EAAE,EAAE;YACnB,qBAAqB,GAAG,SAAS,GAAG,EAAE,CAAC;YACvC,cAAc,GAAG,KAAK,CAAC;SACxB;aAAM;YACL,qBAAqB,GAAG,SAAS,CAAC;YAClC,cAAc,GAAG,KAAK,CAAC;SACxB;QAED,MAAM,SAAS,GAAG,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAE5E,OAAO,SAAS,CAAC;IACnB,CAAC;CAgSF;AAED,gBAAgB,CAAC,QAAQ,GAAG,cAAc,CAAC;AAC3C,eAAe,gBAAgB,CAAC"}
@@ -22,6 +22,7 @@ import AngleTool from './annotation/AngleTool';
22
22
  import CobbAngleTool from './annotation/CobbAngleTool';
23
23
  import ReferenceCursors from './ReferenceCursors';
24
24
  import ReferenceLines from './ReferenceLinesTool';
25
+ import ScaleOverlayTool from './ScaleOverlayTool';
25
26
  import SegmentationDisplayTool from './displayTools/SegmentationDisplayTool';
26
27
  import RectangleScissorsTool from './segmentation/RectangleScissorsTool';
27
28
  import CircleScissorsTool from './segmentation/CircleScissorsTool';
@@ -30,4 +31,4 @@ import RectangleROIThresholdTool from './segmentation/RectangleROIThresholdTool'
30
31
  import RectangleROIStartEndThresholdTool from './segmentation/RectangleROIStartEndThresholdTool';
31
32
  import BrushTool from './segmentation/BrushTool';
32
33
  import PaintFillTool from './segmentation/PaintFillTool';
33
- export { BaseTool, AnnotationTool, PanTool, TrackballRotateTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, ReferenceLinesTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, AngleTool, CobbAngleTool, ReferenceCursors, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, MagnifyTool, ReferenceLines, PaintFillTool, };
34
+ export { BaseTool, AnnotationTool, PanTool, TrackballRotateTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, ReferenceLinesTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, AngleTool, CobbAngleTool, ReferenceCursors, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, MagnifyTool, ReferenceLines, PaintFillTool, ScaleOverlayTool, };
@@ -22,6 +22,7 @@ import AngleTool from './annotation/AngleTool';
22
22
  import CobbAngleTool from './annotation/CobbAngleTool';
23
23
  import ReferenceCursors from './ReferenceCursors';
24
24
  import ReferenceLines from './ReferenceLinesTool';
25
+ import ScaleOverlayTool from './ScaleOverlayTool';
25
26
  import SegmentationDisplayTool from './displayTools/SegmentationDisplayTool';
26
27
  import RectangleScissorsTool from './segmentation/RectangleScissorsTool';
27
28
  import CircleScissorsTool from './segmentation/CircleScissorsTool';
@@ -30,5 +31,5 @@ import RectangleROIThresholdTool from './segmentation/RectangleROIThresholdTool'
30
31
  import RectangleROIStartEndThresholdTool from './segmentation/RectangleROIStartEndThresholdTool';
31
32
  import BrushTool from './segmentation/BrushTool';
32
33
  import PaintFillTool from './segmentation/PaintFillTool';
33
- export { BaseTool, AnnotationTool, PanTool, TrackballRotateTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, ReferenceLinesTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, AngleTool, CobbAngleTool, ReferenceCursors, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, MagnifyTool, ReferenceLines, PaintFillTool, };
34
+ export { BaseTool, AnnotationTool, PanTool, TrackballRotateTool, DragProbeTool, WindowLevelTool, StackScrollTool, StackScrollMouseWheelTool, ZoomTool, VolumeRotateMouseWheelTool, MIPJumpToClickTool, CrosshairsTool, ReferenceLinesTool, BidirectionalTool, LengthTool, ProbeTool, RectangleROITool, EllipticalROITool, PlanarFreehandROITool, ArrowAnnotateTool, AngleTool, CobbAngleTool, ReferenceCursors, SegmentationDisplayTool, RectangleScissorsTool, CircleScissorsTool, SphereScissorsTool, RectangleROIThresholdTool, RectangleROIStartEndThresholdTool, BrushTool, MagnifyTool, ReferenceLines, PaintFillTool, ScaleOverlayTool, };
34
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,yBAAyB,MAAM,iCAAiC,CAAC;AACxE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AACtE,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AACvE,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAGlD,OAAO,uBAAuB,MAAM,wCAAwC,CAAC;AAG7E,OAAO,qBAAqB,MAAM,sCAAsC,CAAC;AACzE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,yBAAyB,MAAM,0CAA0C,CAAC;AACjF,OAAO,iCAAiC,MAAM,kDAAkD,CAAC;AACjG,OAAO,SAAS,MAAM,0BAA0B,CAAC;AACjD,OAAO,aAAa,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAEL,QAAQ,EACR,cAAc,EAEd,OAAO,EACP,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,EAElB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,gBAAgB,EAEhB,uBAAuB,EAEvB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,WAAW,EACX,cAAc,EACd,aAAa,GACd,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,yBAAyB,MAAM,iCAAiC,CAAC;AACxE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AACtE,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AACvE,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAGlD,OAAO,uBAAuB,MAAM,wCAAwC,CAAC;AAG7E,OAAO,qBAAqB,MAAM,sCAAsC,CAAC;AACzE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AACnE,OAAO,yBAAyB,MAAM,0CAA0C,CAAC;AACjF,OAAO,iCAAiC,MAAM,kDAAkD,CAAC;AACjG,OAAO,SAAS,MAAM,0BAA0B,CAAC;AACjD,OAAO,aAAa,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAEL,QAAQ,EACR,cAAc,EAEd,OAAO,EACP,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,EAElB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,gBAAgB,EAEhB,uBAAuB,EAEvB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,CAAC"}
@@ -259,4 +259,12 @@ export interface ReferenceLineAnnotation extends Annotation {
259
259
  };
260
260
  };
261
261
  }
262
+ export interface ScaleOverlayAnnotation extends Annotation {
263
+ data: {
264
+ handles: {
265
+ points: Types.Point3[];
266
+ };
267
+ viewportId: string;
268
+ };
269
+ }
262
270
  export {};