VTK  9.2.6
vtkOSPRayMaterialLibrary.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOSPRayMaterialLibrary.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
28 #ifndef vtkOSPRayMaterialLibrary_h
29 #define vtkOSPRayMaterialLibrary_h
30 
31 #include "vtkObject.h"
32 #include "vtkRenderingRayTracingModule.h" // For export macro
33 
34 #include <initializer_list> //for initializer_list!
35 #include <map> //for map!
36 #include <set> //for set!
37 #include <string> //for string!
38 #include <vector> //for vector!
39 
40 class vtkOSPRayMaterialLibraryInternals;
41 class vtkTexture;
42 struct TextureInfo;
43 
44 class VTKRENDERINGRAYTRACING_EXPORT vtkOSPRayMaterialLibrary : public vtkObject
45 {
46 public:
47  static vtkOSPRayMaterialLibrary* New();
49  void PrintSelf(ostream& os, vtkIndent indent) override;
50 
54  void Fire();
55 
61  bool ReadFile(const char* FileName);
62 
69  const char* WriteBuffer(bool writeImageInline = true);
70 
77  void WriteFile(const std::string& filename, bool writeImageInline = false);
78 
84  bool ReadBuffer(const char* Buffer);
85 
89  std::set<std::string> GetMaterialNames();
90 
94  std::string LookupImplName(const std::string& nickname);
95 
99  std::vector<std::string> GetDoubleShaderVariableList(const std::string& nickname);
100 
104  std::vector<double> GetDoubleShaderVariable(
105  const std::string& nickname, const std::string& varname);
106 
110  std::vector<std::string> GetTextureList(const std::string& nickname);
111 
115  vtkTexture* GetTexture(const std::string& nickname, const std::string& varname);
116 
121  const TextureInfo* GetTextureInfo(const std::string& nickname, const std::string& varname);
122 
127  std::string GetTextureName(const std::string& nickname, const std::string& varname);
128 
132  std::string GetTextureFilename(const std::string& nickname, const std::string& varname);
133 
139  void AddMaterial(const std::string& nickname, const std::string& implname);
140 
146  void RemoveMaterial(const std::string& nickname);
147 
158  void AddTexture(const std::string& nickname, const std::string& varname, vtkTexture* tex,
159  const std::string& texturename = "unnamedTexture", const std::string& filename = "");
160 
166  void RemoveTexture(const std::string& nickname, const std::string& varname);
167 
171  void RemoveAllTextures(const std::string& nickname);
172 
178  void AddShaderVariable(
179  const std::string& nickname, const std::string& variablename, int numVars, const double* x);
180  void AddShaderVariable(const std::string& nickname, const std::string& variablename,
181  const std::initializer_list<double>& data)
182  {
183  this->AddShaderVariable(nickname, variablename, static_cast<int>(data.size()), data.begin());
184  }
192  void RemoveShaderVariable(const std::string& nickname, const std::string& variablename);
193 
197  void RemoveAllShaderVariables(const std::string& nickname);
198 
202  enum class ParameterType : unsigned char
203  {
204  FLOAT,
205  NORMALIZED_FLOAT,
206  FLOAT_DATA,
207  VEC3,
208  COLOR_RGB,
209  BOOLEAN,
210  TEXTURE,
211  VEC2,
212  VEC4
213  };
214 
215  using ParametersMap = std::map<std::string, ParameterType>;
216 
220  static const std::map<std::string, ParametersMap>& GetParametersDictionary();
221 
222 protected:
224  ~vtkOSPRayMaterialLibrary() override;
225 
226  bool InternalParse(const char* name, bool IsFile);
227  bool InternalParseJSON(const char* name, bool IsFile, std::istream* doc);
228  bool InternalParseMTL(const char* name, bool IsFile, std::istream* doc);
229  bool ReadTextureFileOrData(const std::string& texFilenameOrData, bool fromfile,
230  const std::string& parentDir, vtkTexture* textr, std::string& textureName,
231  std::string& textureFilename);
232 
233 private:
235  void operator=(const vtkOSPRayMaterialLibrary&) = delete;
236 
237  vtkOSPRayMaterialLibraryInternals* Internal;
238 };
239 
240 #endif
ParameterType
Lists all different parameter types.
abstract base class for most VTK objects
Definition: vtkObject.h:62
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
std::map< std::string, ParameterType > ParametersMap
a collection of materials for vtk apps to draw from
a simple class to control print indentation
Definition: vtkIndent.h:39
handles properties associated with a texture map
Definition: vtkTexture.h:68
void AddShaderVariable(const std::string &nickname, const std::string &variablename, const std::initializer_list< double > &data)
Add control variable Adds a new control variable.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...