16 frameLabels = volumeNode.GetAttribute(
"MultiVolume.FrameLabels")
17 nFrames = volumeNode.GetNumberOfFrames()
18 mvLabels = [0]*nFrames
20 mvLabels = frameLabels.split(
",")
21 if len(mvLabels) == nFrames:
22 for frameIndex
in range(nFrames):
23 mvLabels[frameIndex] = float(mvLabels[frameIndex])
25 for frameIndex
in range(nFrames):
26 mvLabels[frameIndex] = float(frameIndex)
100 logging.debug(
"MultiVolumeIntensityChartView: bgMultiVolumeNode changed")
123 for f
in range(nFrames):
124 extract = vtk.vtkImageExtractComponents()
126 extract.SetComponents(f)
129 frame = extract.GetOutput()
130 frameRange = frame.GetScalarRange()
228 def createChart(self, sliceWidget, xy, ignoreCurrentBackground=False):
229 if not sliceWidget
and not xy:
232 sliceLogic = sliceWidget.sliceLogic()
234 bgLayer = sliceLogic.GetBackgroundLayer()
236 doIJKToRASTransformation =
False
237 bgVolumeNode = bgLayer.GetVolumeNode()
240 if not ignoreCurrentBackground:
243 doIJKToRASTransformation =
True
245 xyz = sliceWidget.sliceView().convertDeviceToXYZ(xy)
246 xyToIJK = bgLayer.GetXYToIJKTransform()
247 ijkFloat = xyToIJK.TransformDoublePoint(xyz)
248 if doIJKToRASTransformation:
249 RAStoIJK = vtk.vtkMatrix4x4()
251 ras = self.
xyToRAS(sliceLogic, xy)
252 ijkFloat = RAStoIJK.MultiplyPoint([ras[0], ras[1], ras[2], 1])[:3]
267 fgijkFloat = xyToIJK.TransformDoublePoint(xyz)
273 self.
__fgChartTableNode = slicer.mrmlScene.AddNewNodeByClass(
"vtkMRMLTableNode",
"fgChartTable")
275 if fgijk[0] == bgijk[0]
and fgijk[1] == bgijk[1]
and fgijk[2] == bgijk[2]
and \
276 fgImage.GetNumberOfScalarComponents() == bgImage.GetNumberOfScalarComponents():
279 fgxArray = vtk.vtkFloatArray()
282 fgyArray = vtk.vtkFloatArray()
283 self.
refreshArray(fgyArray, nComponents,
"2nd multivolume")
286 fgChartTable.AddColumn(fgxArray)
287 fgChartTable.AddColumn(fgyArray)
288 fgChartTable.SetNumberOfRows(nComponents)
291 for c
in range(nComponents):
292 val = bgImage.GetScalarComponentAsDouble(bgijk[0],bgijk[1],bgijk[2],c)
298 fgValue = fgImage.GetScalarComponentAsDouble(bgijk[0],bgijk[1],bgijk[2],c)
299 if math.isnan(fgValue):
302 fgChartTable.SetValue(c,1,fgValue)
313 self.
__bgPlot = slicer.mrmlScene.AddNewNodeByClass(
"vtkMRMLPlotSeriesNode",
"1st multivolume")
316 self.
__bgPlot.SetYColumnName(
"1st multivolume")
317 self.
__bgPlot.SetPlotType(slicer.vtkMRMLPlotSeriesNode.PlotTypeScatter)
319 self.
__bgPlot.SetLineStyle(slicer.vtkMRMLPlotSeriesNode.LineStyleNone)
321 self.
__bgPlot.SetMarkerStyle(slicer.vtkMRMLPlotSeriesNode.MarkerStyleNone)
326 self.
__fgPlot = slicer.mrmlScene.AddNewNodeByClass(
"vtkMRMLPlotSeriesNode",
"2nd multivolume")
329 self.
__fgPlot.SetYColumnName(
"2nd multivolume")
330 self.
__fgPlot.SetPlotType(slicer.vtkMRMLPlotSeriesNode.PlotTypeScatter)
332 self.
__fgPlot.SetMarkerStyle(slicer.vtkMRMLPlotSeriesNode.MarkerStyleNone)
343 image = multiVolumeNode.GetImageData()
344 nComponents = multiVolumeNode.GetNumberOfFrames()
346 for c
in range(nBaselines):
347 val = image.GetScalarComponentAsDouble(ijk[0], ijk[1], ijk[2], c)
351 for c
in range(nComponents):
352 val = image.GetScalarComponentAsDouble(ijk[0], ijk[1], ijk[2], c)
358 extent = image.GetExtent()
359 if not (extent[0] <= ijk[0] <= extent[1]
and
360 extent[2] <= ijk[1] <= extent[3]
and
361 extent[4] <= ijk[2] <= extent[5]):
363 logging.debug(
"Point %d,%d,%d is not in valid Extent P1(%d,%d,%d) and P2(%d,%d,%d) "
364 % (ijk[0], ijk[1], ijk[2], extent[0], extent[2], extent[4], extent[1], extent[3], extent[5]))