------------------------------------------------------------------------------
| 846 | |
| 847 | //------------------------------------------------------------------------------ |
| 848 | bool vtkDataAssembly::RemoveAllDataSetIndices(int id, bool traverse_subtree /*=true*/) |
| 849 | { |
| 850 | auto& internals = (*this->Internals); |
| 851 | auto node = internals.FindNode(id); |
| 852 | if (!node) |
| 853 | { |
| 854 | return false; |
| 855 | } |
| 856 | |
| 857 | std::vector<pugi::xml_node> to_remove; |
| 858 | |
| 859 | struct Walker : pugi::xml_tree_walker |
| 860 | { |
| 861 | std::vector<pugi::xml_node>* ToRemove = nullptr; |
| 862 | bool for_each(pugi::xml_node& nnode) override |
| 863 | { |
| 864 | if (vtkDataAssembly::IsNodeNameReserved(nnode.name())) |
| 865 | { |
| 866 | this->ToRemove->push_back(nnode); |
| 867 | } |
| 868 | return true; |
| 869 | } |
| 870 | }; |
| 871 | |
| 872 | if (traverse_subtree) |
| 873 | { |
| 874 | Walker walker; |
| 875 | walker.ToRemove = &to_remove; |
| 876 | node.traverse(walker); |
| 877 | } |
| 878 | else |
| 879 | { |
| 880 | for (const auto& dschild : node.children(DATASET_NODE_NAME)) |
| 881 | { |
| 882 | to_remove.push_back(dschild); |
| 883 | } |
| 884 | } |
| 885 | |
| 886 | for (auto& dsnode : to_remove) |
| 887 | { |
| 888 | dsnode.parent().remove_child(dsnode); |
| 889 | } |
| 890 | |
| 891 | if (!to_remove.empty()) |
| 892 | { |
| 893 | this->Modified(); |
| 894 | return true; |
| 895 | } |
| 896 | else |
| 897 | { |
| 898 | return false; |
| 899 | } |
| 900 | } |
| 901 | |
| 902 | //------------------------------------------------------------------------------ |
| 903 | int vtkDataAssembly::GetNumberOfChildren(int parent) const |