comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkCompositePolyDataMapper2.h

258 lines
7.9 KiB
C
Raw Normal View History

2024-11-21 11:50:43 +08:00
/*=========================================================================
Program: Visualization Toolkit
Module: vtkCompositePolyDataMapper2.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 vtkCompositePolyDataMapper2
* @brief mapper for composite dataset consisting
* of polygonal data.
*
* vtkCompositePolyDataMapper2 is similar to vtkCompositePolyDataMapper except
* that instead of creating individual mapper for each block in the composite
* dataset, it iterates over the blocks internally.
*/
#ifndef vtkCompositePolyDataMapper2_h
#define vtkCompositePolyDataMapper2_h
#include "vtkOpenGLPolyDataMapper.h"
#include "vtkRenderingOpenGL2Module.h" // For export macro
#include "vtkSmartPointer.h" // for vtkSmartPointer
#include "vtkColor.h" // used for ivars
#include <map> // use for ivars
#include <stack> // used for ivars
#include <vector> // used for ivars
class vtkCompositeDataDisplayAttributes;
class vtkCompositeMapperHelper2;
class vtkCompositeMapperHelperData;
class VTKRENDERINGOPENGL2_EXPORT vtkCompositePolyDataMapper2 : public vtkOpenGLPolyDataMapper
{
public:
static vtkCompositePolyDataMapper2* New();
vtkTypeMacro(vtkCompositePolyDataMapper2, vtkOpenGLPolyDataMapper);
void PrintSelf(ostream& os, vtkIndent indent) 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;
///@}
///@{
/**
* Set/get the composite data set attributes.
*/
void SetCompositeDataDisplayAttributes(vtkCompositeDataDisplayAttributes* attributes);
vtkCompositeDataDisplayAttributes* GetCompositeDataDisplayAttributes();
///@}
///@{
/**
* Set/get the visibility for a block given its flat index.
*/
void SetBlockVisibility(unsigned int index, bool visible);
bool GetBlockVisibility(unsigned int index);
void RemoveBlockVisibility(unsigned int index);
void RemoveBlockVisibilities();
///@}
///@{
/**
* Set/get the color for a block given its flat index.
*/
void SetBlockColor(unsigned int index, const double color[3]);
void SetBlockColor(unsigned int index, double r, double g, double b)
{
double color[3] = { r, g, b };
this->SetBlockColor(index, color);
}
double* GetBlockColor(unsigned int index);
void RemoveBlockColor(unsigned int index);
void RemoveBlockColors();
///@}
///@{
/**
* Set/get the opacity for a block given its flat index.
*/
void SetBlockOpacity(unsigned int index, double opacity);
double GetBlockOpacity(unsigned int index);
void RemoveBlockOpacity(unsigned int index);
void RemoveBlockOpacities();
///@}
/**
* If the current 'color by' array is missing on some datasets, color these
* dataset by the LookupTable's NaN color, if the lookup table supports it.
* Default is false.
* @{
*/
vtkSetMacro(ColorMissingArraysWithNanColor, bool);
vtkGetMacro(ColorMissingArraysWithNanColor, bool);
vtkBooleanMacro(ColorMissingArraysWithNanColor, bool);
/**@}*/
/**
* 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;
/**
* This calls RenderPiece (in a for loop if streaming is necessary).
*/
void Render(vtkRenderer* ren, vtkActor* act) override;
/**\brief A convenience method for enabling/disabling
* the VBO's shift+scale transform.
*/
void SetVBOShiftScaleMethod(int m) override;
/**\brief Pause updates of shift-scale parameters based on camera position.
*
* This override passes the information to all instances in \a Helpers .
*/
void SetPauseShiftScale(bool pauseShiftScale) override;
///@{
/**
* Call SetInputArrayToProcess on helpers.
*/
using vtkAlgorithm::SetInputArrayToProcess;
void SetInputArrayToProcess(
int idx, int port, int connection, int fieldAssociation, const char* name) override;
void SetInputArrayToProcess(
int idx, int port, int connection, int fieldAssociation, int fieldAttributeType) override;
void SetInputArrayToProcess(int idx, vtkInformation* info) override;
///@}
/**
* Accessor to the ordered list of PolyData that we end last drew.
*/
std::vector<vtkPolyData*> GetRenderedList() { return this->RenderedList; }
/**
* allows a mapper to update a selections color buffers
* Called from a prop which in turn is called from the selector
*/
void ProcessSelectorPixelBuffers(
vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
/**
* Overridden to include vtkCompositeDataDisplayAttributes' mtime.
*/
vtkMTimeType GetMTime() override;
protected:
vtkCompositePolyDataMapper2();
~vtkCompositePolyDataMapper2() 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;
/**
* Need to loop over the hierarchy to compute bounds
*/
void ComputeBounds() override;
/**
* This method is called before RenderPiece is called on helpers.
* One can override it to initialize the helpers.
*/
virtual void InitializeHelpersBeforeRendering(
vtkRenderer* vtkNotUsed(ren), vtkActor* vtkNotUsed(act))
{
}
/**
* Time stamp for computation of bounds.
*/
vtkTimeStamp BoundsMTime;
// what "index" are we currently rendering, -1 means none
int CurrentFlatIndex;
std::map<const std::string, vtkCompositeMapperHelper2*> Helpers;
std::map<vtkPolyData*, vtkCompositeMapperHelperData*> HelperDataMap;
vtkTimeStamp HelperMTime;
virtual vtkCompositeMapperHelper2* CreateHelper();
// copy values to the helpers
virtual void CopyMapperValuesToHelper(vtkCompositeMapperHelper2* helper);
class RenderBlockState
{
public:
std::stack<bool> Visibility;
std::stack<bool> Pickability;
std::stack<double> Opacity;
std::stack<vtkColor3d> AmbientColor;
std::stack<vtkColor3d> DiffuseColor;
std::stack<vtkColor3d> SpecularColor;
std::stack<vtkColor3d> SelectionColor;
std::stack<float> SelectionOpacity;
};
bool RecursiveHasTranslucentGeometry(vtkDataObject* dobj, unsigned int& flat_index);
vtkStateStorage TranslucentState;
bool HasTranslucentGeometry;
void BuildRenderValues(
vtkRenderer* renderer, vtkActor* actor, vtkDataObject* dobj, unsigned int& flat_index);
vtkStateStorage RenderValuesState;
RenderBlockState BlockState;
void RenderBlock(
vtkRenderer* renderer, vtkActor* actor, vtkDataObject* dobj, unsigned int& flat_index);
/**
* Composite data set attributes.
*/
vtkSmartPointer<vtkCompositeDataDisplayAttributes> CompositeAttributes;
friend class vtkCompositeMapperHelper2;
/**
* If the current 'color by' array is missing on some datasets, color these
* dataset by the LookupTable's NaN color, if the lookup table supports it.
*/
bool ColorMissingArraysWithNanColor;
std::vector<vtkPolyData*> RenderedList;
private:
double ColorResult[3];
vtkCompositePolyDataMapper2(const vtkCompositePolyDataMapper2&) = delete;
void operator=(const vtkCompositePolyDataMapper2&) = delete;
};
#endif