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.
143 lines
5.0 KiB
143 lines
5.0 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkLODActor.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 vtkLODActor - an actor that supports multiple levels of detail
|
|
// .SECTION Description
|
|
// vtkLODActor is an actor that stores multiple levels of detail (LOD) and
|
|
// can automatically switch between them. It selects which level of detail to
|
|
// use based on how much time it has been allocated to render. Currently a
|
|
// very simple method of TotalTime/NumberOfActors is used. (In the future
|
|
// this should be modified to dynamically allocate the rendering time between
|
|
// different actors based on their needs.)
|
|
//
|
|
// There are three levels of detail by default. The top level is just the
|
|
// normal data. The lowest level of detail is a simple bounding box outline
|
|
// of the actor. The middle level of detail is a point cloud of a fixed
|
|
// number of points that have been randomly sampled from the mapper's input
|
|
// data. Point attributes are copied over to the point cloud. These two
|
|
// lower levels of detail are accomplished by creating instances of a
|
|
// vtkOutlineFilter (low-res) and vtkMaskPoints (medium-res). Additional
|
|
// levels of detail can be add using the AddLODMapper() method.
|
|
//
|
|
// To control the frame rate, you typically set the vtkRenderWindowInteractor
|
|
// DesiredUpdateRate and StillUpdateRate. This then will cause vtkLODActor
|
|
// to adjust its LOD to fulfill the requested update rate.
|
|
//
|
|
// For greater control on levels of detail, see also vtkLODProp3D. That
|
|
// class allows arbitrary definition of each LOD.
|
|
|
|
// .SECTION Caveats
|
|
// If you provide your own mappers, you are responsible for setting its
|
|
// ivars correctly, such as ScalarRange, LookupTable, and so on.
|
|
//
|
|
// On some systems the point cloud rendering (the default, medium level of
|
|
// detail) can result in points so small that they can hardly be seen. In
|
|
// this case, use the GetProperty()->SetPointSize() method to increase the
|
|
// rendered size of the points.
|
|
|
|
// .SECTION see also
|
|
// vtkActor vtkRenderer vtkLODProp3D
|
|
|
|
#ifndef __vtkLODActor_h
|
|
#define __vtkLODActor_h
|
|
|
|
#include "vtkActor.h"
|
|
|
|
class vtkMapper;
|
|
class vtkMapperCollection;
|
|
class vtkMaskPoints;
|
|
class vtkOutlineFilter;
|
|
class vtkPolyDataMapper;
|
|
class vtkRenderer;
|
|
class vtkViewport;
|
|
class vtkWindow;
|
|
|
|
class VTK_RENDERING_EXPORT vtkLODActor : public vtkActor
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkLODActor,vtkActor);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Creates a vtkLODActor with the following defaults: origin(0,0,0)
|
|
// position=(0,0,0) scale=(1,1,1) visibility=1 pickable=1 dragable=1
|
|
// orientation=(0,0,0). NumberOfCloudPoints is set to 150.
|
|
static vtkLODActor *New();
|
|
|
|
// Description:
|
|
// This causes the actor to be rendered. It, in turn, will render the actor's
|
|
// property and then mapper.
|
|
virtual void Render(vtkRenderer *, vtkMapper *);
|
|
|
|
// Description:
|
|
// This method is used internally by the rendering process. We overide
|
|
// the superclass method to properly set the estimated render time.
|
|
int RenderOpaqueGeometry(vtkViewport *viewport);
|
|
|
|
// 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:
|
|
// Add another level of detail. They do not have to be in any order
|
|
// of complexity.
|
|
void AddLODMapper(vtkMapper *mapper);
|
|
|
|
// Description:
|
|
// Set/Get the number of random points for the point cloud.
|
|
vtkGetMacro(NumberOfCloudPoints,int);
|
|
vtkSetMacro(NumberOfCloudPoints,int);
|
|
|
|
// Description:
|
|
// All the mappers for different LODs are stored here.
|
|
// The order is not important.
|
|
vtkGetObjectMacro(LODMappers, vtkMapperCollection);
|
|
|
|
// Description:
|
|
// When this objects gets modified, this method also modifies the object.
|
|
void Modified();
|
|
|
|
// Description:
|
|
// Shallow copy of an LOD actor. Overloads the virtual vtkProp method.
|
|
void ShallowCopy(vtkProp *prop);
|
|
|
|
protected:
|
|
vtkLODActor();
|
|
~vtkLODActor();
|
|
|
|
vtkActor *Device;
|
|
vtkMapperCollection *LODMappers;
|
|
|
|
// stuff for creating our own LOD mappers
|
|
vtkMaskPoints *MaskPoints;
|
|
vtkOutlineFilter *OutlineFilter;
|
|
vtkTimeStamp BuildTime;
|
|
int NumberOfCloudPoints;
|
|
vtkPolyDataMapper *LowMapper;
|
|
vtkPolyDataMapper *MediumMapper;
|
|
|
|
virtual void CreateOwnLODs();
|
|
virtual void UpdateOwnLODs();
|
|
virtual void DeleteOwnLODs();
|
|
|
|
private:
|
|
vtkLODActor(const vtkLODActor&); // Not implemented.
|
|
void operator=(const vtkLODActor&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|