You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.9 KiB
C++
156 lines
4.9 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkPropAssembly.h
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkPropAssembly
|
|
* @brief create hierarchies of props
|
|
*
|
|
* vtkPropAssembly is an object that groups props and other prop assemblies
|
|
* into a tree-like hierarchy. The props can then be treated as a group
|
|
* (e.g., turning visibility on and off).
|
|
*
|
|
* A vtkPropAssembly object can be used in place of an vtkProp since it is a
|
|
* subclass of vtkProp. The difference is that vtkPropAssembly maintains a
|
|
* list of other prop and prop assembly instances (its "parts") that form the
|
|
* assembly. Note that this process is recursive: you can create groups
|
|
* consisting of prop assemblies to arbitrary depth.
|
|
*
|
|
* vtkPropAssembly's and vtkProp's that compose a prop assembly need not be
|
|
* added to a renderer's list of props, as long as the parent assembly is in
|
|
* the prop list. This is because they are automatically renderered during
|
|
* the hierarchical traversal process.
|
|
*
|
|
* @warning
|
|
* vtkPropAssemblies 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.
|
|
*
|
|
* @sa
|
|
* vtkProp3D vtkActor vtkAssembly vtkActor2D vtkVolume
|
|
*/
|
|
|
|
#ifndef vtkPropAssembly_h
|
|
#define vtkPropAssembly_h
|
|
|
|
#include "vtkProp.h"
|
|
#include "vtkRenderingCoreModule.h" // For export macro
|
|
|
|
class VTKRENDERINGCORE_EXPORT vtkPropAssembly : public vtkProp
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkPropAssembly, vtkProp);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Create with an empty parts list.
|
|
*/
|
|
static vtkPropAssembly* New();
|
|
|
|
/**
|
|
* Add a part to the list of parts.
|
|
*/
|
|
void AddPart(vtkProp*);
|
|
|
|
/**
|
|
* Remove a part from the list of parts,
|
|
*/
|
|
void RemovePart(vtkProp*);
|
|
|
|
/**
|
|
* Return the list of parts.
|
|
*/
|
|
vtkPropCollection* GetParts();
|
|
|
|
//@{
|
|
/**
|
|
* Render this assembly and all its parts. The rendering process is
|
|
* recursive. The parts of each assembly are rendered only if the
|
|
* visibility for the prop is turned on.
|
|
*/
|
|
int RenderOpaqueGeometry(vtkViewport* ren) override;
|
|
int RenderTranslucentPolygonalGeometry(vtkViewport* ren) override;
|
|
int RenderVolumetricGeometry(vtkViewport* ren) override;
|
|
int RenderOverlay(vtkViewport* ren) override;
|
|
//@}
|
|
|
|
/**
|
|
* Does this prop have some translucent polygonal geometry?
|
|
*/
|
|
vtkTypeBool HasTranslucentPolygonalGeometry() override;
|
|
|
|
/**
|
|
* 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*) override;
|
|
|
|
/**
|
|
* Get the bounds for this prop assembly as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax).
|
|
* May return NULL in some cases (meaning the bounds is undefined).
|
|
*/
|
|
double* GetBounds() VTK_SIZEHINT(6) override;
|
|
|
|
/**
|
|
* Shallow copy of this vtkPropAssembly.
|
|
*/
|
|
void ShallowCopy(vtkProp* Prop) override;
|
|
|
|
/**
|
|
* Override default GetMTime method to also consider all of the
|
|
* prop assembly's parts.
|
|
*/
|
|
vtkMTimeType GetMTime() override;
|
|
|
|
//@{
|
|
/**
|
|
* Methods to traverse the paths (i.e., leaf nodes) of a prop
|
|
* assembly. 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 the leaf nodes of the assembly. To use
|
|
* the methods below - first invoke InitPathTraversal() followed by
|
|
* repeated calls to GetNextPath(). GetNextPath() returns a NULL pointer
|
|
* when the list is exhausted. (See the superclass vtkProp for more
|
|
* information about paths.)
|
|
*/
|
|
void InitPathTraversal() override;
|
|
vtkAssemblyPath* GetNextPath() override;
|
|
int GetNumberOfPaths() override;
|
|
//@}
|
|
|
|
/**
|
|
* WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
|
|
* DO NOT USE THIS METHOD OUTSIDE OF THE RENDERING PROCESS
|
|
* Overload the superclass' vtkProp BuildPaths() method.
|
|
*/
|
|
void BuildPaths(vtkAssemblyPaths* paths, vtkAssemblyPath* path) override;
|
|
|
|
protected:
|
|
vtkPropAssembly();
|
|
~vtkPropAssembly() override;
|
|
|
|
vtkPropCollection* Parts;
|
|
double Bounds[6];
|
|
|
|
// Support the BuildPaths() method,
|
|
vtkTimeStamp PathTime;
|
|
void UpdatePaths(); // apply transformations and properties recursively
|
|
private:
|
|
vtkPropAssembly(const vtkPropAssembly&) = delete;
|
|
void operator=(const vtkPropAssembly&) = delete;
|
|
};
|
|
|
|
#endif
|