dicom-microscopy-viewer-changed
Version:
Interactive web-based viewer for DICOM Microscopy Images
240 lines (197 loc) • 9.07 kB
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 && 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 && 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>