void AnimationExporter::export_morph_animation(Object *ob) { FCurve *fcu; char *transformName; Key *key = BKE_key_from_object(ob); if (!key) return; if (key->adt && key->adt->action) { fcu = (FCurve *)key->adt->action->curves.first; while (fcu) { transformName = extract_transform_name(fcu->rna_path); dae_animation(ob, fcu, transformName, true); fcu = fcu->next; } } }
// called for each exported object void AnimationExporter::operator()(Object *ob) { FCurve *fcu; char *transformName; /* bool isMatAnim = false; */ /* UNUSED */ //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) { bArmature *arm = (bArmature *)ob->data; for (Bone *bone = (Bone *)arm->bonebase.first; bone; bone = bone->next) write_bone_animation_matrix(ob, bone); } while (fcu) { //for armature animations as objects if (ob->type == OB_ARMATURE) transformName = fcu->rna_path; else 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 if ( (ob->type == OB_LAMP) && ((Lamp *)ob->data)->adt && ((Lamp *)ob->data)->adt->action) { fcu = (FCurve *)(((Lamp *)ob->data)->adt->action->curves.first); while (fcu) { transformName = extract_transform_name(fcu->rna_path); if ((!strcmp(transformName, "color")) || (!strcmp(transformName, "spot_size")) || (!strcmp(transformName, "spot_blend")) || (!strcmp(transformName, "distance"))) { dae_animation(ob, fcu, transformName, true); } fcu = fcu->next; } } //Export Camera parameter animations if ( (ob->type == OB_CAMERA) && ((Camera *)ob->data)->adt && ((Camera *)ob->data)->adt->action) { fcu = (FCurve *)(((Camera *)ob->data)->adt->action->curves.first); while (fcu) { transformName = extract_transform_name(fcu->rna_path); if ((!strcmp(transformName, "lens")) || (!strcmp(transformName, "ortho_scale")) || (!strcmp(transformName, "clip_end")) || (!strcmp(transformName, "clip_start"))) { dae_animation(ob, fcu, transformName, true); } fcu = fcu->next; } } //Export Material parameter animations. for (int a = 0; a < ob->totcol; a++) { Material *ma = give_current_material(ob, a + 1); if (!ma) continue; if (ma->adt && ma->adt->action) { /* isMatAnim = true; */ fcu = (FCurve *)ma->adt->action->curves.first; while (fcu) { transformName = extract_transform_name(fcu->rna_path); if ((!strcmp(transformName, "specular_hardness")) || (!strcmp(transformName, "specular_color")) || (!strcmp(transformName, "diffuse_color")) || (!strcmp(transformName, "alpha")) || (!strcmp(transformName, "ior"))) { dae_animation(ob, fcu, transformName, true, ma); } fcu = fcu->next; } } } }