VTK  9.7.1
vtkRenderMaterialLibrary.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
8 #ifndef vtkRenderMaterialLibrary_h
9 #define vtkRenderMaterialLibrary_h
10 
11 #include "vtkObject.h"
12 #include "vtkRenderingCoreModule.h" // For export macro
13 #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
14 
15 #include <initializer_list>
16 #include <iosfwd>
17 #include <map>
18 #include <set>
19 #include <string>
20 #include <vector>
21 
22 VTK_ABI_NAMESPACE_BEGIN
23 class vtkRenderMaterialLibraryInternals;
24 class vtkTexture;
25 struct TextureInfo;
26 
27 class VTKRENDERINGCORE_EXPORT VTK_MARSHALAUTO vtkRenderMaterialLibrary : public vtkObject
28 {
29 public:
30  static vtkRenderMaterialLibrary* New();
32  void PrintSelf(ostream& os, vtkIndent indent) override;
33 
34  enum class ParameterType
35  {
36  FLOAT,
37  FLOAT_DATA,
38  COLOR_RGB,
39  COLOR_RGBA,
40  VEC2,
41  VEC3,
42  VEC4,
43  BOOLEAN,
44  INT,
45  TEXTURE,
46  NORMALIZED_FLOAT
47  };
48 
49  using ParametersMap = std::map<std::string, ParameterType>;
50 
57  bool ReadFile(const char* FileName);
58 
64  bool ReadBuffer(const char* Buffer);
65 
70  const std::set<std::string>& GetMaterialNames() const;
71 
78  std::string LookupImplName(const std::string& nickname) const;
79 
85  std::vector<std::string> GetDoubleShaderVariableList(const std::string& nickname) const;
86 
93  virtual std::vector<double> GetDoubleShaderVariable(
94  const std::string& nickname, const std::string& varname) const;
95 
101  std::vector<std::string> GetTextureList(const std::string& nickname) const;
102 
109  vtkTexture* GetTexture(const std::string& nickname, const std::string& varname) const;
110 
117  virtual const TextureInfo* GetTextureInfo(
118  const std::string& nickname, const std::string& varname) const;
119 
126  std::string GetTextureName(const std::string& nickname, const std::string& varname) const;
127 
134  std::string GetTextureFilename(const std::string& nickname, const std::string& varname) const;
135 
142  virtual void AddMaterial(const std::string& nickname, const std::string& implname);
143 
149  void RemoveMaterial(const std::string& nickname);
150 
160  virtual void AddTexture(const std::string& nickname, const std::string& varname, vtkTexture* tex,
161  const std::string& texturename = "unnamedTexture", const std::string& filename = "");
162 
171  virtual void AddShaderVariable(
172  const std::string& nickname, const std::string& variablename, int numVars, const double* x);
173 
181  void AddShaderVariable(const std::string& nickname, const std::string& variablename,
182  const std::initializer_list<double>& data)
183  {
184  this->AddShaderVariable(nickname, variablename, static_cast<int>(data.size()), data.begin());
185  }
186 
192  void RemoveShaderVariable(const std::string& nickname, const std::string& variablename);
193 
198  void RemoveAllShaderVariables(const std::string& nickname);
199 
205  void RemoveTexture(const std::string& nickname, const std::string& varname);
206 
211  void RemoveAllTextures(const std::string& nickname);
212 
219  const char* WriteBuffer(bool writeImageInline = true);
220 
227  void WriteFile(const std::string& filename, bool writeImageInline = false);
228 
229 protected:
240  virtual bool ReadTextureFileOrData(const std::string& texFilenameOrData, bool fromfile,
241  const std::string& parentDir, vtkTexture* textr, std::string& textureName,
242  std::string& textureFilename);
243 
244  bool InternalParse(const char* filename, bool fromfile);
245  virtual bool InternalParseJSON(const char* filename, bool fromfile, std::istream* doc);
246  bool InternalParseMTL(const char* filename, bool fromfile, std::istream* doc);
247 
248  virtual const std::map<std::string, ParametersMap>& GetParametersDictionary() const;
249 
255  std::string FilePathToTextureName(const std::string& path);
256 
262  std::string Trim(const std::string& s);
263 
265  ~vtkRenderMaterialLibrary() override;
266 
267  virtual const char* GetFamilyName() const { return "Generic"; }
268  virtual const char* GetAcceptedFamilyName() const { return nullptr; }
269  std::string InternalGetImplName(const std::string& nickname) const;
270 
271 private:
273  void operator=(const vtkRenderMaterialLibrary&) = delete;
274 
275  vtkRenderMaterialLibraryInternals* Internal;
276 };
277 
278 VTK_ABI_NAMESPACE_END
279 #endif
void AddShaderVariable(const std::string &nickname, const std::string &variablename, const std::initializer_list< double > &data)
Add a shader variable from an initializer list of doubles.
abstract base class for most VTK objects
Definition: vtkObject.h:52
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual const char * GetFamilyName() const
a renderer-agnostic collection of materials for VTK apps to draw from
a simple class to control print indentation
Definition: vtkIndent.h:28
virtual const char * GetAcceptedFamilyName() const
handles properties associated with a texture map
Definition: vtkTexture.h:58
std::map< std::string, ParameterType > ParametersMap
#define VTK_MARSHALAUTO
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...