@@ -4,6 +4,10 @@ const _uid = Symbol('uid');
44const _scoord3d = Symbol ( 'scoord3d' ) ;
55const _properties = Symbol ( 'properties' ) ;
66
7+ const _name = Symbol ( 'name' ) ;
8+ const _value = Symbol ( 'value' ) ;
9+
10+
711/** A region of interest (ROI)
812 *
913 * @class
@@ -16,7 +20,7 @@ class ROI {
1620 * @param {Object } options - Options for construction of ROI
1721 * @param {Scoord3D } options.scoord3d - Spatial 3D coordinates
1822 * @param {string } options.uid - Unique idenfifier
19- * @param {Object } options.properties - Qualititative evaluations
23+ * @param {Object } options.properties - Properties (name-value pairs)
2024 */
2125 constructor ( options ) {
2226 if ( ! ( 'scoord3d' in options ) ) {
@@ -34,8 +38,23 @@ class ROI {
3438 this [ _uid ] = options . uid ;
3539 }
3640 this [ _scoord3d ] = options . scoord3d ;
37- this [ _properties ] = options . properties ;
38- // TODO: store SOPInstanceUID, SOPClassUID and FrameNumbers as reference
41+ if ( 'properties' in options ) {
42+ if ( ! ( typeof ( options . properties ) === 'object' ) ) {
43+ throw new Error ( 'properties of ROI must be an object' )
44+ }
45+ this [ _properties ] = options . properties ;
46+ if ( this [ _properties ] . evaluations === undefined ) {
47+ this [ _properties ] [ 'evaluations' ] = [ ]
48+ }
49+ if ( this [ _properties ] . measurements === undefined ) {
50+ this [ _properties ] [ 'measurements' ] = [ ]
51+ }
52+ } else {
53+ this [ _properties ] = { } ;
54+ this [ _properties ] [ 'evaluations' ] = [ ]
55+ this [ _properties ] [ 'measurements' ] = [ ]
56+ }
57+ console . log ( this [ _properties ] )
3958 }
4059
4160 /** Gets unique identifier of region of interest.
@@ -62,6 +81,38 @@ class ROI {
6281 return this [ _properties ] ;
6382 }
6483
84+ /** Gets measurements of region of interest.
85+ *
86+ * @returns {Object[] } Measurements
87+ */
88+ get measurements ( ) {
89+ return this [ _properties ] . measurements ;
90+ }
91+
92+ /** Gets qualitative evaluations of region of interest.
93+ *
94+ * @returns {Object[] } QualitativeEvaluations
95+ */
96+ get evaluations ( ) {
97+ return this [ _properties ] . evaluations ;
98+ }
99+
100+ /** Adds a measurement.
101+ *
102+ * @params {Object} item - NUM content item representing a measurement
103+ */
104+ addMeasurement ( item ) {
105+ this [ _properties ] [ 'measurements' ] . push ( item ) ;
106+ }
107+
108+ /** Adds a qualitative evaluation.
109+ *
110+ * @params {Object} item - CODE content item representing a qualitative evaluation
111+ */
112+ addEvaluation ( item ) {
113+ this [ _properties ] [ 'evaluations' ] . push ( item ) ;
114+ }
115+
65116}
66117
67- export { ROI } ;
118+ export { Property , ROI } ;
0 commit comments