diff options
Diffstat (limited to 'source/blender/io/collada/BlenderContext.cpp')
-rw-r--r-- | source/blender/io/collada/BlenderContext.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/source/blender/io/collada/BlenderContext.cpp b/source/blender/io/collada/BlenderContext.cpp index 5f54f38a0ab..807488233ce 100644 --- a/source/blender/io/collada/BlenderContext.cpp +++ b/source/blender/io/collada/BlenderContext.cpp @@ -9,21 +9,25 @@ #include "BlenderContext.h" #include "ExportSettings.h" +#include "BKE_layer.h" #include "BKE_scene.h" -bool bc_is_base_node(LinkNode *export_set, Object *ob, ViewLayer *view_layer) +#include "BLI_listbase.h" + +bool bc_is_base_node(LinkNode *export_set, Object *ob, const Scene *scene, ViewLayer *view_layer) { - Object *root = bc_get_highest_exported_ancestor_or_self(export_set, ob, view_layer); + Object *root = bc_get_highest_exported_ancestor_or_self(export_set, ob, scene, view_layer); return (root == ob); } Object *bc_get_highest_exported_ancestor_or_self(LinkNode *export_set, Object *ob, + const Scene *scene, ViewLayer *view_layer) { Object *ancestor = ob; while (ob->parent) { - if (bc_is_in_Export_set(export_set, ob->parent, view_layer)) { + if (bc_is_in_Export_set(export_set, ob->parent, scene, view_layer)) { ancestor = ob->parent; } ob = ob->parent; @@ -31,10 +35,13 @@ Object *bc_get_highest_exported_ancestor_or_self(LinkNode *export_set, return ancestor; } -void bc_get_children(std::vector<Object *> &child_set, Object *ob, ViewLayer *view_layer) +void bc_get_children(std::vector<Object *> &child_set, + Object *ob, + const Scene *scene, + ViewLayer *view_layer) { - Base *base; - for (base = (Base *)view_layer->object_bases.first; base; base = base->next) { + BKE_view_layer_synced_ensure(scene, view_layer); + LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer)) { Object *cob = base->object; if (cob->parent == ob) { switch (ob->type) { @@ -51,7 +58,10 @@ void bc_get_children(std::vector<Object *> &child_set, Object *ob, ViewLayer *vi } } -bool bc_is_in_Export_set(LinkNode *export_set, Object *ob, ViewLayer *view_layer) +bool bc_is_in_Export_set(LinkNode *export_set, + Object *ob, + const Scene *scene, + ViewLayer *view_layer) { bool to_export = (BLI_linklist_index(export_set, ob) != -1); @@ -60,9 +70,9 @@ bool bc_is_in_Export_set(LinkNode *export_set, Object *ob, ViewLayer *view_layer * export list, but it contains children to export. */ std::vector<Object *> children; - bc_get_children(children, ob, view_layer); + bc_get_children(children, ob, scene, view_layer); for (Object *child : children) { - if (bc_is_in_Export_set(export_set, child, view_layer)) { + if (bc_is_in_Export_set(export_set, child, scene, view_layer)) { to_export = true; break; } |