[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47979] trunk/blender: Collada: (Exporter) Add new option 'deform bones only'
Gaia Clary
gaia.clary at machinimatrix.org
Sat Jun 16 00:00:29 CEST 2012
Revision: 47979
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47979
Author: gaiaclary
Date: 2012-06-15 22:00:25 +0000 (Fri, 15 Jun 2012)
Log Message:
-----------
Collada: (Exporter) Add new option 'deform bones only'
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/ArmatureExporter.h
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/release/scripts/presets/operator/wm.collada_export/second_life.py
===================================================================
--- trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life.py 2012-06-15 21:48:08 UTC (rev 47978)
+++ trunk/blender/release/scripts/presets/operator/wm.collada_export/second_life.py 2012-06-15 22:00:25 UTC (rev 47979)
@@ -1,10 +1,10 @@
import bpy
op = bpy.context.active_operator
-
+op.apply_modifiers = True
op.selected = True
-op.apply_modifiers = True
-op.include_armatures = False
op.include_children = False
+op.include_armatures = True
+op.deform_bones_only = True
op.use_object_instantiation = False
op.sort_by_name = True
op.second_life = True
Modified: trunk/blender/source/blender/collada/ArmatureExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ArmatureExporter.cpp 2012-06-15 21:48:08 UTC (rev 47978)
+++ trunk/blender/source/blender/collada/ArmatureExporter.cpp 2012-06-15 22:00:25 UTC (rev 47979)
@@ -80,6 +80,18 @@
return bc_get_assigned_armature(ob) != NULL;
}
+
+void ArmatureExporter::write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone)
+{
+ if ( bc_is_root_bone(bone, this->export_settings->deform_bones_only) )
+ ins.addSkeleton(COLLADABU::URI(COLLADABU::Utils::EMPTY_STRING, get_joint_id(bone, ob_arm)));
+ else {
+ for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
+ write_bone_URLs(ins, ob_arm, child);
+ }
+ }
+}
+
bool ArmatureExporter::add_instance_controller(Object *ob)
{
Object *ob_arm = bc_get_assigned_armature(ob);
@@ -96,8 +108,7 @@
// write root bone URLs
Bone *bone;
for (bone = (Bone *)arm->bonebase.first; bone; bone = bone->next) {
- if (!bone->parent)
- ins.addSkeleton(COLLADABU::URI(COLLADABU::Utils::EMPTY_STRING, get_joint_id(bone, ob_arm)));
+ write_bone_URLs(ins, ob_arm, bone);
}
InstanceWriter::add_material_bindings(ins.getBindMaterial(), ob);
@@ -164,67 +175,73 @@
SceneExporter *se,
std::list<Object *>& child_objects)
{
- std::string node_id = get_joint_id(bone, ob_arm);
- std::string node_name = std::string(bone->name);
- std::string node_sid = get_joint_sid(bone, ob_arm);
+ if (!(this->export_settings->deform_bones_only && bone->flag & BONE_NO_DEFORM)) {
+ std::string node_id = get_joint_id(bone, ob_arm);
+ std::string node_name = std::string(bone->name);
+ std::string node_sid = get_joint_sid(bone, ob_arm);
- COLLADASW::Node node(mSW);
+ COLLADASW::Node node(mSW);
- node.setType(COLLADASW::Node::JOINT);
- node.setNodeId(node_id);
- node.setNodeName(node_name);
- node.setNodeSid(node_sid);
+ node.setType(COLLADASW::Node::JOINT);
+ node.setNodeId(node_id);
+ node.setNodeName(node_name);
+ node.setNodeSid(node_sid);
- /*if ( bone->childbase.first == NULL || BLI_countlist(&(bone->childbase))>=2)
- add_blender_leaf_bone( bone, ob_arm , node );
- else{*/
- node.start();
+ /*if ( bone->childbase.first == NULL || BLI_countlist(&(bone->childbase))>=2)
+ add_blender_leaf_bone( bone, ob_arm , node );
+ else{*/
+ node.start();
- add_bone_transform(ob_arm, bone, node);
+ add_bone_transform(ob_arm, bone, node);
- // Write nodes of childobjects, remove written objects from list
- std::list<Object *>::iterator i = child_objects.begin();
+ // Write nodes of childobjects, remove written objects from list
+ std::list<Object *>::iterator i = child_objects.begin();
- while (i != child_objects.end()) {
- if ((*i)->partype == PARBONE && (0 == strcmp((*i)->parsubstr, bone->name))) {
- float backup_parinv[4][4];
- copy_m4_m4(backup_parinv, (*i)->parentinv);
+ while (i != child_objects.end()) {
+ if ((*i)->partype == PARBONE && (0 == strcmp((*i)->parsubstr, bone->name))) {
+ float backup_parinv[4][4];
+ copy_m4_m4(backup_parinv, (*i)->parentinv);
- // crude, temporary change to parentinv
- // so transform gets exported correctly.
+ // crude, temporary change to parentinv
+ // so transform gets exported correctly.
- // Add bone tail- translation... don't know why
- // bone parenting is against the tail of a bone
- // and not it's head, seems arbitrary.
- (*i)->parentinv[3][1] += bone->length;
+ // Add bone tail- translation... don't know why
+ // bone parenting is against the tail of a bone
+ // and not it's head, seems arbitrary.
+ (*i)->parentinv[3][1] += bone->length;
- // SECOND_LIFE_COMPATIBILITY
- // TODO: when such objects are animated as
- // single matrix the tweak must be applied
- // to the result.
- if (export_settings->second_life) {
- // tweak objects parentinverse to match compatibility
- float temp[4][4];
+ // SECOND_LIFE_COMPATIBILITY
+ // TODO: when such objects are animated as
+ // single matrix the tweak must be applied
+ // to the result.
+ if (export_settings->second_life) {
+ // tweak objects parentinverse to match compatibility
+ float temp[4][4];
- copy_m4_m4(temp, bone->arm_mat);
- temp[3][0] = temp[3][1] = temp[3][2] = 0.0f;
+ copy_m4_m4(temp, bone->arm_mat);
+ temp[3][0] = temp[3][1] = temp[3][2] = 0.0f;
- mult_m4_m4m4((*i)->parentinv, temp, (*i)->parentinv);
- }
+ mult_m4_m4m4((*i)->parentinv, temp, (*i)->parentinv);
+ }
- se->writeNodes(*i, sce);
+ se->writeNodes(*i, sce);
- copy_m4_m4((*i)->parentinv, backup_parinv);
- child_objects.erase(i++);
+ copy_m4_m4((*i)->parentinv, backup_parinv);
+ child_objects.erase(i++);
+ }
+ else i++;
}
- else i++;
- }
- for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
- add_bone_node(child, ob_arm, sce, se, child_objects);
+ for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
+ add_bone_node(child, ob_arm, sce, se, child_objects);
+ }
+ node.end();
}
- node.end();
- //}
+ else {
+ for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
+ add_bone_node(child, ob_arm, sce, se, child_objects);
+ }
+ }
}
#if 0
Modified: trunk/blender/source/blender/collada/ArmatureExporter.h
===================================================================
--- trunk/blender/source/blender/collada/ArmatureExporter.h 2012-06-15 21:48:08 UTC (rev 47978)
+++ trunk/blender/source/blender/collada/ArmatureExporter.h 2012-06-15 22:00:25 UTC (rev 47979)
@@ -120,6 +120,8 @@
void add_vertex_weights_element(const std::string& weights_source_id, const std::string& joints_source_id,
const std::list<int>& vcount, const std::list<int>& joints);
+
+ void write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone);
};
#endif
Modified: trunk/blender/source/blender/collada/ExportSettings.h
===================================================================
--- trunk/blender/source/blender/collada/ExportSettings.h 2012-06-15 21:48:08 UTC (rev 47978)
+++ trunk/blender/source/blender/collada/ExportSettings.h 2012-06-15 22:00:25 UTC (rev 47979)
@@ -34,10 +34,11 @@
struct ExportSettings
{
public:
+ bool apply_modifiers;
bool selected;
- bool apply_modifiers;
+ bool include_children;
bool include_armatures;
- bool include_children;
+ bool deform_bones_only;
bool use_object_instantiation;
bool sort_by_name;
bool second_life;
Modified: trunk/blender/source/blender/collada/collada.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada.cpp 2012-06-15 21:48:08 UTC (rev 47978)
+++ trunk/blender/source/blender/collada/collada.cpp 2012-06-15 22:00:25 UTC (rev 47979)
@@ -50,17 +50,19 @@
}
int collada_export(
- Scene *sce,
- const char *filepath,
- int selected,
- int apply_modifiers,
+ Scene *sce,
+ const char *filepath,
- int include_armatures,
- int include_children,
+ int apply_modifiers,
- int use_object_instantiation,
+ int selected,
+ int include_children,
+ int include_armatures,
+ int deform_bones_only,
+
+ int use_object_instantiation,
int sort_by_name,
- int second_life)
+ int second_life)
{
ExportSettings export_settings;
@@ -73,16 +75,20 @@
}
/* end! */
+ export_settings.filepath = (char *)filepath;
- export_settings.selected = selected != 0;
export_settings.apply_modifiers = apply_modifiers != 0;
+
+ export_settings.selected = selected != 0;
+ export_settings.include_children = include_children != 0;
export_settings.include_armatures = include_armatures != 0;
- export_settings.include_children = include_children != 0;
- export_settings.second_life = second_life != 0;
+ export_settings.deform_bones_only = deform_bones_only != 0;
+
export_settings.use_object_instantiation = use_object_instantiation != 0;
export_settings.sort_by_name = sort_by_name != 0;
- export_settings.filepath = (char *)filepath;
+ export_settings.second_life = second_life != 0;
+
int includeFilter = OB_REL_NONE;
if (export_settings.include_armatures) includeFilter |= OB_REL_MOD_ARMATURE;
if (export_settings.include_children) includeFilter |= OB_REL_CHILDREN_RECURSIVE;
Modified: trunk/blender/source/blender/collada/collada.h
===================================================================
--- trunk/blender/source/blender/collada/collada.h 2012-06-15 21:48:08 UTC (rev 47978)
+++ trunk/blender/source/blender/collada/collada.h 2012-06-15 22:00:25 UTC (rev 47979)
@@ -40,11 +40,12 @@
int collada_export(
Scene *sce,
const char *filepath,
- int selected,
int apply_modifiers,
+ int selected,
+ int include_children,
int include_armatures,
- int include_children,
+ int deform_bones_only,
int use_object_instantiation,
int sort_by_name,
Modified: trunk/blender/source/blender/collada/collada_utils.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.cpp 2012-06-15 21:48:08 UTC (rev 47978)
+++ trunk/blender/source/blender/collada/collada_utils.cpp 2012-06-15 22:00:25 UTC (rev 47979)
@@ -34,11 +34,14 @@
#include "collada_utils.h"
+extern "C" {
+
#include "DNA_modifier_types.h"
#include "DNA_customdata_types.h"
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
#include "DNA_scene_types.h"
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list