Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 34x 34x 34x 34x 329x 329x 329x | import { LengthTool, utilities } from '@cornerstonejs/tools'; import { callInputDialog } from '@ohif/extension-default'; import getActiveViewportEnabledElement from '../utils/getActiveViewportEnabledElement'; const { calibrateImageSpacing } = utilities; /** * Calibration Line tool works almost the same as the */ class CalibrationLineTool extends LengthTool { static toolName = 'CalibrationLine'; _renderingViewport: any; _lengthToolRenderAnnotation = this.renderAnnotation; renderAnnotation = (enabledElement, svgDrawingHelper) => { const { viewport } = enabledElement; this._renderingViewport = viewport; return this._lengthToolRenderAnnotation(enabledElement, svgDrawingHelper); }; _getTextLines(data, targetId) { const [canvasPoint1, canvasPoint2] = data.handles.points.map(p => this._renderingViewport.worldToCanvas(p) ); // for display, round to 2 decimal points const lengthPx = Math.round(calculateLength2(canvasPoint1, canvasPoint2) * 100) / 100; const textLines = [`${lengthPx}px`]; return textLines; } } function calculateLength2(point1, point2) { const dx = point1[0] - point2[0]; const dy = point1[1] - point2[1]; return Math.sqrt(dx * dx + dy * dy); } function calculateLength3(pos1, pos2) { const dx = pos1[0] - pos2[0]; const dy = pos1[1] - pos2[1]; const dz = pos1[2] - pos2[2]; return Math.sqrt(dx * dx + dy * dy + dz * dz); } export default CalibrationLineTool; export function onCompletedCalibrationLine( servicesManager: AppTypes.ServicesManager, csToolsEvent ) { const { uiDialogService, viewportGridService } = servicesManager.services; // calculate length (mm) with the current Pixel Spacing const annotationAddedEventDetail = csToolsEvent.detail; const { annotation: { metadata, data: annotationData }, } = annotationAddedEventDetail; const { referencedImageId: imageId } = metadata; const enabledElement = getActiveViewportEnabledElement(viewportGridService); const { viewport } = enabledElement; const length = Math.round( calculateLength3(annotationData.handles.points[0], annotationData.handles.points[1]) * 100 ) / 100; const adjustCalibration = newLength => { const spacingScale = newLength / length; // trigger resize of the viewport to adjust the world/pixel mapping calibrateImageSpacing(imageId, viewport.getRenderingEngine(), { type: 'User', scale: 1 / spacingScale, }); }; return new Promise((resolve, reject) => { Iif (!uiDialogService) { reject('UIDialogService is not initiated'); return; } callInputDialog({ uiDialogService, title: 'Calibration', placeholder: 'Actual Physical distance (mm)', defaultValue: `${length}`, }).then(newValue => { adjustCalibration(Number.parseFloat(newValue)); resolve(true); }); }); } |