View Issue Details

IDProjectCategoryView StatusLast Update
0003112Slicer4Core: MRMLpublic2014-03-06 06:15
Reporteralexy Assigned Toalexy  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product VersionSlicer 4.2.2-1 
Target VersionSlicer 4.4.0Fixed in VersionSlicer 4.4.0 
Summary0003112: problem calling SetAndObserveNthNodeReferenceID for transfom nodes
Description

From Junichi:

Thanks Alex and Andras for your advices. They helped me confirmed that I called
SetAndObserveNthNodeReferenceID() correctly.

However, I noticed that I had added the reference node using AddAndObserveNodeReferenceID()
before I called SetAndObserveNthNodeReferenceID(). If I don't call AddAndObserveNodeReferenceID(),
ProcessMRMLEvents() is called as I expected.

This makes me wonder if SetAndObserveNthNodeReferenceID() can set events
for a node which has already been added as a reference node.
The following is what I tried on 3D Slicer downloaded and built in this morning:

Case 1: Call only SetAndObserveNodeReferenceID() (Working)

  1. Launch 3D Slicer
  2. Download MR Head example
  3. Open Transforms and create a linear transform node
  4. Open Python Interactor and type the following commands:

    scene = slicer.mrmlScene
    inode = scene.GetNodeByID('vtkMRMLScalarVolumeNode2')
    event = vtk.vtkIntArray()
    event.InsertNextValue(slicer.vtkMRMLTransformableNode.TransformModifiedEvent)
    0L
    inode.SetAndObserveNodeReferenceID('transform', 'vtkMRMLLinearTransformNode4', event)
    (vtkMRMLLinearTransformNode)0x14886e628

  5. Open Transforms and keep updating the transform. You should see the image is moving.

Case 2: Call SetAndObserveNodeReferenceID() after AddAndObserveNodeReferenceID()
(I'm not sure if Slicer is supposed to behave like this)

  1. Launch 3D Slicer
  2. Download MR Head example
  3. Open Transforms and create a linear transform node
  4. Open Python Interactor and type the following commands:

    scene = slicer.mrmlScene
    inode = scene.GetNodeByID('vtkMRMLScalarVolumeNode2')
    event = vtk.vtkIntArray()
    event.InsertNextValue(slicer.vtkMRMLTransformableNode.TransformModifiedEvent)
    0L
    inode.AddAndObserveNodeReferenceID('transform', 'vtkMRMLLinearTransformNode4')
    (vtkMRMLLinearTransformNode)0x148745628
    inode.GetNthNodeReferenceID('transform', 0)
    'vtkMRMLLinearTransformNode4'
    inode.SetAndObserveNthNodeReferenceID('transform', 0, 'vtkMRMLLinearTransformNode4', event)
    (vtkMRMLLinearTransformNode)0x148745730

  5. Open Transforms and update the transform. The image does not move.
  6. You can also confirm that the image node is not receiving TransformModifiedEvent from
    the linear transform node using EventBroker.

Thanks for your help!

TagsNo tags attached.

Relationships

related to 0003241 closedjcfr Transforms are not applied to volumes when scene is read from a file 

Activities

alexy

alexy

2013-05-10 08:12

developer   ~0008611

Fixed Node Reference update for the case when observed events change.
Added tests for this case.
revision: 21979

jcfr

jcfr

2014-03-06 05:15

administrator   ~0011075

Closing resolved issues that have not been updated in more than 3 months

Issue History

Date Modified Username Field Change
2013-05-09 15:26 alexy New Issue
2013-05-09 15:26 alexy Status new => assigned
2013-05-09 15:26 alexy Assigned To => alexy
2013-05-10 08:12 alexy Note Added: 0008611
2013-05-10 08:12 alexy Status assigned => resolved
2013-05-10 08:12 alexy Resolution open => fixed
2013-08-20 10:05 yuzheng Relationship added related to 0003241
2014-03-06 05:15 jcfr Note Added: 0011075
2014-03-06 05:16 jcfr Status resolved => closed
2014-03-06 05:54 jcfr Fixed in Version => Slicer 4.4.0
2014-03-06 06:15 jcfr Target Version => Slicer 4.4.0