Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

169 lines
6.2 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkAssembly.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkAssembly - create hierarchies of vtkProp3Ds (transformable props)
// .SECTION Description
// vtkAssembly is an object that groups vtkProp3Ds, its subclasses, and
// other assemblies into a tree-like hierarchy. The vtkProp3Ds 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 vtkProp3D since it is a
// subclass of vtkProp3D. The difference is that vtkAssembly maintains a list
// of vtkProp3D instances (its "parts") that form the assembly. Then, any
// operation that transforms (i.e., scales, rotates, translates) the parent
// assembly will transform all its parts. Note that this process is
// recursive: you can create groups consisting of assemblies and/or
// vtkProp3Ds to arbitrary depth.
//
// To add an assembly to the renderer's list of props, you only need to
// add the root of the assembly. During rendering, the parts of the
// assembly are rendered during a hierarchical traversal process.
// .SECTION 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.
//
// If you wish to create assemblies without any transformation (using the
// assembly strictly as a grouping mechanism), then you may wish to
// consider using vtkPropAssembly.
// .SECTION See Also
// vtkActor vtkTransform vtkMapper vtkPolyDataMapper vtkPropAssembly
#ifndef __vtkAssembly_h
#define __vtkAssembly_h
#include "vtkProp3D.h"
class vtkAssemblyPaths;
class vtkProp3DCollection;
class vtkMapper;
class vtkProperty;
class vtkActor;
class VTK_RENDERING_EXPORT vtkAssembly : public vtkProp3D
{
public:
static vtkAssembly *New();
vtkTypeRevisionMacro(vtkAssembly,vtkProp3D);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Add a part to the list of parts.
void AddPart(vtkProp3D *);
// Description:
// Remove a part from the list of parts,
void RemovePart(vtkProp3D *);
// Description:
// Return the parts (direct descendants) of this assembly.
vtkProp3DCollection *GetParts();
// Description:
// For some exporters and other other operations we must be
// able to collect all the actors or volumes. These methods
// are used in that process.
void GetActors(vtkPropCollection *);
void GetVolumes(vtkPropCollection *);
// Description:
// 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.
int RenderOpaqueGeometry(vtkViewport *ren);
int RenderTranslucentGeometry(vtkViewport *ren);
// Description:
// Release any graphics resources that are being consumed by this actor.
// The parameter window could be used to determine which graphic
// resources to release.
void ReleaseGraphicsResources(vtkWindow *);
// Description:
// 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 instance of vtkProp. 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 the
// methods below - first invoke InitPathTraversal() followed by repeated
// calls to GetNextPath(). GetNextPath() returns a NULL pointer when the
// list is exhausted.
void InitPathTraversal();
vtkAssemblyPath *GetNextPath();
int GetNumberOfPaths();
// Description:
// Get the bounds for the assembly as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax).
void GetBounds(double bounds[6]) {this->vtkProp3D::GetBounds( bounds );};
double *GetBounds();
// Description:
// Override default GetMTime method to also consider all of the
// assembly's parts.
unsigned long int GetMTime();
// Description:
// Shallow copy of an assembly. Overloads the virtual vtkProp method.
void ShallowCopy(vtkProp *prop);
//BTX
// Description:
// WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS
// METHOD OUTSIDE OF THE RENDERING PROCESS Overload the superclass' vtkProp
// BuildPaths() method. Paths consist of an ordered sequence of actors,
// with transformations properly concatenated.
void BuildPaths(vtkAssemblyPaths *paths, vtkAssemblyPath *path);
//ETX
protected:
vtkAssembly();
~vtkAssembly();
// Keep a list of direct descendants of the assembly hierarchy
vtkProp3DCollection *Parts;
// Support the BuildPaths() method. Caches last paths built for
// performance.
vtkTimeStamp PathTime;
virtual void UpdatePaths(); //apply transformations and properties recursively
private:
vtkAssembly(const vtkAssembly&); // Not implemented.
void operator=(const vtkAssembly&); // Not implemented.
};
// Description:
// Get the list of parts for this assembly.
inline vtkProp3DCollection *vtkAssembly::GetParts() {return this->Parts;}
#endif