[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38079] trunk/blender/source/blender: Apply patch 4636051.

Nathan Letwory nathan at letworyinteractive.com
Mon Jul 4 10:59:29 CEST 2011


Revision: 38079
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38079
Author:   jesterking
Date:     2011-07-04 08:59:28 +0000 (Mon, 04 Jul 2011)
Log Message:
-----------
Apply patch 4636051. COLLADA: Export selection.
Original patch by Jan Diederich, adapted by Pelle Johnsen. Review assistance by Daniel Tavares.

This patch adds an option to export only the selection.

Modified Paths:
--------------
    trunk/blender/source/blender/collada/ArmatureExporter.cpp
    trunk/blender/source/blender/collada/ArmatureExporter.h
    trunk/blender/source/blender/collada/CameraExporter.cpp
    trunk/blender/source/blender/collada/CameraExporter.h
    trunk/blender/source/blender/collada/DocumentExporter.cpp
    trunk/blender/source/blender/collada/DocumentExporter.h
    trunk/blender/source/blender/collada/EffectExporter.cpp
    trunk/blender/source/blender/collada/EffectExporter.h
    trunk/blender/source/blender/collada/GeometryExporter.cpp
    trunk/blender/source/blender/collada/GeometryExporter.h
    trunk/blender/source/blender/collada/ImageExporter.cpp
    trunk/blender/source/blender/collada/ImageExporter.h
    trunk/blender/source/blender/collada/LightExporter.cpp
    trunk/blender/source/blender/collada/LightExporter.h
    trunk/blender/source/blender/collada/MaterialExporter.cpp
    trunk/blender/source/blender/collada/MaterialExporter.h
    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/makesrna/intern/rna_scene_api.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/collada/ArmatureExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ArmatureExporter.cpp	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/ArmatureExporter.cpp	2011-07-04 08:59:28 UTC (rev 38079)
@@ -89,14 +89,14 @@
 	ins.add();
 }
 
-void ArmatureExporter::export_controllers(Scene *sce)
+void ArmatureExporter::export_controllers(Scene *sce, bool export_selected)
 {
 	scene = sce;
 
 	openLibrary();
 
 	GeometryFunctor gf;
-	gf.forEachMeshObjectInScene<ArmatureExporter>(sce, *this);
+	gf.forEachMeshObjectInScene<ArmatureExporter>(sce, *this, export_selected);
 
 	closeLibrary();
 }
@@ -351,12 +351,17 @@
 
 			bPoseChannel *pchan = get_pose_channel(pose, def->name);
 
+			float pose_mat[4][4];
 			float mat[4][4];
 			float world[4][4];
 			float inv_bind_mat[4][4];
 
+			// pose_mat is the same as pchan->pose_mat, but without the rotation
+			unit_m4(pose_mat);
+			translate_m4(pose_mat, pchan->pose_head[0], pchan->pose_head[1], pchan->pose_head[2]);
+
 			// make world-space matrix, pose_mat is armature-space
-			mul_m4_m4m4(world, pchan->pose_mat, ob_arm->obmat);
+			mul_m4_m4m4(world, pose_mat, ob_arm->obmat);
 			
 			invert_m4_m4(mat, world);
 			converter.mat4_to_dae(inv_bind_mat, mat);

Modified: trunk/blender/source/blender/collada/ArmatureExporter.h
===================================================================
--- trunk/blender/source/blender/collada/ArmatureExporter.h	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/ArmatureExporter.h	2011-07-04 08:59:28 UTC (rev 38079)
@@ -65,7 +65,7 @@
 
 	void add_instance_controller(Object *ob);
 
-	void export_controllers(Scene *sce);
+	void export_controllers(Scene *sce, bool export_selected);
 
 	void operator()(Object *ob);
 

Modified: trunk/blender/source/blender/collada/CameraExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/CameraExporter.cpp	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/CameraExporter.cpp	2011-07-04 08:59:28 UTC (rev 38079)
@@ -42,24 +42,25 @@
 CamerasExporter::CamerasExporter(COLLADASW::StreamWriter *sw): COLLADASW::LibraryCameras(sw){}
 
 template<class Functor>
-void forEachCameraObjectInScene(Scene *sce, Functor &f)
+void forEachCameraObjectInScene(Scene *sce, Functor &f, bool export_selected)
 {
 	Base *base= (Base*) sce->base.first;
 	while(base) {
 		Object *ob = base->object;
 			
-		if (ob->type == OB_CAMERA && ob->data) {
+		if (ob->type == OB_CAMERA && ob->data
+			&& !(export_selected && !(ob->flag & SELECT))) {
 			f(ob, sce);
 		}
 		base= base->next;
 	}
 }
 
-void CamerasExporter::exportCameras(Scene *sce)
+void CamerasExporter::exportCameras(Scene *sce, bool export_selected)
 {
 	openLibrary();
 	
-	forEachCameraObjectInScene(sce, *this);
+	forEachCameraObjectInScene(sce, *this, export_selected);
 	
 	closeLibrary();
 }

Modified: trunk/blender/source/blender/collada/CameraExporter.h
===================================================================
--- trunk/blender/source/blender/collada/CameraExporter.h	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/CameraExporter.h	2011-07-04 08:59:28 UTC (rev 38079)
@@ -40,7 +40,7 @@
 {
 public:
 	CamerasExporter(COLLADASW::StreamWriter *sw);
-	void exportCameras(Scene *sce);
+	void exportCameras(Scene *sce, bool export_selected);
 	void operator()(Object *ob, Scene *sce);
 };
 

Modified: trunk/blender/source/blender/collada/DocumentExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/DocumentExporter.cpp	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/DocumentExporter.cpp	2011-07-04 08:59:28 UTC (rev 38079)
@@ -170,7 +170,7 @@
 	SceneExporter(COLLADASW::StreamWriter *sw, ArmatureExporter *arm) : COLLADASW::LibraryVisualScenes(sw),
 																		arm_exporter(arm) {}
 	
-	void exportScene(Scene *sce) {
+	void exportScene(Scene *sce, bool export_selected) {
  		// <library_visual_scenes> <visual_scene>
 		std::string id_naming = id_name(sce);
 		openVisualScene(translate_id(id_naming), id_naming);
@@ -179,7 +179,7 @@
 		//forEachMeshObjectInScene(sce, *this);
 		//forEachCameraObjectInScene(sce, *this);
 		//forEachLampObjectInScene(sce, *this);
-		exportHierarchy(sce);
+		exportHierarchy(sce, export_selected);
 
 		// </visual_scene> </library_visual_scenes>
 		closeVisualScene();
@@ -187,7 +187,7 @@
 		closeLibrary();
 	}
 
-	void exportHierarchy(Scene *sce)
+	void exportHierarchy(Scene *sce, bool export_selected)
 	{
 		Base *base= (Base*) sce->base.first;
 		while(base) {
@@ -198,8 +198,11 @@
 				case OB_MESH:
 				case OB_CAMERA:
 				case OB_LAMP:
+				case OB_ARMATURE:
 				case OB_EMPTY:
-				case OB_ARMATURE:
+					if (export_selected && !(ob->flag & SELECT)) {
+						break;
+					}
 					// write nodes....
 					writeNodes(ob, sce);
 					break;
@@ -929,7 +932,7 @@
 	}
 };
 
-void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename)
+void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename, bool selected)
 {
 	PointerRNA sceneptr, unit_settings;
 	PropertyRNA *system; /* unused , *scale; */
@@ -1011,31 +1014,31 @@
 	// <library_cameras>
 	if(has_object_type(sce, OB_CAMERA)) {
 		CamerasExporter ce(&sw);
-		ce.exportCameras(sce);
+		ce.exportCameras(sce, selected);
 	}
 	
 	// <library_lights>
 	if(has_object_type(sce, OB_LAMP)) {
 		LightsExporter le(&sw);
-		le.exportLights(sce);
+		le.exportLights(sce, selected);
 	}
 
 	// <library_images>
 	ImagesExporter ie(&sw, filename);
-	ie.exportImages(sce);
+	ie.exportImages(sce, selected);
 	
 	// <library_effects>
 	EffectsExporter ee(&sw);
-	ee.exportEffects(sce);
+	ee.exportEffects(sce, selected);
 	
 	// <library_materials>
 	MaterialsExporter me(&sw);
-	me.exportMaterials(sce);
+	me.exportMaterials(sce, selected);
 
 	// <library_geometries>
 	if(has_object_type(sce, OB_MESH)) {
 		GeometryExporter ge(&sw);
-		ge.exportGeom(sce);
+		ge.exportGeom(sce, selected);
 	}
 
 	// <library_animations>
@@ -1045,12 +1048,12 @@
 	// <library_controllers>
 	ArmatureExporter arm_exporter(&sw);
 	if(has_object_type(sce, OB_ARMATURE)) {
-		arm_exporter.export_controllers(sce);
+		arm_exporter.export_controllers(sce, selected);
 	}
 
 	// <library_visual_scenes>
 	SceneExporter se(&sw, &arm_exporter);
-	se.exportScene(sce);
+	se.exportScene(sce, selected);
 	
 	// <scene>
 	std::string scene_name(translate_id(id_name(sce)));

Modified: trunk/blender/source/blender/collada/DocumentExporter.h
===================================================================
--- trunk/blender/source/blender/collada/DocumentExporter.h	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/DocumentExporter.h	2011-07-04 08:59:28 UTC (rev 38079)
@@ -34,7 +34,7 @@
 class DocumentExporter
 {
  public:
-	void exportCurrentScene(Scene *sce, const char* filename);
+	void exportCurrentScene(Scene *sce, const char* filename, bool selected);
 	void exportScenes(const char* filename);
 };
 

Modified: trunk/blender/source/blender/collada/EffectExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/EffectExporter.cpp	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/EffectExporter.cpp	2011-07-04 08:59:28 UTC (rev 38079)
@@ -78,12 +78,12 @@
 	return false;
 }
 
-void EffectsExporter::exportEffects(Scene *sce)
+void EffectsExporter::exportEffects(Scene *sce, bool export_selected)
 {
 	if(hasEffects(sce)) {
 		openLibrary();
 		MaterialFunctor mf;
-		mf.forEachMaterialInScene<EffectsExporter>(sce, *this);
+		mf.forEachMaterialInScene<EffectsExporter>(sce, *this, export_selected);
 
 		closeLibrary();
 	}

Modified: trunk/blender/source/blender/collada/EffectExporter.h
===================================================================
--- trunk/blender/source/blender/collada/EffectExporter.h	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/EffectExporter.h	2011-07-04 08:59:28 UTC (rev 38079)
@@ -47,7 +47,7 @@
 {
 public:
 	EffectsExporter(COLLADASW::StreamWriter *sw);
-	void exportEffects(Scene *sce);
+	void exportEffects(Scene *sce, bool export_selected);
 
 	void operator()(Material *ma, Object *ob);
 	

Modified: trunk/blender/source/blender/collada/GeometryExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/GeometryExporter.cpp	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/GeometryExporter.cpp	2011-07-04 08:59:28 UTC (rev 38079)
@@ -47,13 +47,13 @@
 GeometryExporter::GeometryExporter(COLLADASW::StreamWriter *sw) : COLLADASW::LibraryGeometries(sw) {}
 
 
-void GeometryExporter::exportGeom(Scene *sce)
+void GeometryExporter::exportGeom(Scene *sce, bool export_selected)
 {
 	openLibrary();
 
 	mScene = sce;
 	GeometryFunctor gf;
-	gf.forEachMeshObjectInScene<GeometryExporter>(sce, *this);
+	gf.forEachMeshObjectInScene<GeometryExporter>(sce, *this, export_selected);
 
 	closeLibrary();
 }

Modified: trunk/blender/source/blender/collada/GeometryExporter.h
===================================================================
--- trunk/blender/source/blender/collada/GeometryExporter.h	2011-07-04 08:13:27 UTC (rev 38078)
+++ trunk/blender/source/blender/collada/GeometryExporter.h	2011-07-04 08:59:28 UTC (rev 38079)
@@ -60,7 +60,7 @@
 public:
 	GeometryExporter(COLLADASW::StreamWriter *sw);
 
-	void exportGeom(Scene *sce);
+	void exportGeom(Scene *sce, bool export_selected);
 
 	void operator()(Object *ob);
 
@@ -102,14 +102,15 @@
 	// f should have
 	// void operator()(Object* ob)
 	template<class Functor>
-	void forEachMeshObjectInScene(Scene *sce, Functor &f)
+	void forEachMeshObjectInScene(Scene *sce, Functor &f, bool export_selected)
 	{
 		
 		Base *base= (Base*) sce->base.first;
 		while(base) {
 			Object *ob = base->object;
 			
-			if (ob->type == OB_MESH && ob->data) {
+			if (ob->type == OB_MESH && ob->data
+				&& !(export_selected && !(ob->flag && SELECT))) {
 				f(ob);
 			}
 			base= base->next;

Modified: trunk/blender/source/blender/collada/ImageExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ImageExporter.cpp	2011-07-04 08:13:27 UTC (rev 38078)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list