VTK  9.0.3
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 =========================================================================*/
27 #ifndef vtkCompositeDataDisplayAttributes_h
28 #define vtkCompositeDataDisplayAttributes_h
29 #include <functional> // for std::function
30 #include <unordered_map> // for std::unordered_map
31 
32 #include "vtkColor.h" // for vtkColor3d
33 #include "vtkObject.h"
34 #include "vtkRenderingCoreModule.h" // for export macro
35 
36 class vtkBoundingBox;
37 class vtkDataObject;
38 
39 class VTKRENDERINGCORE_EXPORT vtkCompositeDataDisplayAttributes : public vtkObject
40 {
41 public:
44  void PrintSelf(ostream& os, vtkIndent indent) override;
45 
49  bool HasBlockVisibilities() const;
50 
52 
55  void SetBlockVisibility(vtkDataObject* data_object, bool visible);
56  bool GetBlockVisibility(vtkDataObject* data_object) const;
58 
63  bool HasBlockVisibility(vtkDataObject* data_object) const;
64 
69 
75  // This method is deprecated and will be removed in VTK 8.2. It is misspelled.
76  VTK_LEGACY(void RemoveBlockVisibilites());
77 
81  bool HasBlockPickabilities() const;
82 
84 
87  void SetBlockPickability(vtkDataObject* data_object, bool visible);
88  bool GetBlockPickability(vtkDataObject* data_object) const;
90 
95  bool HasBlockPickability(vtkDataObject* data_object) const;
96 
101 
107 
109 
112  void SetBlockColor(vtkDataObject* data_object, const double color[3]);
113  void GetBlockColor(vtkDataObject* data_object, double color[3]) const;
116 
120  bool HasBlockColors() const;
121 
125  bool HasBlockColor(vtkDataObject* data_object) const;
126 
130  void RemoveBlockColor(vtkDataObject* data_object);
131 
136 
138 
141  void SetBlockOpacity(vtkDataObject* data_object, double opacity);
142  double GetBlockOpacity(vtkDataObject* data_object) const;
144 
148  bool HasBlockOpacities() const;
149 
153  bool HasBlockOpacity(vtkDataObject* data_object) const;
154 
158  void RemoveBlockOpacity(vtkDataObject* data_object);
159 
164 
166 
170  void SetBlockMaterial(vtkDataObject* data_object, const std::string& material);
171  const std::string& GetBlockMaterial(vtkDataObject* data_object) const;
173 
177  bool HasBlockMaterials() const;
178 
182  bool HasBlockMaterial(vtkDataObject* data_object) const;
183 
187  void RemoveBlockMaterial(vtkDataObject* data_object);
188 
193 
200  static void ComputeVisibleBounds(
201  vtkCompositeDataDisplayAttributes* cda, vtkDataObject* dobj, double bounds[6]);
202 
208  const unsigned int flat_index, vtkDataObject* parent_obj, unsigned int& current_flat_index);
209 
210  void VisitVisibilities(std::function<bool(vtkDataObject*, bool)> visitor)
211  {
212  for (auto entry : this->BlockVisibilities)
213  {
214  if (visitor(entry.first, entry.second))
215  {
216  break;
217  }
218  }
219  }
220 
221 protected:
224 
225 private:
227  void operator=(const vtkCompositeDataDisplayAttributes&) = delete;
228 
237  static void ComputeVisibleBoundsInternal(vtkCompositeDataDisplayAttributes* cda,
238  vtkDataObject* dobj, vtkBoundingBox* bbox, bool parentVisible = true);
239 
240  using BoolMap = std::unordered_map<vtkDataObject*, bool>;
241  using DoubleMap = std::unordered_map<vtkDataObject*, double>;
242  using ColorMap = std::unordered_map<vtkDataObject*, vtkColor3d>;
243  using StringMap = std::unordered_map<vtkDataObject*, std::string>;
244 
245  BoolMap BlockVisibilities;
246  ColorMap BlockColors;
247  DoubleMap BlockOpacities;
248  StringMap BlockMaterials;
249  BoolMap BlockPickabilities;
250 };
251 
252 #endif // vtkCompositeDataDisplayAttributes_h
Fast, simple class for dealing with 3D bounds.
Rendering attributes for a multi-block dataset.
bool GetBlockPickability(vtkDataObject *data_object) const
void SetBlockMaterial(vtkDataObject *data_object, const std::string &material)
Set/get the material for the block with data_object.
bool HasBlockOpacities() const
Returns true if any block has an opacity set.
bool HasBlockVisibilities() const
Returns true if any block has any block visibility is set.
bool HasBlockMaterials() const
Returns true if any block has an material set.
void SetBlockOpacity(vtkDataObject *data_object, double opacity)
Set/get the opacity for the block with data_object.
void SetBlockColor(vtkDataObject *data_object, const double color[3])
Set/get the color for the block with data_object.
void SetBlockVisibility(vtkDataObject *data_object, bool visible)
Set/get the visibility for the block with data_object.
const std::string & GetBlockMaterial(vtkDataObject *data_object) const
static vtkCompositeDataDisplayAttributes * New()
bool GetBlockVisibility(vtkDataObject *data_object) const
void SetBlockPickability(vtkDataObject *data_object, bool visible)
Set/get the pickability for the block with data_object.
void RemoveBlockVisibilities()
Removes all block visibility flags.
bool HasBlockOpacity(vtkDataObject *data_object) const
Returns true if the block with data_object has an opacity set.
bool HasBlockPickability(vtkDataObject *data_object) const
Returns true if the block with the given data_object has a pickability set.
void RemoveBlockOpacities()
Removes all block opacities.
void RemoveBlockColor(vtkDataObject *data_object)
Removes the block color for the block with data_object.
void GetBlockColor(vtkDataObject *data_object, double color[3]) const
void VisitVisibilities(std::function< bool(vtkDataObject *, bool)> visitor)
static vtkDataObject * DataObjectFromIndex(const unsigned int flat_index, vtkDataObject *parent_obj, unsigned int &current_flat_index)
Get the DataObject corresponding to the node with index flat_index under parent_obj.
double GetBlockOpacity(vtkDataObject *data_object) const
bool HasBlockColor(vtkDataObject *data_object) const
Returns true if the block with the given data_object has a color.
void RemoveBlockMaterial(vtkDataObject *data_object)
Removes the set material for the block with data_object.
void RemoveBlockOpacity(vtkDataObject *data_object)
Removes the set opacity for the block with data_object.
bool HasBlockVisibility(vtkDataObject *data_object) const
Returns true if the block with the given data_object has a visibility set.
void RemoveBlockMaterials()
Removes all block materialss.
bool HasBlockPickabilities() const
Returns true if any block has any block pickability is set.
bool HasBlockColors() const
Returns true if any block has any block color is set.
void RemoveBlockPickabilities()
Removes all block pickability flags.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void RemoveBlockVisibility(vtkDataObject *data_object)
Removes the block visibility flag for the block with data_object.
static void ComputeVisibleBounds(vtkCompositeDataDisplayAttributes *cda, vtkDataObject *dobj, double bounds[6])
If the input dobj is a vtkCompositeDataSet, we will loop over the hierarchy recursively starting from...
bool HasBlockMaterial(vtkDataObject *data_object) const
Returns true if the block with data_object has an material set.
void RemoveBlockPickability(vtkDataObject *data_object)
Removes the block pickability flag for the block with data_object.
vtkColor3d GetBlockColor(vtkDataObject *data_object) const
void RemoveBlockColors()
Removes all block colors.
general representation of visualization data
Definition: vtkDataObject.h:60
a simple class to control print indentation
Definition: vtkIndent.h:34
abstract base class for most VTK objects
Definition: vtkObject.h:54
@ function
Definition: vtkX3D.h:255
@ color
Definition: vtkX3D.h:227
@ string
Definition: vtkX3D.h:496