[vtkusers] vtkAssembly bug?

David Slack slack at aerosft.com
Fri May 26 09:09:55 EDT 2006


Hi,

I am using nested vtkAssembly's and am curious about the intended 
functionality of the Visibility.  It's my understanding that if you have 
nested vtkAssembly's and you turn off the visibility of one of the 
vtkAssembly's somewhere in the heirarchy, that every vtkAssembly and 
prop that is a child of that vtkAssembly should not be visible.  That, I 
have found, is not the functionality of the current cvs code (or at 
least the one I checked out a couple weeks ago).  The functionality that 
I am seeing is that if you turn off the top vtkAssembly or the bottom 
viewProp, then the bottom viewProp becomes invisible.  Turning off any 
intermediate vtkAssembly has no effect whatsoever on the bottom viewProp.

In order to "fix" this, I changed the vtkAssembly::RenderOpaqueGeometry 
& vtkAssembly::RenderTranslucentGeometry routines to add the following:
 
// render the Paths
  vtkCollectionSimpleIterator sit;
  for ( this->Paths->InitTraversal(sit); (path = 
this->Paths->GetNextPath(sit)); )
    {

//Begin Change   fix visibility so that vtkAssembly turns off children
//
        vtkAssemblyNode *tNode;
        bool tVisibility = true;

        for(path->InitTraversal(); tNode = path->GetNextNode();) {

            vtkProp3D *tProp = (vtkProp3D *) tNode->GetViewProp();

            if(!tProp->GetVisibility()) {
                tVisibility = false;
                break;
            }
        }
//End Change

    prop3D = (vtkProp3D *)path->GetLastNode()->GetViewProp();

//Begin Change
//  if ( prop3D->GetVisibility() )
    if (tVisibility)
//End Change
    {
      prop3D->SetAllocatedRenderTime(fraction, ren);
      prop3D->PokeMatrix(path->GetLastNode()->GetMatrix());
      renderedSomething += prop3D->RenderTranslucentGeometry(ren);
      prop3D->PokeMatrix(NULL);
      }
    }

Basically I have looped through the heirarchy and checked the visibility 
of all the intermediate vtkAssembly's & if any of them is not visible, 
then I skip the rendering.  I don't know if this is the proper fix, but 
the end result is that it works the way I think the code should work.

Thanks,
Dave Slack



More information about the vtkusers mailing list