diff options
author | Gaia Clary <gaia.clary@machinimatrix.org> | 2012-06-14 14:38:39 +0400 |
---|---|---|
committer | Gaia Clary <gaia.clary@machinimatrix.org> | 2012-06-14 14:38:39 +0400 |
commit | 05a1a3169336380b51947451ebdabdf5455fe38f (patch) | |
tree | 8b5dcfdd1bb0bbee0028d2561f300c631a4e95fe /source/blender/collada | |
parent | 68386ef23a2b48f4a0ece2da1d8e5f66e0ef4bf6 (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.h | 1 | ||||
-rw-r--r-- | source/blender/collada/collada.cpp | 5 | ||||
-rw-r--r-- | source/blender/collada/collada.h | 1 | ||||
-rw-r--r-- | source/blender/collada/collada_utils.cpp | 28 | ||||
-rw-r--r-- | source/blender/collada/collada_utils.h | 2 |
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 |