[Bf-blender-cvs] [b62f854feb5] collada: refactor: collada moved utility functions from collada_util into BlenderContext

Gaia Clary noreply at git.blender.org
Wed Apr 10 22:40:33 CEST 2019


Commit: b62f854feb52658de2d52ad0fc65c2dab416d8d5
Author: Gaia Clary
Date:   Sat Apr 6 21:01:37 2019 +0200
Branches: collada
https://developer.blender.org/rBb62f854feb52658de2d52ad0fc65c2dab416d8d5

refactor: collada moved utility functions from collada_util into BlenderContext

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

M	source/blender/collada/BlenderContext.cpp
M	source/blender/collada/BlenderContext.h
M	source/blender/collada/ExportSettings.h
M	source/blender/collada/SceneExporter.cpp
M	source/blender/collada/collada_utils.cpp
M	source/blender/collada/collada_utils.h

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

diff --git a/source/blender/collada/BlenderContext.cpp b/source/blender/collada/BlenderContext.cpp
index 8713a8b6a19..be815dd26ac 100644
--- a/source/blender/collada/BlenderContext.cpp
+++ b/source/blender/collada/BlenderContext.cpp
@@ -18,9 +18,90 @@
  * \ingroup collada
  */
 
+#include <vector>
+
 #include "BlenderContext.h"
 #include "BKE_scene.h"
 
+bool bc_is_base_node(LinkNode *export_set, Object *ob, ViewLayer *view_layer)
+{
+	Object *root = bc_get_highest_exported_ancestor_or_self(export_set, ob, view_layer);
+	return (root == ob);
+}
+
+/**
+ * Returns the highest selected ancestor
+ * returns NULL if no ancestor is selected
+ * IMPORTANT: This function expects that all exported objects have set:
+ * ob->id.tag & LIB_TAG_DOIT
+ */
+Object *bc_get_highest_exported_ancestor_or_self(LinkNode *export_set, Object *ob, ViewLayer *view_layer)
+{
+	Object *ancestor = ob;
+	while (ob->parent) {
+		if (bc_is_in_Export_set(export_set, ob->parent, view_layer)) {
+			ancestor = ob->parent;
+		}
+		ob = ob->parent;
+	}
+	return ancestor;
+}
+
+void bc_get_children(std::vector<Object *> &child_set, Object *ob, ViewLayer *view_layer)
+{
+	Base *base;
+	for (base = (Base *)view_layer->object_bases.first; base; base = base->next) {
+		Object *cob = base->object;
+		if (cob->parent == ob) {
+			switch (ob->type) {
+			case OB_MESH:
+			case OB_CAMERA:
+			case OB_LAMP:
+			case OB_EMPTY:
+			case OB_ARMATURE:
+				child_set.push_back(cob);
+			default: break;
+			}
+		}
+	}
+}
+
+bool bc_is_in_Export_set(LinkNode *export_set, Object *ob, ViewLayer *view_layer)
+{
+	bool to_export = (BLI_linklist_index(export_set, ob) != -1);
+
+	if (!to_export)
+	{
+		/* Mark this object as to_export even if it is not in the
+		export list, but it contains children to export */
+
+		std::vector<Object *> children;
+		bc_get_children(children, ob, view_layer);
+		for (int i = 0; i < children.size(); i++) {
+			if (bc_is_in_Export_set(export_set, children[i], view_layer)) {
+				to_export = true;
+				break;
+			}
+		}
+	}
+	return to_export;
+}
+
+int bc_is_marked(Object *ob)
+{
+	return ob && (ob->id.tag & LIB_TAG_DOIT);
+}
+
+void bc_remove_mark(Object *ob)
+{
+	ob->id.tag &= ~LIB_TAG_DOIT;
+}
+
+void bc_set_mark(Object *ob)
+{
+	ob->id.tag |= LIB_TAG_DOIT;
+}
+
 BlenderContext::BlenderContext(bContext *C)
 {
 	context = C;
diff --git a/source/blender/collada/BlenderContext.h b/source/blender/collada/BlenderContext.h
index dbacbb1c6fc..ab80161674b 100644
--- a/source/blender/collada/BlenderContext.h
+++ b/source/blender/collada/BlenderContext.h
@@ -60,6 +60,8 @@ static const BC_global_forward_axis BC_DEFAULT_FORWARD = BC_GLOBAL_FORWARD_Y;
 static const BC_global_up_axis BC_DEFAULT_UP = BC_GLOBAL_UP_Z;
 
 bool bc_is_in_Export_set(LinkNode *export_set, Object *ob, ViewLayer *view_layer);
+bool bc_is_base_node(LinkNode *export_set, Object *ob, ViewLayer *view_layer);
+Object *bc_get_highest_exported_ancestor_or_self(LinkNode *export_set, Object *ob, ViewLayer *view_layer);
 int bc_is_marked(Object *ob);
 void bc_remove_mark(Object *ob);
 void bc_set_mark(Object *ob);
diff --git a/source/blender/collada/ExportSettings.h b/source/blender/collada/ExportSettings.h
index 0f1f2be47aa..887ccbdaf59 100644
--- a/source/blender/collada/ExportSettings.h
+++ b/source/blender/collada/ExportSettings.h
@@ -22,6 +22,8 @@
 #define __EXPORTSETTINGS_H__
 
 #ifdef __cplusplus
+#include <vector>
+
 extern "C" {
 #endif
 
@@ -90,11 +92,11 @@ typedef struct ExportSettings {
 	LinkNode *export_set;
 } ExportSettings;
 
-bool bc_is_base_node(LinkNode *export_set, Object *ob);
-
 #ifdef __cplusplus
 }
 
+void bc_get_children(std::vector<Object *> &child_set, Object *ob, ViewLayer *view_layer);
+
 class BCExportSettings
 {
 
@@ -261,7 +263,7 @@ public:
 
 	bool is_export_root(Object *ob)
 	{
-		return bc_is_base_node(get_export_set(), ob);
+		return bc_is_base_node(get_export_set(), ob, get_view_layer());
 	}
 
 };
diff --git a/source/blender/collada/SceneExporter.cpp b/source/blender/collada/SceneExporter.cpp
index 37ef4c60956..1447fc8acf2 100644
--- a/source/blender/collada/SceneExporter.cpp
+++ b/source/blender/collada/SceneExporter.cpp
@@ -54,7 +54,7 @@ void SceneExporter::exportHierarchy()
 	// Now find all exportable base objects (highest in export hierarchy)
 	for (node = this->export_settings.get_export_set(); node; node = node->next) {
 		Object *ob = (Object *)node->link;
-		if (bc_is_base_node(this->export_settings.get_export_set(), ob)) {
+		if (this->export_settings.is_export_root(ob)) {
 			switch (ob->type) {
 				case OB_MESH:
 				case OB_CAMERA:
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp
index 85f28e02ac7..57394a90831 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -61,6 +61,7 @@ extern "C" {
 #include "ED_armature.h"
 #include "ED_screen.h"
 #include "ED_node.h"
+#include "ED_object.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -103,25 +104,6 @@ int bc_test_parent_loop(Object *par, Object *ob)
 	return bc_test_parent_loop(par->parent, ob);
 }
 
-void bc_get_children(std::vector<Object *> &child_set, Object *ob, ViewLayer *view_layer)
-{
-	Base *base;
-	for (base = (Base *)view_layer->object_bases.first; base; base = base->next) {
-		Object *cob = base->object;
-		if (cob->parent == ob) {
-			switch (ob->type) {
-			case OB_MESH:
-			case OB_CAMERA:
-			case OB_LAMP:
-			case OB_EMPTY:
-			case OB_ARMATURE:
-				child_set.push_back(cob);
-			default: break;
-			}
-		}
-	}
-}
-
 bool bc_validateConstraints(bConstraint *con)
 {
 	const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
@@ -146,7 +128,7 @@ bool bc_validateConstraints(bConstraint *con)
 
 // a shortened version of parent_set_exec()
 // if is_parent_space is true then ob->obmat will be multiplied by par->obmat before parenting
-int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
+bool bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
 {
 	Object workob;
 	Depsgraph *depsgraph = CTX_data_depsgraph(C);
@@ -310,52 +292,6 @@ Object *bc_get_assigned_armature(Object *ob)
 	return ob_arm;
 }
 
-/**
- * Returns the highest selected ancestor
- * returns NULL if no ancestor is selected
- * IMPORTANT: This function expects that all exported objects have set:
- * ob->id.tag & LIB_TAG_DOIT
- */
-Object *bc_get_highest_selected_ancestor_or_self(LinkNode *export_set, Object *ob)
-
-{
-	Object *ancestor = ob;
-	while (ob->parent) {
-		if (bc_is_marked(ob->parent)){
-			ancestor = ob->parent;
-		}
-		ob = ob->parent;
-	}
-	return ancestor;
-}
-
-bool bc_is_base_node(LinkNode *export_set, Object *ob)
-{
-	Object *root = bc_get_highest_selected_ancestor_or_self(export_set, ob);
-	return (root == ob);
-}
-
-bool bc_is_in_Export_set(LinkNode *export_set, Object *ob, ViewLayer *view_layer)
-{
-	bool to_export = (BLI_linklist_index(export_set, ob) != -1);
-
-	if (!to_export)
-	{
-		/* Mark this object as to_export even if it is not in the
-		export list, but it contains children to export */
-
-		std::vector<Object *> children;
-		bc_get_children(children, ob, view_layer);
-		for (int i = 0; i < children.size(); i++) {
-			if (bc_is_in_Export_set(export_set, children[i], view_layer)) {
-				to_export = true;
-				break;
-			}
-		}
-	}
-	return to_export;
-}
-
 bool bc_has_object_type(LinkNode *export_set, short obtype)
 {
 	LinkNode *node;
@@ -370,20 +306,6 @@ bool bc_has_object_type(LinkNode *export_set, short obtype)
 	return false;
 }
 
-int bc_is_marked(Object *ob)
-{
-	return ob && (ob->id.tag & LIB_TAG_DOIT);
-}
-
-void bc_remove_mark(Object *ob)
-{
-	ob->id.tag &= ~LIB_TAG_DOIT;
-}
-
-void bc_set_mark(Object *ob)
-{
-	ob->id.tag |= LIB_TAG_DOIT;
-}
 
 // Use bubble sort algorithm for sorting the export set
 void bc_bubble_sort_by_Object_name(LinkNode *export_set)
diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h
index 0f90a766666..45e0c8a5283 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -130,24 +130,16 @@ std::string bc_get_action_id(std::string action_name, std::string ob_name, std::
 extern float bc_get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsigned int index);
 extern int bc_test_parent_loop(Object *par, Object *ob);
 
-extern void bc_get_children(std::vector<Object *> &child_set, Object *ob, ViewLayer *view_layer);
 extern bool bc_validateConstraints(bConstraint *con);
 
-extern int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space = true);
+bool bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space = true);
 extern Object *bc_add_object(Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name);
 extern Mesh *bc_get_mesh_copy(
         BlenderContext &blender_context, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate);
 
 extern Object *bc_get_assigned_armature(Object *ob);
-extern Object *bc_get_highest_selected_ancestor_or_self(LinkNode *export_set, Object *ob);
-extern bool bc_is_base_node(LinkNode *export_set, Object *ob);
-extern bool bc_is_in_Export_set(LinkNode *export_set, Object *ob, ViewLayer *view_layer);
 extern bool bc_has_object_type(LinkNode *export_set, short obtype);
 
-extern int bc_is_marked(Object *ob);
-extern void bc_remove_mark(Object *ob);
-extern void bc_set_mark(Object *ob);
-
 extern char *bc_CustomData_get_layer_name(const CustomData *data, int type, int n);
 extern char *bc_CustomData_get_active_layer_name(const CustomData *data, int type);



More information about the Bf-blender-cvs mailing list