| 102 | } |
| 103 | |
| 104 | std::vector<ResourceObject> getRecursiveResources(const ModelObject& object) { |
| 105 | std::set<Handle> resultSet; |
| 106 | std::pair<HandleSet::const_iterator, bool> insertResult; |
| 107 | std::vector<ResourceObject> result; |
| 108 | |
| 109 | std::deque<ModelObject> objectQueue; |
| 110 | objectQueue.push_back(object); |
| 111 | |
| 112 | while (!objectQueue.empty()) { |
| 113 | ModelObject currentObject(objectQueue[0]); |
| 114 | objectQueue.pop_front(); |
| 115 | for (const ResourceObject& resource : currentObject.resources()) { |
| 116 | insertResult = resultSet.insert(resource.handle()); |
| 117 | if (insertResult.second) { |
| 118 | result.push_back(resource); |
| 119 | objectQueue.push_back(resource.cast<ModelObject>()); |
| 120 | } |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | return result; |
| 125 | } |
| 126 | |
| 127 | std::vector<std::vector<ModelObject>> getRecursiveResourceSubTrees(const ModelObject& object, bool includeComponentCostLineItems) { |
| 128 | std::set<Handle> resultSet; |