[vtkusers] creating fiber bundles (python module)

James Malcolm malcolm at bwh.harvard.edu
Mon Oct 12 23:01:53 EDT 2009


I want to start a new deterministic tractography module.

I think I know how to create the vtkPolyData lines, but I don't know how
to output a fiber bundle model with the python interface.

I've tried various methods; here are two.
  1) The first crashes Slicer 3 (Mac OSX)
  2) The second reports "unable to delete temporary model node ...".
The only difference is how I declare the output geometry type.

Could anyone give me a hint as to what I'm doing wrong?
  -jm


---- first method: crashes ------------------------------------------

XML = """<?xml version="1.0" encoding="utf-8"?>
<executable>
  <category>Tractography</category>
  <title>Python Streamline</title>
  <description>Streamline tractography.</description>

  <parameters>
    <label>IO</label>
    <description>Input/output parameters</description>

    <geometry type="fiberbundle">
      <name>ff</name> <channel>output</channel> <index>0</index>
      <label>Output Fiber bundle</label>
    </geometry>

  </parameters>
</executable>
"""

from Slicer import slicer

def Execute(ff):
    scene = slicer.MRMLScene
    pts = slicer.vtkPoints()
    lines = slicer.vtkCellArray()

    lines.InsertNextCell(3)
    lines.InsertCellPoint(0);  pts.InsertNextPoint( 1, 1, 1)
    lines.InsertCellPoint(1);  pts.InsertNextPoint( 0, 0, 0)
    lines.InsertCellPoint(2);  pts.InsertNextPoint(-1,-1,-1)

    pd = slicer.vtkPolyData()
    pd.SetPoints(pts)
    pd.SetLines(lines)
    pd.Update()

    ff = scene.GetNodeByID(ff)
    ff.SetAndObservePolyData(pd)

    return



---- second method: unable to delete temporary model node ---------------------------------

XML = """<?xml version="1.0" encoding="utf-8"?>
<executable>
  <category>Tractography</category>
  <title>Python Streamline</title>
  <description>Streamline tractography.</description>

  <parameters>
    <label>IO</label>
    <description>Input/output parameters</description>

    <geometry>
      <name>ff</name> <channel>output</channel> <index>0</index>
      <label>Output Fiber bundle</label>
    </geometry>

  </parameters>
</executable>
"""

from Slicer import slicer

def Execute(ff):
    scene = slicer.MRMLScene

    pts = slicer.vtkPoints()
    lines = slicer.vtkCellArray()

    lines.InsertNextCell(3)
    lines.InsertCellPoint(0);  pts.InsertNextPoint( 1, 1, 1)
    lines.InsertCellPoint(1);  pts.InsertNextPoint( 0, 0, 0)
    lines.InsertCellPoint(2);  pts.InsertNextPoint(-1,-1,-1)

    pd = slicer.vtkPolyData()
    pd.SetPoints(pts)
    pd.SetLines(lines)
    pd.Update()

    ff = scene.GetNodeByID(ff)
    ff.SetAndObservePolyData(pd)

    return



More information about the vtkusers mailing list