qiprofile
Version:
Quantitative Imaging Profile ( QiPr) web application
61 lines (52 loc) • 2.12 kB
text/coffeescript
define ['angular', 'lodash', 'underscore.string', 'image'], (ng, _, _s) ->
volume = ng.module 'qiprofile.volume', ['qiprofile.image']
volume.factory 'Volume', ['Image', (Image) ->
# Adds the following volume properties to the given volume
# image:
# * resource - the image store resource name
# * number - the one-based volume number
# * scan, if the volume parent is a scan, or
# * registration, if the volume parent is a registration
# * imageSequence - the parent scan or registration
#
# @param image the volume image object to extend
# @param imageSequence the parent object
# @param number the one-based volume number
extend: (volume, imageSequence, number) ->
# Set the image parent volume reference.
volume.imageSequence = imageSequence
# Add the image load capability.
Image.extend(volume)
# The concrete parent reference (scan or registration).
propertyName = _s.decapitalize(imageSequence._cls)
Object.defineProperty volume, propertyName,
get: -> @imageSequence
# The volume number property.
volume.number = number
# The volume virtual properties.
Object.defineProperties volume,
# @returns the display title
title:
get: -> "#{ @imageSequence.title } Volume #{ @number }"
# @returns the volume resource name
resource:
get: -> @imageSequence.volumes.name
# Return the augmented Image object.
volume
# @param imageSequence the parent scan or registration to search
# @param number the volume number
# @returns the volume object
# @throws ReferenceError if the parent image sequence does not
# have the volume
find: (imageSequence, number) ->
if imageSequence.volumes?
target = imageSequence.volumes.images[number - 1]
# If no such volume, then complain.
if not target?
throw new ReferenceError(
"#{ imageSequence.title } does not have a volume with number" +
" #{ number }"
)
# Return the volume.
target
]