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.
87 lines
2.8 KiB
C++
87 lines
2.8 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkOpenGLCellToVTKCellMap.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 vtkOpenGLCellToVTKCellMap
|
|
* @brief OpenGL rendering utility functions
|
|
*
|
|
* vtkOpenGLCellToVTKCellMap provides functions map from opengl primitive ID to vtk
|
|
*
|
|
*
|
|
*/
|
|
|
|
#ifndef vtkOpenGLCellToVTKCellMap_h
|
|
#define vtkOpenGLCellToVTKCellMap_h
|
|
|
|
#include "vtkNew.h" // for ivars
|
|
#include "vtkObject.h"
|
|
#include "vtkRenderingOpenGL2Module.h" // For export macro
|
|
#include "vtkStateStorage.h" // used for ivars
|
|
|
|
class vtkCellArray;
|
|
class vtkPoints;
|
|
|
|
class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLCellToVTKCellMap : public vtkObject
|
|
{
|
|
public:
|
|
static vtkOpenGLCellToVTKCellMap* New();
|
|
vtkTypeMacro(vtkOpenGLCellToVTKCellMap, vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
// Create supporting arrays that are needed when rendering cell data
|
|
// Some VTK cells have to be broken into smaller cells for OpenGL
|
|
// When we have cell data we have to map cell attributes from the VTK
|
|
// cell number to the actual OpenGL cell
|
|
//
|
|
// The same concept applies to cell based picking
|
|
//
|
|
void BuildCellSupportArrays(vtkCellArray * [4], int representation, vtkPoints* points);
|
|
|
|
void BuildPrimitiveOffsetsIfNeeded(vtkCellArray * [4], int representation, vtkPoints* points);
|
|
|
|
vtkIdType ConvertOpenGLCellIdToVTKCellId(bool pointPicking, vtkIdType openGLId);
|
|
|
|
// rebuilds if needed
|
|
void Update(vtkCellArray** prims, int representation, vtkPoints* points);
|
|
|
|
size_t GetSize() { return this->CellCellMap.size(); }
|
|
|
|
vtkIdType* GetPrimitiveOffsets() { return this->PrimitiveOffsets; }
|
|
|
|
vtkIdType GetValue(size_t i) { return this->CellCellMap[i]; }
|
|
|
|
// what offset should verts start at
|
|
void SetStartOffset(vtkIdType start);
|
|
|
|
vtkIdType GetFinalOffset() { return this->PrimitiveOffsets[3] + this->CellMapSizes[3]; }
|
|
|
|
protected:
|
|
vtkOpenGLCellToVTKCellMap();
|
|
~vtkOpenGLCellToVTKCellMap() override;
|
|
|
|
std::vector<vtkIdType> CellCellMap;
|
|
vtkIdType CellMapSizes[4];
|
|
vtkIdType PrimitiveOffsets[4];
|
|
int BuildRepresentation;
|
|
int StartOffset = 0;
|
|
vtkStateStorage MapBuildState;
|
|
vtkStateStorage TempState;
|
|
|
|
private:
|
|
vtkOpenGLCellToVTKCellMap(const vtkOpenGLCellToVTKCellMap&) = delete;
|
|
void operator=(const vtkOpenGLCellToVTKCellMap&) = delete;
|
|
};
|
|
|
|
#endif
|