VTK  9.3.20240419
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 
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 
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
349 
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
361 
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
374 
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 
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:
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
visitor API for vtkDataAssembly
hierarchical representation to use with vtkPartitionedDataSetCollection
int GetParent(int id) const
Returns the id for the parent node, if any.
static int GetRootNode()
Returns the ID for the root node.
std::vector< unsigned int > GetDataSetIndices(int id, bool traverse_subtree=true, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Returns the dataset indices associated with the node.
bool GetAttribute(int id, const char *name, const char *&value) const
Get an attribute value.
std::vector< int > SelectNodes(const std::vector< std::string > &path_queries, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Returns ids for nodes matching the path_queries.
bool InitializeFromXML(const char *xmlcontents)
Initializes a data-assembly using an XML representation of the assembly.
void SetAttribute(int id, const char *name, unsigned int value)
Set an attribute.
void DeepCopy(vtkDataAssembly *other)
Deep copy the other.
static bool IsNodeNameValid(const char *name)
Validates a node name.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void Visit(int id, vtkDataAssemblyVisitor *visitor, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Visit each node in the assembly for processing.
bool AddDataSetIndexRange(int id, unsigned int index_start, int count)
Same as AddDataSetIndices except this supports adding a contiguous range of dataset indices in one go...
bool GetAttribute(int id, const char *name, int &value) const
Get an attribute value.
const char * GetRootNodeName() const
Get/Set root node name.
bool AddDataSetIndex(int id, unsigned int dataset_index)
Add a dataset index to a node.
int GetNumberOfChildren(int parent) const
Returns the number of child nodes.
~vtkDataAssembly() override
static std::string MakeValidNodeName(const char *name)
Converts any string to a string that is a valid node name.
std::vector< int > FindNodesWithName(const char *name, int sort_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Finds all nodes with the given name.
int FindFirstNodeWithName(const char *name, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Finds first node that is encountered in a breadth first traversal of the assembly with the given name...
const char * GetAttributeOrDefault(int id, const char *name, const char *default_value) const
Get an attribute value.
int GetChildIndex(int parent, int child) const
Returns the index for a child under a given.
std::string SerializeToXML(vtkIndent indent) const
Saves the data-assembly as a XML.
void SubsetCopy(vtkDataAssembly *other, const std::vector< int > &selected_branches)
Create a deep-copy of other by only passing the chosen branches.
std::vector< unsigned int > GetDataSetIndices(const std::vector< int > &ids, bool traverse_subtree=true, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Returns the dataset indices associated with the node.
int AddNode(const char *name, int parent=0)
Adds a node to the assembly with the given name and returns its id.
bool AddDataSetIndices(int id, const std::vector< unsigned int > &dataset_indices)
Same as AddDataSetIndex except supports adding multiple dataset indices in one go.
std::vector< int > GetChildNodes(int parent, bool traverse_subtree=true, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Returns ids for all child nodes.
bool GetAttribute(int id, const char *name, unsigned int &value) const
Get an attribute value.
void SetAttribute(int id, const char *name, int value)
Set an attribute.
void SetNodeName(int id, const char *name)
Get/Set a node's name.
int GetFirstNodeByPath(const char *path) const
Return a node id given the path.
static vtkDataAssembly * New()
void Visit(vtkDataAssemblyVisitor *visitor, int traversal_order=vtkDataAssembly::TraversalOrder::DepthFirst) const
Visit each node in the assembly for processing.
bool HasAttribute(int id, const char *name) const
Returns true if attribute with the given name is present on the chosen node.
bool RemapDataSetIndices(const std::map< unsigned int, unsigned int > &mapping, bool remove_unmapped)
Remap dataset indices.
void Initialize()
Initializes the data-assembly.
int GetAttributeOrDefault(int id, const char *name, int default_value) const
Get an attribute value.
void SetRootNodeName(const char *name)
Get/Set root node name.
const char * GetNodeName(int id) const
Get/Set a node's name.
int AddSubtree(int parent, vtkDataAssembly *other, int otherParent=0)
Add a subtree by copy the nodes from another tree starting with the specified parent index.
bool RemoveDataSetIndex(int id, unsigned int dataset_index)
Removes a dataset index from a node.
int GetChild(int parent, int index) const
Returns the id for a child not at the given index, if valid, otherwise -1.
static bool IsNodeNameReserved(const char *name)
Returns true for node names that are reserved.
bool RemoveAllDataSetIndices(int id, bool traverse_subtree=true)
Clears all dataset indices from the node.
void SetAttribute(int id, const char *name, const char *value)
Set an attribute.
bool RemoveNode(int id)
Removes a node from the assembly.
unsigned int GetAttributeOrDefault(int id, const char *name, unsigned int default_value) const
Get an attribute value.
std::vector< int > AddNodes(const std::vector< std::string > &names, int parent=0)
Same as AddNode except allows adding multiple nodes in one go.
std::string GetNodePath(int id) const
Returns the path for a node.
a simple class to control print indentation
Definition: vtkIndent.h:108
abstract base class for most VTK objects
Definition: vtkObject.h:162
@ value
Definition: vtkX3D.h:220
@ name
Definition: vtkX3D.h:219
@ index
Definition: vtkX3D.h:246
@ string
Definition: vtkX3D.h:490
int vtkIdType
Definition: vtkType.h:315