[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47060] trunk/blender: [#31607] Collada: ( Exporter) Implementation of 'use Object Instantiation' Option

Gaia Clary gaia.clary at machinimatrix.org
Sun May 27 00:46:29 CEST 2012


Revision: 47060
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47060
Author:   gaiaclary
Date:     2012-05-26 22:46:28 +0000 (Sat, 26 May 2012)
Log Message:
-----------
[#31607] Collada: (Exporter) Implementation of 'use Object Instantiation' Option

Modified Paths:
--------------
    trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life.py
    trunk/blender/source/blender/collada/ArmatureExporter.cpp
    trunk/blender/source/blender/collada/ExportSettings.h
    trunk/blender/source/blender/collada/GeometryExporter.cpp
    trunk/blender/source/blender/collada/SceneExporter.cpp
    trunk/blender/source/blender/collada/collada.cpp
    trunk/blender/source/blender/collada/collada.h
    trunk/blender/source/blender/collada/collada_internal.cpp
    trunk/blender/source/blender/collada/collada_internal.h
    trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life.py
===================================================================
--- trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life.py	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life.py	2012-05-26 22:46:28 UTC (rev 47060)
@@ -4,4 +4,5 @@
 op.selected = True
 op.apply_modifiers = True
 op.include_bone_children = False
+op.use_object_instantiation = False
 op.second_life = True

Modified: trunk/blender/source/blender/collada/ArmatureExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ArmatureExporter.cpp	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/ArmatureExporter.cpp	2012-05-26 22:46:28 UTC (rev 47060)
@@ -324,6 +324,7 @@
 	} MDeformWeight;
 	*/
 
+	bool use_instantiation = this->export_settings->use_object_instantiation;
 	Mesh *me = (Mesh*)ob->data;
 	if (!me->dvert) return;
 
@@ -331,7 +332,7 @@
 	std::string controller_id = get_controller_id(ob_arm, ob);
 
 	openSkin(controller_id, controller_name,
-	         COLLADABU::URI(COLLADABU::Utils::EMPTY_STRING, get_geometry_id(ob)));
+	         COLLADABU::URI(COLLADABU::Utils::EMPTY_STRING, get_geometry_id(ob, use_instantiation)));
 
 	add_bind_shape_mat(ob);
 

Modified: trunk/blender/source/blender/collada/ExportSettings.h
===================================================================
--- trunk/blender/source/blender/collada/ExportSettings.h	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/ExportSettings.h	2012-05-26 22:46:28 UTC (rev 47060)
@@ -33,6 +33,7 @@
  bool selected;
  bool apply_modifiers;
  bool include_bone_children;
+ bool use_object_instantiation;
  bool second_life;
  char *filepath;
 };

Modified: trunk/blender/source/blender/collada/GeometryExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/GeometryExporter.cpp	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/GeometryExporter.cpp	2012-05-26 22:46:28 UTC (rev 47060)
@@ -92,16 +92,20 @@
 	DerivedMesh *dm = mesh_get_derived_final(mScene, ob, CD_MASK_BAREMESH);
 #endif
 
+	bool use_instantiation = this->export_settings->use_object_instantiation;
 	Mesh *me = get_mesh(ob, this->export_settings->apply_modifiers);
 
-	std::string geom_id = get_geometry_id(ob);
-	std::string geom_name = id_name(ob->data);
+	std::string geom_id = get_geometry_id(ob, use_instantiation);
 	std::vector<Normal> nor;
 	std::vector<Face> norind;
 
 	// Skip if linked geometry was already exported from another reference
-	if (exportedGeometry.find(geom_id) != exportedGeometry.end())
+	if (use_instantiation && 
+		exportedGeometry.find(geom_id) != exportedGeometry.end())
 		return;
+
+	std::string geom_name = (use_instantiation) ? id_name(ob->data) : id_name(ob);
+
 	exportedGeometry.insert(geom_id);
 
 	bool has_color = (bool)CustomData_has_layer(&me->fdata, CD_MCOL);

Modified: trunk/blender/source/blender/collada/SceneExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/SceneExporter.cpp	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/SceneExporter.cpp	2012-05-26 22:46:28 UTC (rev 47060)
@@ -117,7 +117,7 @@
 		}
 		else {
 			COLLADASW::InstanceGeometry instGeom(mSW);
-			instGeom.setUrl(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, get_geometry_id(ob)));
+			instGeom.setUrl(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, get_geometry_id(ob, this->export_settings->use_object_instantiation)));
 
 			InstanceWriter::add_material_bindings(instGeom.getBindMaterial(), ob);
 

Modified: trunk/blender/source/blender/collada/collada.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada.cpp	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/collada.cpp	2012-05-26 22:46:28 UTC (rev 47060)
@@ -55,6 +55,7 @@
 		int selected,
 		int apply_modifiers,
 		int include_bone_children,
+		int use_object_instantiation,
 		int second_life)
 	{
 		ExportSettings export_settings;
@@ -63,6 +64,7 @@
 		export_settings.apply_modifiers          = apply_modifiers != 0;
 		export_settings.include_bone_children    = include_bone_children != 0;
 		export_settings.second_life              = second_life != 0;
+		export_settings.use_object_instantiation = use_object_instantiation != 0;
 		export_settings.filepath                 = (char *)filepath;
 
 		/* annoying, collada crashes if file cant be created! [#27162] */

Modified: trunk/blender/source/blender/collada/collada.h
===================================================================
--- trunk/blender/source/blender/collada/collada.h	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/collada.h	2012-05-26 22:46:28 UTC (rev 47060)
@@ -43,6 +43,7 @@
 		int selected,
 		int apply_modifiers,
 		int include_bone_children,
+		int use_object_instantiation,
 		int second_life);
 #ifdef __cplusplus
 }

Modified: trunk/blender/source/blender/collada/collada_internal.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_internal.cpp	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/collada_internal.cpp	2012-05-26 22:46:28 UTC (rev 47060)
@@ -251,6 +251,13 @@
 	return translate_id(id_name(ob->data)) + "-mesh";
 }
 
+std::string get_geometry_id(Object *ob, bool use_instantiation)
+{
+	std::string geom_name = (use_instantiation) ? id_name(ob->data) : id_name(ob);
+
+	return translate_id(geom_name) + "-mesh";
+}
+
 std::string get_light_id(Object *ob)
 {
 	return translate_id(id_name(ob)) + "-light";

Modified: trunk/blender/source/blender/collada/collada_internal.h
===================================================================
--- trunk/blender/source/blender/collada/collada_internal.h	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/collada/collada_internal.h	2012-05-26 22:46:28 UTC (rev 47060)
@@ -86,7 +86,7 @@
 
 extern std::string id_name(void *id);
 
-extern std::string get_geometry_id(Object *ob);
+extern std::string get_geometry_id(Object *ob, bool use_instantiation);
 
 extern std::string get_light_id(Object *ob);
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2012-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2012-05-26 22:46:28 UTC (rev 47060)
@@ -91,9 +91,10 @@
 	int selected,
 	int apply_modifiers,
 	int include_bone_children,
+	int use_object_instantiation,
 	int second_life)
 {
-	collada_export(scene, filepath, selected, apply_modifiers, include_bone_children, second_life);
+	collada_export(scene, filepath, selected, apply_modifiers, include_bone_children, use_object_instantiation, second_life);
 }
 
 #endif
@@ -124,6 +125,7 @@
 	parm = RNA_def_boolean(func, "selected", 0, "Selection Only", "Export only selected elements");
 	parm = RNA_def_boolean(func, "apply_modifiers", 0, "Apply Modifiers", "Apply modifiers (in Preview resolution)");
 	parm = RNA_def_boolean(func, "include_bone_children", 0, "Include Bone Children", "Include all objects attached to bones of selected Armature(s)");
+	parm = RNA_def_boolean(func, "use_object_instantiation", 1, "Use Object Instantiation", "Instantiate multiple Objects from same Data");
 	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-05-26 22:31:28 UTC (rev 47059)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2012-05-26 22:46:28 UTC (rev 47060)
@@ -2155,7 +2155,7 @@
 static int wm_collada_export_exec(bContext *C, wmOperator *op)
 {
 	char filename[FILE_MAX];
-	int selected, second_life, apply_modifiers, include_bone_children;
+	int selected, second_life, apply_modifiers, include_bone_children, use_object_instantiation;
 	
 	if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
 		BKE_report(op->reports, RPT_ERROR, "No filename given");
@@ -2165,12 +2165,12 @@
 	RNA_string_get(op->ptr, "filepath", filename);
 
 	/* Options panel */
-	selected              = RNA_boolean_get(op->ptr, "selected");
-	apply_modifiers       = RNA_boolean_get(op->ptr, "apply_modifiers");
-    include_bone_children = RNA_boolean_get(op->ptr, "include_bone_children");
+	selected                 = RNA_boolean_get(op->ptr, "selected");
+	apply_modifiers          = RNA_boolean_get(op->ptr, "apply_modifiers");
+    include_bone_children    = RNA_boolean_get(op->ptr, "include_bone_children");
+    use_object_instantiation = RNA_boolean_get(op->ptr, "use_object_instantiation");
+	second_life              = RNA_boolean_get(op->ptr, "second_life");
 
-	second_life           = RNA_boolean_get(op->ptr, "second_life");
-
 	/* get editmode results */
 	ED_object_exit_editmode(C, 0);  /* 0 = does not exit editmode */
 
@@ -2180,6 +2180,7 @@
 		selected,
 		apply_modifiers,
 		include_bone_children,
+		use_object_instantiation,
 		second_life)) {
 		return OPERATOR_FINISHED;
 	}
@@ -2211,6 +2212,9 @@
 	RNA_def_boolean(ot->srna, "include_bone_children", 0, "Include Bone Children",
 	                "Include all objects attached to bones of selected Armature(s)");
 
+	RNA_def_boolean(ot->srna, "use_object_instantiation", 1, "Use Object Instantiation",
+		            "Instantiate multiple Objects from same Data");
+
 	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