VTK  9.2.6
vtkCompositeDataDisplayAttributes.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkCompositeDataDisplayAttributes.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 =========================================================================*/
30 #ifndef vtkCompositeDataDisplayAttributes_h
31 #define vtkCompositeDataDisplayAttributes_h
32 #include <functional> // for std::function
33 #include <unordered_map> // for std::unordered_map
34 
35 #include "vtkColor.h" // for vtkColor3d
36 #include "vtkObject.h"
37 #include "vtkRenderingCoreModule.h" // for export macro
38 
39 class vtkBoundingBox;
40 class vtkDataObject;
41 
42 class VTKRENDERINGCORE_EXPORT vtkCompositeDataDisplayAttributes : public vtkObject
43 {
44 public:
47  void PrintSelf(ostream& os, vtkIndent indent) override;
48 
52  bool HasBlockVisibilities() const;
53 
55 
58  void SetBlockVisibility(vtkDataObject* data_object, bool visible);
59  bool GetBlockVisibility(vtkDataObject* data_object) const;
61 
66  bool HasBlockVisibility(vtkDataObject* data_object) const;
67 
71  void RemoveBlockVisibility(vtkDataObject* data_object);
72 
77  void RemoveBlockVisibilities();
78 
82  bool HasBlockPickabilities() const;
83 
85 
88  void SetBlockPickability(vtkDataObject* data_object, bool visible);
89  bool GetBlockPickability(vtkDataObject* data_object) const;
91 
96  bool HasBlockPickability(vtkDataObject* data_object) const;
97 
101  void RemoveBlockPickability(vtkDataObject* data_object);
102 
107  void RemoveBlockPickabilities();
108 
110 
113  void SetBlockColor(vtkDataObject* data_object, const double color[3]);
114  void GetBlockColor(vtkDataObject* data_object, double color[3]) const;
115  vtkColor3d GetBlockColor(vtkDataObject* data_object) const;
117 
121  bool HasBlockColors() const;
122 
126  bool HasBlockColor(vtkDataObject* data_object) const;
127 
131  void RemoveBlockColor(vtkDataObject* data_object);
132 
136  void RemoveBlockColors();
137 
139 
142  void SetBlockOpacity(vtkDataObject* data_object, double opacity);
143  double GetBlockOpacity(vtkDataObject* data_object) const;
145 
149  bool HasBlockOpacities() const;
150 
154  bool HasBlockOpacity(vtkDataObject* data_object) const;
155 
159  void RemoveBlockOpacity(vtkDataObject* data_object);
160 
164  void RemoveBlockOpacities();
165 
167 
171  void SetBlockMaterial(vtkDataObject* data_object, const std::string& material);
172  const std::string& GetBlockMaterial(vtkDataObject* data_object) const;
174 
178  bool HasBlockMaterials() const;
179 
183  bool HasBlockMaterial(vtkDataObject* data_object) const;
184 
188  void RemoveBlockMaterial(vtkDataObject* data_object);
189 
193  void RemoveBlockMaterials();
194 
201  static void ComputeVisibleBounds(
202  vtkCompositeDataDisplayAttributes* cda, vtkDataObject* dobj, double bounds[6]);
203 
208  static vtkDataObject* DataObjectFromIndex(
209  const unsigned int flat_index, vtkDataObject* parent_obj, unsigned int current_flat_index = 0);
210 
211  void VisitVisibilities(std::function<bool(vtkDataObject*, bool)> visitor)
212  {
213  for (auto entry : this->BlockVisibilities)
214  {
215  if (visitor(entry.first, entry.second))
216  {
217  break;
218  }
219  }
220  }
221 
222 protected:
225 
226 private:
228  void operator=(const vtkCompositeDataDisplayAttributes&) = delete;
229 
238  static void ComputeVisibleBoundsInternal(vtkCompositeDataDisplayAttributes* cda,
239  vtkDataObject* dobj, vtkBoundingBox* bbox, bool parentVisible = true);
240 
241  using BoolMap = std::unordered_map<vtkDataObject*, bool>;
242  using DoubleMap = std::unordered_map<vtkDataObject*, double>;
243  using ColorMap = std::unordered_map<vtkDataObject*, vtkColor3d>;
244  using StringMap = std::unordered_map<vtkDataObject*, std::string>;
245 
246  BoolMap BlockVisibilities;
247  ColorMap BlockColors;
248  DoubleMap BlockOpacities;
249  StringMap BlockMaterials;
250  BoolMap BlockPickabilities;
251 };
252 
253 #endif // vtkCompositeDataDisplayAttributes_h
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.
void VisitVisibilities(std::function< bool(vtkDataObject *, bool)> visitor)
Rendering attributes for a multi-block dataset.
a simple class to control print indentation
Definition: vtkIndent.h:39
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
general representation of visualization data
Definition: vtkDataObject.h:65
Fast, simple class for representing and operating on 3D bounds.