[Bf-blender-cvs] [fa317eb69c6] blender2.8: Fix collada exporting for Blender 2.8

Dalai Felinto noreply at git.blender.org
Tue Apr 4 17:46:55 CEST 2017


Commit: fa317eb69c6e7f83cac329f209d7a76916754e76
Author: Dalai Felinto
Date:   Wed Mar 29 21:55:04 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBfa317eb69c6e7f83cac329f209d7a76916754e76

Fix collada exporting for Blender 2.8

Instead of exporting all the scene objects, I'm exporting the scene
layer objects instead.

===================================================================

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/object.c
M	source/blender/collada/collada.cpp
M	source/blender/collada/collada.h
M	source/blender/editors/io/io_collada.c
M	source/blender/makesrna/intern/rna_scene_api.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index fe6ee9179d8..ec780ea6f8a 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -255,7 +255,7 @@ typedef enum eObjectSet {
 	OB_SET_ALL       /* All Objects      */
 } eObjectSet;
 
-struct LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectSet, eObRelationTypes includeFilter);
+struct LinkNode *BKE_object_relational_superset(struct Scene *scene, struct SceneLayer *scene_layer, eObjectSet objectSet, eObRelationTypes includeFilter);
 struct LinkNode *BKE_object_groups(struct Object *ob);
 void             BKE_object_groups_clear(struct Object *object);
 
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 5f1e47e0f5a..dda26eb3ca2 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -3300,17 +3300,17 @@ static void obrel_list_add(LinkNode **links, Object *ob)
 }
 
 /*
- * Iterates over all objects of the given scene.
+ * Iterates over all objects of the given scene layer.
  * Depending on the eObjectSet flag:
  * collect either OB_SET_ALL, OB_SET_VISIBLE or OB_SET_SELECTED objects.
  * If OB_SET_VISIBLE or OB_SET_SELECTED are collected, 
  * then also add related objects according to the given includeFilters.
  */
-LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectSet, eObRelationTypes includeFilter)
+LinkNode *BKE_object_relational_superset(struct Scene *scene, struct SceneLayer *scene_layer, eObjectSet objectSet, eObRelationTypes includeFilter)
 {
 	LinkNode *links = NULL;
 
-	BaseLegacy *base;
+	Base *base;
 
 	/* Remove markers from all objects */
 	for (base = scene->base.first; base; base = base->next) {
@@ -3318,15 +3318,15 @@ LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectS
 	}
 
 	/* iterate over all selected and visible objects */
-	for (base = scene->base.first; base; base = base->next) {
+	for (base = scene_layer->object_bases.first; base; base = base->next) {
 		if (objectSet == OB_SET_ALL) {
 			/* as we get all anyways just add it */
 			Object *ob = base->object;
 			obrel_list_add(&links, ob);
 		}
 		else {
-			if ((objectSet == OB_SET_SELECTED && TESTBASELIB_BGMODE(((View3D *)NULL), scene, base)) ||
-			    (objectSet == OB_SET_VISIBLE  && BASE_EDITABLE_BGMODE(((View3D *)NULL), scene, base)))
+			if ((objectSet == OB_SET_SELECTED && TESTBASELIB_BGMODE_NEW(base)) ||
+			    (objectSet == OB_SET_VISIBLE  && BASE_EDITABLE_BGMODE_NEW(base)))
 			{
 				Object *ob = base->object;
 
@@ -3354,9 +3354,9 @@ LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectS
 
 				/* child relationship */
 				if (includeFilter & (OB_REL_CHILDREN | OB_REL_CHILDREN_RECURSIVE)) {
-					BaseLegacy *local_base;
-					for (local_base = scene->base.first; local_base; local_base = local_base->next) {
-						if (BASE_EDITABLE_BGMODE(((View3D *)NULL), scene, local_base)) {
+					Base *local_base;
+					for (local_base = scene_layer->object_bases.first; local_base; local_base = local_base->next) {
+						if (BASE_EDITABLE_BGMODE_NEW(local_base)) {
 
 							Object *child = local_base->object;
 							if (obrel_list_test(child)) {
diff --git a/source/blender/collada/collada.cpp b/source/blender/collada/collada.cpp
index bfe3180909b..42d3758d121 100644
--- a/source/blender/collada/collada.cpp
+++ b/source/blender/collada/collada.cpp
@@ -68,6 +68,7 @@ int collada_import(bContext *C,
 }
 
 int collada_export(Scene *sce,
+                   SceneLayer *scene_layer,
                    const char *filepath,
 
                    int apply_modifiers,
@@ -124,7 +125,7 @@ int collada_export(Scene *sce,
 	if (export_settings.include_children) includeFilter |= OB_REL_CHILDREN_RECURSIVE;
 
 	eObjectSet objectSet = (export_settings.selected) ? OB_SET_SELECTED : OB_SET_ALL;
-	export_settings.export_set = BKE_object_relational_superset(sce, objectSet, (eObRelationTypes)includeFilter);
+	export_settings.export_set = BKE_object_relational_superset(sce, scene_layer, objectSet, (eObRelationTypes)includeFilter);
 	int export_count = BLI_linklist_count(export_settings.export_set);
 
 	if (export_count == 0) {
diff --git a/source/blender/collada/collada.h b/source/blender/collada/collada.h
index 8035af59c8b..c8e6c99206a 100644
--- a/source/blender/collada/collada.h
+++ b/source/blender/collada/collada.h
@@ -48,6 +48,7 @@ typedef enum BC_export_transformation_type {
 
 struct bContext;
 struct Scene;
+struct SceneLayer;
 
 /*
  * both return 1 on success, 0 on error
@@ -63,6 +64,7 @@ int collada_import(struct bContext *C,
 				   int keep_bind_info);
 
 int collada_export(struct Scene *sce,
+                   struct SceneLayer *scene_layer,
                    const char *filepath,
                    int apply_modifiers,
                    BC_export_mesh_type export_mesh_type,
diff --git a/source/blender/editors/io/io_collada.c b/source/blender/editors/io/io_collada.c
index 139c9817437..35d7c4f7083 100644
--- a/source/blender/editors/io/io_collada.c
+++ b/source/blender/editors/io/io_collada.c
@@ -159,6 +159,7 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
 
 
 	export_count = collada_export(CTX_data_scene(C),
+		CTX_data_scene_layer(C),
 		filepath,
 		apply_modifiers,
 		export_mesh_type,
diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c
index 9b202120b82..37d9c0747fd 100644
--- a/source/blender/makesrna/intern/rna_scene_api.c
+++ b/source/blender/makesrna/intern/rna_scene_api.c
@@ -266,6 +266,7 @@ static void rna_Scene_alembic_export(
 /* Note: This definition must match to the generated function call */
 static void rna_Scene_collada_export(
         Scene *scene,
+        bContext *C,
         const char *filepath, 
         int apply_modifiers,
 
@@ -289,6 +290,7 @@ static void rna_Scene_collada_export(
         int keep_bind_info)
 {
 	collada_export(scene,
+		CTX_data_scene_layer(C),
 		filepath,
 
 		apply_modifiers,
@@ -432,6 +434,8 @@ void RNA_api_scene(StructRNA *srna)
 	                "Keep Bind Info",
 	                "Store bind pose information in custom bone properties for later use during Collada export");
 
+	RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+
 #endif
 
 #ifdef WITH_ALEMBIC




More information about the Bf-blender-cvs mailing list