Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaia Clary <gaia.clary@machinimatrix.org>2012-06-14 14:38:39 +0400
committerGaia Clary <gaia.clary@machinimatrix.org>2012-06-14 14:38:39 +0400
commit05a1a3169336380b51947451ebdabdf5455fe38f (patch)
tree8b5dcfdd1bb0bbee0028d2561f300c631a4e95fe /source/blender/collada
parent68386ef23a2b48f4a0ece2da1d8e5f66e0ef4bf6 (diff)
Collada: Added export Option 'sort by object name' to fix an issue with Second Life import
Diffstat (limited to 'source/blender/collada')
-rw-r--r--source/blender/collada/ExportSettings.h1
-rw-r--r--source/blender/collada/collada.cpp5
-rw-r--r--source/blender/collada/collada.h1
-rw-r--r--source/blender/collada/collada_utils.cpp28
-rw-r--r--source/blender/collada/collada_utils.h2
5 files changed, 37 insertions, 0 deletions
diff --git a/source/blender/collada/ExportSettings.h b/source/blender/collada/ExportSettings.h
index 97ea6873856..e856eefab99 100644
--- a/source/blender/collada/ExportSettings.h
+++ b/source/blender/collada/ExportSettings.h
@@ -39,6 +39,7 @@ struct ExportSettings
bool include_armatures;
bool include_children;
bool use_object_instantiation;
+ bool sort_by_name;
bool second_life;
char *filepath;
LinkNode *export_set;
diff --git a/source/blender/collada/collada.cpp b/source/blender/collada/collada.cpp
index bc03bdc970c..9a4fd44b9e9 100644
--- a/source/blender/collada/collada.cpp
+++ b/source/blender/collada/collada.cpp
@@ -59,6 +59,7 @@ int collada_export(
int include_children,
int use_object_instantiation,
+ int sort_by_name,
int second_life)
{
ExportSettings export_settings;
@@ -79,6 +80,7 @@ int collada_export(
export_settings.include_children = include_children != 0;
export_settings.second_life = second_life != 0;
export_settings.use_object_instantiation = use_object_instantiation != 0;
+ export_settings.sort_by_name = sort_by_name != 0;
export_settings.filepath = (char *)filepath;
int includeFilter = OB_REL_NONE;
@@ -88,6 +90,9 @@ int collada_export(
eObjectSet objectSet = (export_settings.selected) ? OB_SET_SELECTED : OB_SET_ALL;
export_settings.export_set = BKE_object_relational_superset(sce, objectSet, (eObRelationTypes)includeFilter);
+ if (export_settings.sort_by_name)
+ bc_bubble_sort_by_Object_name(export_settings.export_set);
+
DocumentExporter exporter(&export_settings);
exporter.exportCurrentScene(sce);
diff --git a/source/blender/collada/collada.h b/source/blender/collada/collada.h
index da2179ca135..8daf2b65fe2 100644
--- a/source/blender/collada/collada.h
+++ b/source/blender/collada/collada.h
@@ -47,6 +47,7 @@ extern "C" {
int include_children,
int use_object_instantiation,
+ int sort_by_name,
int second_life);
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp
index f481de994a3..3d9aa8e542d 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -226,3 +226,31 @@ void bc_remove_mark(Object *ob)
{
ob->id.flag &= ~LIB_DOIT;
}
+
+// Use bubble sort algorithm for sorting the export set
+void bc_bubble_sort_by_Object_name(LinkNode *export_set)
+{
+ int i, j; // loop indices
+ bool unsorted = true;
+
+ LinkNode *current;
+ int set_size = BLI_linklist_length(export_set);
+ for(i = 0; (i < set_size) && unsorted; i++) {
+ unsorted = false;
+
+ for (current=export_set; current->next; current = current->next) {
+ Object *a = (Object *)current->link;
+ Object *b = (Object *)current->next->link;
+
+ std::string str_a (a->id.name);
+ std::string str_b (b->id.name);
+
+ if (str_a.compare(str_b) > 0) {
+ current->link = b;
+ current->next->link = a;
+ unsorted = true;
+ }
+
+ }
+ }
+} \ No newline at end of file
diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h
index 71365ffb8d0..139a2cb93bd 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -71,4 +71,6 @@ extern void bc_remove_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);
+extern void bc_bubble_sort_by_Object_name(LinkNode *export_set);
+
#endif