[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