[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47881] trunk/blender/source/blender: Collada: Added export Option 'sort by object name' to fix an issue with Second Life import

Gaia Clary gaia.clary at machinimatrix.org
Thu Jun 14 12:38:44 CEST 2012


Revision: 47881
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47881
Author:   gaiaclary
Date:     2012-06-14 10:38:39 +0000 (Thu, 14 Jun 2012)
Log Message:
-----------
Collada: Added export Option 'sort by object name' to fix an issue with Second Life import

Modified Paths:
--------------
    trunk/blender/source/blender/collada/ExportSettings.h
    trunk/blender/source/blender/collada/collada.cpp
    trunk/blender/source/blender/collada/collada.h
    trunk/blender/source/blender/collada/collada_utils.cpp
    trunk/blender/source/blender/collada/collada_utils.h
    trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/collada/ExportSettings.h
===================================================================
--- trunk/blender/source/blender/collada/ExportSettings.h	2012-06-14 10:21:53 UTC (rev 47880)
+++ trunk/blender/source/blender/collada/ExportSettings.h	2012-06-14 10:38:39 UTC (rev 47881)
@@ -39,6 +39,7 @@
  bool include_armatures;
  bool include_children;
  bool use_object_instantiation;
+ bool sort_by_name;
  bool second_life;
  char *filepath;
  LinkNode *export_set;

Modified: trunk/blender/source/blender/collada/collada.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada.cpp	2012-06-14 10:21:53 UTC (rev 47880)
+++ trunk/blender/source/blender/collada/collada.cpp	2012-06-14 10:38:39 UTC (rev 47881)
@@ -59,6 +59,7 @@
     int include_children,
 
     int use_object_instantiation,
+	int sort_by_name,
     int second_life)
 {
 	ExportSettings export_settings;
@@ -79,6 +80,7 @@
 	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 @@
 	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);
 

Modified: trunk/blender/source/blender/collada/collada.h
===================================================================
--- trunk/blender/source/blender/collada/collada.h	2012-06-14 10:21:53 UTC (rev 47880)
+++ trunk/blender/source/blender/collada/collada.h	2012-06-14 10:38:39 UTC (rev 47881)
@@ -47,6 +47,7 @@
 		int include_children,
 
 		int use_object_instantiation,
+		int sort_by_name,
 		int second_life);
 
 

Modified: trunk/blender/source/blender/collada/collada_utils.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.cpp	2012-06-14 10:21:53 UTC (rev 47880)
+++ trunk/blender/source/blender/collada/collada_utils.cpp	2012-06-14 10:38:39 UTC (rev 47881)
@@ -226,3 +226,31 @@
 {
 	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

Modified: trunk/blender/source/blender/collada/collada_utils.h
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.h	2012-06-14 10:21:53 UTC (rev 47880)
+++ trunk/blender/source/blender/collada/collada_utils.h	2012-06-14 10:38:39 UTC (rev 47881)
@@ -71,4 +71,6 @@
 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

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2012-06-14 10:21:53 UTC (rev 47880)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2012-06-14 10:38:39 UTC (rev 47881)
@@ -93,11 +93,12 @@
     int include_armatures,
     int include_children,
     int use_object_instantiation,
+	int sort_by_name,
     int second_life)
 {
 	collada_export(scene, filepath, selected, apply_modifiers, 
 	               include_armatures, include_children,
-	               use_object_instantiation, second_life);
+	               use_object_instantiation, sort_by_name, second_life);
 }
 
 #endif
@@ -130,6 +131,7 @@
 	parm = RNA_def_boolean(func, "include_armatures", 0, "Include Armatures", "Include armature(s) used by the exported objects");
 	parm = RNA_def_boolean(func, "include_children", 0, "Include Children", "Include all children even if not selected");
 	parm = RNA_def_boolean(func, "use_object_instantiation", 1, "Use Object Instantiation", "Instantiate multiple Objects from same Data");
+	parm = RNA_def_boolean(func, "sort_by_name", 0, "Sort by Object name", "Sort exported data by Object name");
 	parm = RNA_def_boolean(func, "second_life", 0, "Export for Second Life", "Compatibility mode for Second Life");
 	RNA_def_function_ui_description(func, "Export to collada file");
 #endif

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2012-06-14 10:21:53 UTC (rev 47880)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2012-06-14 10:38:39 UTC (rev 47881)
@@ -2167,6 +2167,7 @@
 	int apply_modifiers;
 	int include_children;
 	int use_object_instantiation;
+	int sort_by_name;
 	
 	if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
 		BKE_report(op->reports, RPT_ERROR, "No filename given");
@@ -2182,6 +2183,7 @@
 	include_armatures        = RNA_boolean_get(op->ptr, "include_armatures");
 	include_children         = RNA_boolean_get(op->ptr, "include_children");
 	use_object_instantiation = RNA_boolean_get(op->ptr, "use_object_instantiation");
+	sort_by_name             = RNA_boolean_get(op->ptr, "sort_by_name");
 	second_life              = RNA_boolean_get(op->ptr, "second_life");
 
 	/* get editmode results */
@@ -2195,6 +2197,7 @@
 	        include_armatures,
 	        include_children,
 	        use_object_instantiation,
+			sort_by_name,
 	        second_life)) {
 		return OPERATOR_FINISHED;
 	}
@@ -2232,6 +2235,9 @@
 	RNA_def_boolean(ot->srna, "use_object_instantiation", 1, "Use Object Instantiation",
 	                "Instantiate multiple Objects from same Data");
 
+	RNA_def_boolean(ot->srna, "sort_by_name", 0, "Sort by Object name",
+	                "Sort exported data by Object name");
+
 	RNA_def_boolean(ot->srna, "second_life", 0, "Export for Second Life",
 	                "Compatibility mode for Second Life");
 }




More information about the Bf-blender-cvs mailing list