1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkCompositePolyDataMapper.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 vtkCompositePolyDataMapper
* @brief a class that renders hierarchical polygonal data
*
* This class uses a set of vtkPolyDataMappers to render input data
* which may be hierarchical. The input to this mapper may be
* either vtkPolyData or a vtkCompositeDataSet built from
* polydata. If something other than vtkPolyData is encountered,
* an error message will be produced.
* @sa
* vtkPolyDataMapper
*/
#ifndef vtkCompositePolyDataMapper_h
#define vtkCompositePolyDataMapper_h
#include "vtkMapper.h"
#include "vtkRenderingCoreModule.h" // For export macro
VTK_ABI_NAMESPACE_BEGIN
class vtkPolyDataMapper;
class vtkInformation;
class vtkRenderer;
class vtkActor;
class vtkCompositePolyDataMapperInternals;
class VTKRENDERINGCORE_EXPORT vtkCompositePolyDataMapper : public vtkMapper
{
public:
static vtkCompositePolyDataMapper* New();
vtkTypeMacro(vtkCompositePolyDataMapper, vtkMapper);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Standard method for rendering a mapper. This method will be
* called by the actor.
*/
void Render(vtkRenderer* ren, vtkActor* a) override;
///@{
/**
* Standard vtkProp method to get 3D bounds of a 3D prop
*/
double* GetBounds() VTK_SIZEHINT(6) override;
void GetBounds(double bounds[6]) override { this->Superclass::GetBounds(bounds); }
///@}
/**
* Release the underlying resources associated with this mapper
*/
void ReleaseGraphicsResources(vtkWindow*) override;
///@{
/**
* Some introspection on the type of data the mapper will render
* used by props to determine if they should invoke the mapper
* on a specific rendering pass.
*/
bool HasOpaqueGeometry() override;
bool HasTranslucentPolygonalGeometry() override;
///@}
protected:
vtkCompositePolyDataMapper();
~vtkCompositePolyDataMapper() override;
/**
* We need to override this method because the standard streaming
* demand driven pipeline is not what we want - we are expecting
* hierarchical data as input
*/
vtkExecutive* CreateDefaultExecutive() override;
/**
* Need to define the type of data handled by this mapper.
*/
int FillInputPortInformation(int port, vtkInformation* info) override;
/**
* This is the build method for creating the internal polydata
* mapper that do the actual work
*/
void BuildPolyDataMapper();
/**
* BuildPolyDataMapper uses this for each mapper. It is broken out so we can change types.
*/
virtual vtkPolyDataMapper* MakeAMapper();
/**
* Need to loop over the hierarchy to compute bounds
*/
void ComputeBounds();
/**
* Time stamp for computation of bounds.
*/
vtkTimeStamp BoundsMTime;
/**
* These are the internal polydata mapper that do the
* rendering. We save then so that they can keep their
* display lists.
*/
vtkCompositePolyDataMapperInternals* Internal;
/**
* Time stamp for when we need to update the
* internal mappers
*/
vtkTimeStamp InternalMappersBuildTime;
private:
vtkCompositePolyDataMapper(const vtkCompositePolyDataMapper&) = delete;
void operator=(const vtkCompositePolyDataMapper&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|