Core: Add Gui::Document::getTreeRootObjects()

This commit is contained in:
PaddleStroke
2024-05-30 12:20:35 +02:00
parent 238fd6a5fc
commit fb32579498
7 changed files with 57 additions and 3 deletions

View File

@@ -2531,3 +2531,32 @@ void Document::slotChangePropertyEditor(const App::Document &doc, const App::Pro
getMainWindow()->setUserSchema(doc.UnitSystem.getValue());
}
}
std::vector<App::DocumentObject*> Document::getTreeRootObjects() const
{
std::vector<App::DocumentObject*> docObjects = d->_pcDocument->getObjects();
std::unordered_map<App::DocumentObject*, bool> rootMap;
for (auto it : docObjects) {
rootMap[it] = true;
}
for (auto obj : docObjects) {
ViewProvider* vp = Application::Instance->getViewProvider(obj);
if (!vp) {
continue;
}
std::vector<App::DocumentObject*> children = vp->claimChildren();
for (auto child : children) {
rootMap[child] = false;
}
}
std::vector<App::DocumentObject*> rootObjs;
for (const auto& it : rootMap) {
if (it.second) {
rootObjs.push_back(it.first);
}
}
return rootObjs;
}