NAME
vtkAssembly - create hierarchies of actors
SYNOPSIS
#include "/opt/vtk-c++/graphics/vtkAssembly.h"
class VTK_EXPORT vtkAssembly : public vtkActor
vtkAssembly();
~vtkAssembly();
static vtkAssembly *New() {return new vtkAssembly;};
const char *GetClassName() {return "vtkAssembly";};
void PrintSelf(ostream& os, vtkIndent indent);
vtkAssembly &operator=(const vtkAssembly& assembly);
void AddPart(vtkActor *);
void RemovePart(vtkActor *);
vtkActorCollection *GetParts();
void Render(vtkRenderer *ren);
void InitPartTraversal();
vtkActor *GetNextPart();
int GetNumberOfParts();
void BuildPaths(vtkAssemblyPaths *paths, vtkActorCollection *path);
float *GetBounds();
unsigned long int GetMTime();
DESCRIPTION
vtkAssembly is an object that groups actors and other assemblies into a tree-like hierarchy. The actors and assemblies can then be transformed together by transforming just the root assembly of the hierarchy.
A vtkAssembly object can be used in place of an vtkActor since it is a subclass of vtkActor. The difference is that vtkAssembly maintains a list of actor instances (its "parts") that form the assembly. Then, any operation that modifies the parent assembly will modify all its parts. Note that this process is recursive: you can create groups consisting of assemblies and/or actors to arbitrary depth.
Actor's (or assemblies) that compose an assembly need not be added to a renderer's list of actors, as long as the parent assembly is in the list of actors. This is because they are automatically renderered during the hierarchical traversal process.
Since a vtkAssembly object is a derived class of vtkActor, it has properties and possibly a mapper. During the rendering process, if a mapper is associated with the assembly, it is rendered with these properties. Otherwise, the properties have no effect (i.e., on the children of the assembly).
CAVEATS
Collections of assemblies are slower to render than an equivalent list of actors. This is because to support arbitrary nesting of assemblies, the state of the assemblies (i.e., transformation matrices) must be propagated through the assembly hierarchy.
Assemblies can consist of hierarchies of assemblies, where one actor or assembly used in one hierarchy is also used in other hierarchies. However, make that there are no cycles (e.g., parent->child->parent), this will cause program failure.
SEE ALSO
vtkActor vtkTransform vtkMapper vtkPolyDataMapper
SUMMARY
vtkActorCollection *GetParts()
Methods to traverse the parts of an assembly. Each part (starting from the root) will appear properly transformed and with the correct properties (depending upon the ApplyProperty and ApplyTransform ivars). Note that the part appears as an actor. These methods should be contrasted to those that traverse the list of parts using GetParts(). GetParts() returns a list of children of this assembly, not necessarily with the correct transformation or properties. To use these methods first invoke InitPartTraversal() followed by repeated
calls to GetNextPart(). GetNextPart() returns a NULL pointer when the list is exhausted. stuff that follows is used to build the assembly hierarchy void UpdatePaths(); apply transformations and properties recursively void DeletePaths(); delete the paths Get the list of parts for this assembly.
vtkAssembly()
Construct object with no children.
void AddPart(vtkActor *actor)
Add a part to the list of parts.
void RemovePart(vtkActor *actor)
Remove a part from the list of parts,
vtkAssembly& operator=(const vtkAssembly& assembly)
Copy another assembly.
void Render(vtkRenderer *ren)
Render this assembly and all its parts. The rendering process is recursive. Note that a mapper need not be defined. If not defined, then no geometry will be drawn for this assembly. This allows you to create "logical" assemblies; that is, assemblies that only serve to group and transform its parts.
vtkActor *GetNextPart()
Return the next part in the hierarchy of assembly parts. This method returns a properly transformed and updated actor.
float *GetBounds()
Get the bounds for the assembly as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax).