[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