[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39586] branches/soc-2011-pepper/source/ blender/collada: Armature object animations export.
Sukhitha Jayathilake
pr.jayathilake at gmail.com
Sun Aug 21 17:47:22 CEST 2011
Revision: 39586
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39586
Author: phabtar
Date: 2011-08-21 15:47:21 +0000 (Sun, 21 Aug 2011)
Log Message:
-----------
Armature object animations export.
Modified Paths:
--------------
branches/soc-2011-pepper/source/blender/collada/AnimationExporter.cpp
branches/soc-2011-pepper/source/blender/collada/ArmatureExporter.cpp
branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.cpp
branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.h
Modified: branches/soc-2011-pepper/source/blender/collada/AnimationExporter.cpp
===================================================================
--- branches/soc-2011-pepper/source/blender/collada/AnimationExporter.cpp 2011-08-21 13:51:04 UTC (rev 39585)
+++ branches/soc-2011-pepper/source/blender/collada/AnimationExporter.cpp 2011-08-21 15:47:21 UTC (rev 39586)
@@ -63,6 +63,8 @@
//Export transform animations
if(ob->adt && ob->adt->action)
{
+ fcu = (FCurve*)ob->adt->action->curves.first;
+
//transform matrix export for bones are temporarily disabled here.
if ( ob->type == OB_ARMATURE )
{
@@ -71,19 +73,20 @@
for (Bone *bone = (Bone*)arm->bonebase.first; bone; bone = bone->next)
write_bone_animation_matrix(ob, bone);
+ transformName = fcu->rna_path;
}
- else {
- fcu = (FCurve*)ob->adt->action->curves.first;
+ else
+ transformName = extract_transform_name( fcu->rna_path );
+
while (fcu) {
- transformName = extract_transform_name( fcu->rna_path );
-
+ transformName = extract_transform_name( fcu->rna_path );
if ((!strcmp(transformName, "location") || !strcmp(transformName, "scale")) ||
(!strcmp(transformName, "rotation_euler") && ob->rotmode == ROT_MODE_EUL)||
(!strcmp(transformName, "rotation_quaternion")))
dae_animation(ob ,fcu, transformName, false);
fcu = fcu->next;
}
- }
+
}
//Export Lamp parameter animations
Modified: branches/soc-2011-pepper/source/blender/collada/ArmatureExporter.cpp
===================================================================
--- branches/soc-2011-pepper/source/blender/collada/ArmatureExporter.cpp 2011-08-21 13:51:04 UTC (rev 39585)
+++ branches/soc-2011-pepper/source/blender/collada/ArmatureExporter.cpp 2011-08-21 15:47:21 UTC (rev 39586)
@@ -167,7 +167,6 @@
// parent_mat is armature-space
void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm)
{
- /*if((bone->flag & BONE_NO_DEFORM) == 0 ){*/
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);
@@ -189,8 +188,7 @@
for (Bone *child = (Bone*)bone->childbase.first; child; child = child->next) {
add_bone_node(child, ob_arm);
}
-
- node.end();
+ node.end();
//}
}
Modified: branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.cpp
===================================================================
--- branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.cpp 2011-08-21 13:51:04 UTC (rev 39585)
+++ branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.cpp 2011-08-21 15:47:21 UTC (rev 39586)
@@ -82,6 +82,10 @@
void ArmatureImporter::create_unskinned_bone( COLLADAFW::Node *node, EditBone *parent, int totchild,
float parent_mat[][4], Object * ob_arm)
{
+ std::vector<COLLADAFW::Node*>::iterator it;
+ it = std::find(finished_joints.begin(),finished_joints.end(),node);
+ if ( it != finished_joints.end()) return;
+
float mat[4][4];
float obmat[4][4];
@@ -151,11 +155,18 @@
add_leaf_bone(mat, bone, node);
}
+ finished_joints.push_back(node);
+
}
void ArmatureImporter::create_bone(SkinInfo& skin, COLLADAFW::Node *node, EditBone *parent, int totchild,
float parent_mat[][4], bArmature *arm)
{
+ //Checking if bone is already made.
+ std::vector<COLLADAFW::Node*>::iterator it;
+ it = std::find(finished_joints.begin(),finished_joints.end(),node);
+ if ( it != finished_joints.end()) return;
+
float joint_inv_bind_mat[4][4];
// JointData* jd = get_joint_data(node);
@@ -183,10 +194,10 @@
else
copy_m4_m4(mat, obmat);
- /*float loc[3], size[3], rot[3][3] , angle;
+ float loc[3], size[3], rot[3][3] , angle;
mat4_to_loc_rot_size( loc, rot, size, obmat);
mat3_to_vec_roll(rot, NULL, &angle );
- bone->roll=angle;*/
+ bone->roll=angle;
}
@@ -257,6 +268,8 @@
if (!children.getCount() || children.getCount() > 1) {
add_leaf_bone(mat, bone , node);
}
+
+ finished_joints.push_back(node);
}
void ArmatureImporter::add_leaf_bone(float mat[][4], EditBone *bone, COLLADAFW::Node * node)
@@ -659,7 +672,7 @@
}
//for bones without skins
- //create_armature_bones();
+ create_armature_bones();
}
#if 0
Modified: branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.h
===================================================================
--- branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.h 2011-08-21 13:51:04 UTC (rev 39585)
+++ branches/soc-2011-pepper/source/blender/collada/ArmatureImporter.h 2011-08-21 15:47:21 UTC (rev 39586)
@@ -89,6 +89,7 @@
std::map<COLLADAFW::UniqueId, COLLADAFW::UniqueId> geom_uid_by_controller_uid;
std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> joint_by_uid; // contains all joints
std::vector<COLLADAFW::Node*> root_joints;
+ std::vector<COLLADAFW::Node*> finished_joints;
std::map<COLLADAFW::UniqueId, Object*> joint_parent_map;
std::map<COLLADAFW::UniqueId, Object*> unskinned_armature_map;
More information about the Bf-blender-cvs
mailing list