UNPKG

dicom-microscopy-viewer

Version:
240 lines (197 loc) 9.07 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: annotations/_AnnotationManager.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: annotations/_AnnotationManager.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>import dcmjs from 'dcmjs' import _MarkupManager from './markups/_MarkupManager' /** Enums */ import Enums from '../enums' /** Markers */ import ArrowMarker, { _format as arrowFormat } from './markers/arrow' /** Markups */ import MeasurementMarkup, { _format as measurementFormat } from './markups/measurement' import TextEvaluationMarkup, { _format as textFormat } from './markups/textEvaluation' /** Utils */ import { areCodedConceptsEqual, getContentItemNameCodedConcept } from '../utils' const { Marker, Markup } = Enums class _AnnotationManager { constructor ({ map, pyramid, affine, drawingSource } = {}) { const markupManager = new _MarkupManager({ map, pyramid, affine, drawingSource, formatters: { [Marker.Arrow]: arrowFormat, [Markup.Measurement]: measurementFormat, [Markup.TextEvaluation]: textFormat } }) this.props = { map, pyramid, affine, markupManager } /** Markups */ this[Markup.Measurement] = MeasurementMarkup(this.props) this[Markup.TextEvaluation] = TextEvaluationMarkup(this.props) /** Markers */ this[Marker.Arrow] = ArrowMarker(this.props) } /** * Add markup properties based on ROI * measurements and evaluations. * * @param {Feature} feature The feature */ _addMeasurementsAndEvaluationsProperties (feature) { const { measurements, evaluations } = feature.getProperties() if (measurements &amp;&amp; measurements.length) { return measurements.some((measurement) => {// eslint-disable-line const SUPPORTED_MEASUREMENTS_CODED_CONCEPTS = [ new dcmjs.sr.coding.CodedConcept({ meaning: 'Area', value: '42798000', schemeDesignator: 'SCT' }), new dcmjs.sr.coding.CodedConcept({ meaning: 'Length', value: '410668003', schemeDesignator: 'SCT' }) ] const measurementCodedConcept = getContentItemNameCodedConcept( measurement ) if ( SUPPORTED_MEASUREMENTS_CODED_CONCEPTS.some((codedConcept) => areCodedConceptsEqual(measurementCodedConcept, codedConcept) ) ) { feature.set( Enums.InternalProperties.Markup, Enums.Markup.Measurement ) } }) } if (evaluations &amp;&amp; evaluations.length) { return evaluations.some((evaluation) => {// eslint-disable-line const SUPPORTED_EVALUATIONS_CODED_CONCEPTS = [ new dcmjs.sr.coding.CodedConcept({ value: '112039', meaning: 'Tracking Identifier', schemeDesignator: 'DCM' }) ] const evaluationCodedConcept = getContentItemNameCodedConcept( evaluation ) if ( SUPPORTED_EVALUATIONS_CODED_CONCEPTS.some((codedConcept) => areCodedConceptsEqual(codedConcept, evaluationCodedConcept) ) ) { feature.set( Enums.InternalProperties.Markup, Enums.Markup.TextEvaluation ) } }) } } /** * Sets annotations visibility. * * @param {boolean} isVisible */ setVisible (isVisible) { this.props.markupManager.setVisible(isVisible) } /** * Set markup visibility. * * @param {string} id The markup id * @param {boolean} isVisible The markup visibility */ setMarkupVisibility (id, isVisible) { this.props.markupManager.setVisibility(id, isVisible) } onAdd (feature) { /** * Add properties to ROI feature before triggering * markup and markers callbacks to keep UI in sync. */ this._addMeasurementsAndEvaluationsProperties(feature) this[Marker.Arrow].onAdd(feature) this[Markup.Measurement].onAdd(feature) this[Markup.TextEvaluation].onAdd(feature) } onFailure (uid) { this[Marker.Arrow].onFailure(uid) this[Markup.Measurement].onFailure(uid) this[Markup.TextEvaluation].onFailure(uid) } onRemove (feature) { this[Marker.Arrow].onRemove(feature) this[Markup.Measurement].onRemove(feature) this[Markup.TextEvaluation].onRemove(feature) } onUpdate (feature) { this[Marker.Arrow].onUpdate(feature) this[Markup.Measurement].onUpdate(feature) this[Markup.TextEvaluation].onUpdate(feature) } onDrawStart (event) { this[Marker.Arrow].onDrawStart(event) this[Markup.Measurement].onDrawStart(event) this[Markup.TextEvaluation].onDrawStart(event) } onDrawEnd (event) { this[Marker.Arrow].onDrawEnd(event) this[Markup.Measurement].onDrawEnd(event) this[Markup.TextEvaluation].onDrawEnd(event) this.props.markupManager.onDrawEnd(event) } onDrawAbort (event) { this[Marker.Arrow].onDrawAbort(event) this[Markup.Measurement].onDrawAbort(event) this[Markup.TextEvaluation].onDrawAbort(event) this.props.markupManager.onDrawAbort(event) } } export default _AnnotationManager </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="annotation.html">annotation</a></li><li><a href="api.html">api</a></li><li><a href="color.html">color</a></li><li><a href="events.html">events</a></li><li><a href="mapping.html">mapping</a></li><li><a href="metadata.html">metadata</a></li><li><a href="opticalPath.html">opticalPath</a></li><li><a href="roi.html">roi</a></li><li><a href="scoord3d.html">scoord3d</a></li><li><a href="segment.html">segment</a></li><li><a href="utils.html">utils</a></li><li><a href="viewer.html">viewer</a></li></ul><h3>Classes</h3><ul><li><a href="annotation.AnnotationGroup.html">AnnotationGroup</a></li><li><a href="color.PaletteColorLookupTable.html">PaletteColorLookupTable</a></li><li><a href="mapping.ParameterMapping.html">ParameterMapping</a></li><li><a href="mapping.Transformation.html">Transformation</a></li><li><a href="metadata.Comprehensive3DSR.html">Comprehensive3DSR</a></li><li><a href="metadata.MicroscopyBulkSimpleAnnotations.html">MicroscopyBulkSimpleAnnotations</a></li><li><a href="metadata.ParametricMap.html">ParametricMap</a></li><li><a href="metadata.Segmentation.html">Segmentation</a></li><li><a href="metadata.SOPClass.html">SOPClass</a></li><li><a href="metadata.VLWholeSlideMicroscopyImage.html">VLWholeSlideMicroscopyImage</a></li><li><a href="module.exports_module.exports.html">exports</a></li><li><a href="opticalPath.OpticalPath.html">OpticalPath</a></li><li><a href="roi.ROI.html">ROI</a></li><li><a href="scoord3d.Ellipse.html">Ellipse</a></li><li><a href="scoord3d.Ellipsoid.html">Ellipsoid</a></li><li><a href="scoord3d.Multipoint.html">Multipoint</a></li><li><a href="scoord3d.Point.html">Point</a></li><li><a href="scoord3d.Polygon.html">Polygon</a></li><li><a href="scoord3d.Polyline.html">Polyline</a></li><li><a href="scoord3d.Scoord3D.html">Scoord3D</a></li><li><a href="segment.Segment.html">Segment</a></li><li><a href="viewer.LabelImageViewer.html">LabelImageViewer</a></li><li><a href="viewer.OverviewImageViewer.html">OverviewImageViewer</a></li><li><a href="viewer.VolumeImageViewer.html">VolumeImageViewer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#addTask">addTask</a></li><li><a href="global.html#cancelTask">cancelTask</a></li><li><a href="global.html#decode">decode</a></li><li><a href="global.html#getStatistics">getStatistics</a></li><li><a href="global.html#handleMessageFromWorker">handleMessageFromWorker</a></li><li><a href="global.html#initialize">initialize</a></li><li><a href="global.html#loadWebWorkerTask">loadWebWorkerTask</a></li><li><a href="global.html#setTaskPriority">setTaskPriority</a></li><li><a href="global.html#spawnWebWorker">spawnWebWorker</a></li><li><a href="global.html#startTaskOnWebWorker">startTaskOnWebWorker</a></li><li><a href="global.html#terminateAllWebWorkers">terminateAllWebWorkers</a></li><li><a href="global.html#transform">transform</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Thu Sep 29 2022 16:54:54 GMT-0400 (Eastern Daylight Time) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>