VTK  9.3.1
vtkDataAssembly.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
108 #ifndef vtkDataAssembly_h
109 #define vtkDataAssembly_h
110 
111 #include "vtkCommonDataModelModule.h" // for export macros
112 #include "vtkObject.h"
113 
114 #include <map> // for std::map
115 #include <memory> // for std::unique_ptr
116 #include <string> // for std::string
117 #include <vector> // for std::vector
118 
119 VTK_ABI_NAMESPACE_BEGIN
121 
122 class VTKCOMMONDATAMODEL_EXPORT vtkDataAssembly : public vtkObject
123 {
124 public:
125  static vtkDataAssembly* New();
126  vtkTypeMacro(vtkDataAssembly, vtkObject);
127  void PrintSelf(ostream& os, vtkIndent indent) override;
128 
134  void Initialize();
135 
137 
142  bool InitializeFromXML(const char* xmlcontents);
144 
146 
149  std::string SerializeToXML(vtkIndent indent) const;
151 
156  static int GetRootNode() { return 0; }
157 
159 
162  void SetRootNodeName(const char* name)
163  {
164  this->SetNodeName(vtkDataAssembly::GetRootNode(), name);
165  }
166  const char* GetRootNodeName() const { return this->GetNodeName(vtkDataAssembly::GetRootNode()); }
168 
177  int AddNode(const char* name, int parent = 0);
178 
186  std::vector<int> AddNodes(const std::vector<std::string>& names, int parent = 0);
187 
192  int AddSubtree(int parent, vtkDataAssembly* other, int otherParent = 0);
193 
203  bool RemoveNode(int id);
204 
206 
213  void SetNodeName(int id, const char* name);
214  const char* GetNodeName(int id) const;
216 
220  std::string GetNodePath(int id) const;
221 
225  int GetFirstNodeByPath(const char* path) const;
226 
237  bool AddDataSetIndex(int id, unsigned int dataset_index);
238 
245  bool AddDataSetIndices(int id, const std::vector<unsigned int>& dataset_indices);
246 
253  bool AddDataSetIndexRange(int id, unsigned int index_start, int count);
254 
260  bool RemoveDataSetIndex(int id, unsigned int dataset_index);
261 
270  bool RemoveAllDataSetIndices(int id, bool traverse_subtree = true);
271 
273  {
274  DepthFirst = 0,
275  BreadthFirst
276  };
277 
284  int FindFirstNodeWithName(
285  const char* name, int traversal_order = vtkDataAssembly::TraversalOrder::DepthFirst) const;
286 
291  std::vector<int> FindNodesWithName(
292  const char* name, int sort_order = vtkDataAssembly::TraversalOrder::DepthFirst) const;
293 
304  std::vector<int> GetChildNodes(int parent, bool traverse_subtree = true,
305  int traversal_order = vtkDataAssembly::TraversalOrder::DepthFirst) const;
306 
313  int GetNumberOfChildren(int parent) const;
314 
318  int GetChild(int parent, int index) const;
319 
323  int GetChildIndex(int parent, int child) const;
324 
329  int GetParent(int id) const;
330 
335  bool HasAttribute(int id, const char* name) const;
336 
338 
342  void SetAttribute(int id, const char* name, const char* value);
343  void SetAttribute(int id, const char* name, int value);
344  void SetAttribute(int id, const char* name, unsigned int value);
345 #if VTK_ID_TYPE_IMPL != VTK_INT
346  void SetAttribute(int id, const char* name, vtkIdType value);
347 #endif
348 
351 
354  bool GetAttribute(int id, const char* name, const char*& value) const;
355  bool GetAttribute(int id, const char* name, int& value) const;
356  bool GetAttribute(int id, const char* name, unsigned int& value) const;
357 #if VTK_ID_TYPE_IMPL != VTK_INT
358  bool GetAttribute(int id, const char* name, vtkIdType& value) const;
359 #endif
360 
363 
367  const char* GetAttributeOrDefault(int id, const char* name, const char* default_value) const;
368  int GetAttributeOrDefault(int id, const char* name, int default_value) const;
369  unsigned int GetAttributeOrDefault(int id, const char* name, unsigned int default_value) const;
370 #if VTK_ID_TYPE_IMPL != VTK_INT
371  vtkIdType GetAttributeOrDefault(int id, const char* name, vtkIdType default_value) const;
372 #endif
373 
376 
381  int traversal_order = vtkDataAssembly::TraversalOrder::DepthFirst) const
382  {
383  this->Visit(0, visitor, traversal_order);
384  }
385  void Visit(int id, vtkDataAssemblyVisitor* visitor,
386  int traversal_order = vtkDataAssembly::TraversalOrder::DepthFirst) const;
388 
390 
402  std::vector<unsigned int> GetDataSetIndices(int id, bool traverse_subtree = true,
403  int traversal_order = vtkDataAssembly::TraversalOrder::DepthFirst) const;
404  std::vector<unsigned int> GetDataSetIndices(const std::vector<int>& ids,
405  bool traverse_subtree = true,
406  int traversal_order = vtkDataAssembly::TraversalOrder::DepthFirst) const;
408 
418  std::vector<int> SelectNodes(const std::vector<std::string>& path_queries,
419  int traversal_order = vtkDataAssembly::TraversalOrder::DepthFirst) const;
420 
426  bool RemapDataSetIndices(
427  const std::map<unsigned int, unsigned int>& mapping, bool remove_unmapped);
428 
435  void SubsetCopy(vtkDataAssembly* other, const std::vector<int>& selected_branches);
436 
440  void DeepCopy(vtkDataAssembly* other);
441 
445  static bool IsNodeNameValid(const char* name);
446 
453  static std::string MakeValidNodeName(const char* name);
454 
458  static bool IsNodeNameReserved(const char* name);
459 
460 protected:
461  vtkDataAssembly();
462  ~vtkDataAssembly() override;
463 
464 private:
465  vtkDataAssembly(const vtkDataAssembly&) = delete;
466  void operator=(const vtkDataAssembly&) = delete;
467 
468  class vtkInternals;
469  std::unique_ptr<vtkInternals> Internals;
470 };
471 
472 VTK_ABI_NAMESPACE_END
473 #endif
const char * GetRootNodeName() const
Get/Set root node name.
abstract base class for most VTK objects
Definition: vtkObject.h:51
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
visitor API for vtkDataAssembly
void Visit(vtkDataAssemblyVisitor *visitor, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Visit each node in the assembly for processing.
int vtkIdType
Definition: vtkType.h:315
a simple class to control print indentation
Definition: vtkIndent.h:28
static int GetRootNode()
Returns the ID for the root node.
hierarchical representation to use with vtkPartitionedDataSetCollection
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
void SetRootNodeName(const char *name)
Get/Set root node name.