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.

155 lines
4.9 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkAbstractVolumeMapper.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 vtkAbstractVolumeMapper
* @brief Abstract class for a volume mapper
*
*
* vtkAbstractVolumeMapper is the abstract definition of a volume mapper.
* Specific subclasses deal with different specific types of data input
*
* @sa
* vtkVolumeMapper vtkUnstructuredGridVolumeMapper
*/
#ifndef vtkAbstractVolumeMapper_h
#define vtkAbstractVolumeMapper_h
#include "vtkAbstractMapper3D.h"
#include "vtkRenderingCoreModule.h" // For export macro
class vtkRenderer;
class vtkVolume;
class vtkWindow;
class vtkDataSet;
class VTKRENDERINGCORE_EXPORT vtkAbstractVolumeMapper : public vtkAbstractMapper3D
{
public:
vtkTypeMacro(vtkAbstractVolumeMapper, vtkAbstractMapper3D);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@{
/**
* Set/Get the input data
*/
virtual vtkDataSet* GetDataSetInput();
virtual vtkDataObject* GetDataObjectInput();
//@}
//@{
/**
* Return bounding box (array of six doubles) of data expressed as
* (xmin,xmax, ymin,ymax, zmin,zmax).
*/
double* GetBounds() VTK_SIZEHINT(6) override;
void GetBounds(double bounds[6]) override { this->vtkAbstractMapper3D::GetBounds(bounds); }
//@}
//@{
/**
* Control how the mapper works with scalar point data and cell attribute
* data. By default (ScalarModeToDefault), the mapper will use point data,
* and if no point data is available, then cell data is used. Alternatively
* you can explicitly set the mapper to use point data
* (ScalarModeToUsePointData) or cell data (ScalarModeToUseCellData).
* You can also choose to get the scalars from an array in point field
* data (ScalarModeToUsePointFieldData) or cell field data
* (ScalarModeToUseCellFieldData). If scalars are coming from a field
* data array, you must call SelectScalarArray.
*/
vtkSetMacro(ScalarMode, int);
vtkGetMacro(ScalarMode, int);
vtkSetMacro(ArrayAccessMode, int);
void SetScalarModeToDefault() { this->SetScalarMode(VTK_SCALAR_MODE_DEFAULT); }
void SetScalarModeToUsePointData() { this->SetScalarMode(VTK_SCALAR_MODE_USE_POINT_DATA); }
void SetScalarModeToUseCellData() { this->SetScalarMode(VTK_SCALAR_MODE_USE_CELL_DATA); }
void SetScalarModeToUsePointFieldData()
{
this->SetScalarMode(VTK_SCALAR_MODE_USE_POINT_FIELD_DATA);
}
void SetScalarModeToUseCellFieldData()
{
this->SetScalarMode(VTK_SCALAR_MODE_USE_CELL_FIELD_DATA);
}
//@}
//@{
/**
* When ScalarMode is set to UsePointFieldData or UseCellFieldData,
* you can specify which scalar array to use during rendering.
* The transfer function in the vtkVolumeProperty (attached to the calling
* vtkVolume) will decide how to convert vectors to colors.
*/
virtual void SelectScalarArray(int arrayNum);
virtual void SelectScalarArray(const char* arrayName);
//@}
/**
* Get the array name or number and component to use for rendering.
*/
virtual char* GetArrayName() { return this->ArrayName; }
virtual int GetArrayId() { return this->ArrayId; }
virtual int GetArrayAccessMode() { return this->ArrayAccessMode; }
/**
* Return the method for obtaining scalar data.
*/
const char* GetScalarModeAsString();
//@{
/**
* WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
*/
virtual float GetGradientMagnitudeScale() { return 1.0f; }
virtual float GetGradientMagnitudeBias() { return 0.0f; }
virtual float GetGradientMagnitudeScale(int) { return 1.0f; }
virtual float GetGradientMagnitudeBias(int) { return 0.0f; }
//@}
/**
* WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
* DO NOT USE THIS METHOD OUTSIDE OF THE RENDERING PROCESS
* Render the volume
*/
virtual void Render(vtkRenderer* ren, vtkVolume* vol) = 0;
/**
* WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
* Release any graphics resources that are being consumed by this mapper.
* The parameter window could be used to determine which graphic
* resources to release.
*/
void ReleaseGraphicsResources(vtkWindow*) override {}
protected:
vtkAbstractVolumeMapper();
~vtkAbstractVolumeMapper() override;
// see algorithm for more info
int FillInputPortInformation(int port, vtkInformation* info) override;
int ScalarMode;
char* ArrayName;
int ArrayId;
int ArrayAccessMode;
private:
vtkAbstractVolumeMapper(const vtkAbstractVolumeMapper&) = delete;
void operator=(const vtkAbstractVolumeMapper&) = delete;
};
#endif