#include <Skeleton.h>

Public Member Functions | |
| Skeleton () | |
| Skeleton (const Skeleton &) | |
| ~Skeleton () | |
| int | get_N_joint () |
| Joint * | get_root () |
| int | add_joint_number () |
| int | read_reccursive_joint (Joint *current, int *k_joint, Joint **T_joint) |
| int | load_bind_name (int N_name, char **name_bind_pose) |
| char * | get_bone_name (int k_name) |
| int | look_for_bone_index (char *name_bone) |
| int | set_size_time (int k_bone, int size) |
| int | get_size_time (int k_bone) |
| int | set_time (int k_bone, int k_time, double val) |
| int | set_angle (int k_bone, int k_time, int k_axis, double val) |
| int | set_translate (int k_bone, int k_time, double tx, double ty, double tz) |
| int | set_anim_matrix (int k_bone, int k_time, int k_dim, double value) |
| double | get_angle (int k_bone, int k_time, int k_axis) |
| int | deform_skeleton (double t, Skeleton *output) |
| int | deform_reccursive_joint (Joint *current, double t, Joint *to_deform) |
| int | init_time () |
| int | fix_init_bind_pose () |
| int | precalculate_matrix () |
| int | add_new_joint (double x, double y, double z, int father_number) |
| int | read_anim () |
| int | cout_skeleton () |
| int | read_skeleton () |
| int | create_list_name () |
| int | reccursive_list_name_fill (Joint *current, int *k_bone) |
| Matrix | get_rotation_animation (int k_bone, double t) |
| int | fill_bones_number () |
| int | translate (double tx, double ty, double tz) |
| int | translate (double *t) |
| int | scale (double sx, double sy, double sz) |
| int | scale (double *s) |
| int | scale (double s) |
| Skeleton & | operator= (const Skeleton &skeleton) |
| Joint * | get_joint (int k_bone) |
| Matrix | get_position (int k_bone) |
| int | change_father (int k_bone) |
| int | new_father (double x, double y, double z) |
| int | subsample_skeleton () |
| int | find_closest_joint (double x, double y, double z, double radius) |
| V_3D | get_world_position_of_bone (int k_bone) |
| int | reccursive_destroy () |
| int | get_access_number_of_joint_named (std::string &name_joint) |
| int | get_access_number_of_joint_named (const char *name_joint) |
| int | init_time_animation () |
| int | is_animated_section (int k_bone) |
| double | get_first_anim_time (int k_bone) |
| double | get_last_anim_time (int k_bone) |
| int | unitize_time_variation () |
| int | add_anim_angle (int index_bone, int axis, double offset_angle) |
Private Member Functions | |
| int | destroy () |
| int | copy_reccursive_joint (Joint *current, Joint *to_copy) |
| int | read_reccursive_joint_cout (Joint *current, Joint *father, int *count, int *access_number) |
| int | reccursive_fill_bones_access_number (Joint *current, int *count) |
| int | reccursive_bone_looking_for (Joint *current, int *counter, Joint **joint, int k_bone) |
| int | reccursive_bone_looking_for_position (Joint *current, Matrix M, int *counter, int k_bone, Matrix *P) |
| int | recursive_bind_pose_fixing (Matrix D, Joint *current) |
| int | reccursive_matrix_precalculation (Matrix D, Joint *current) |
| int | reccursive_set_name_access_number (Joint *current) |
| int | reccursive_look_for_new_father (int k_bone, Joint *current, Joint **new_root, Matrix temp_D, Matrix *D_init, int *is_good) |
| int | add_reccursive_child (Joint *new_joint, Joint *old_joint, int forbidden_index) |
| int | reccursive_destroy (Joint **current) |
| int | cout_reccursive_joint (Joint *current, Joint *father, int *level, int *access_number) |
| int | reccursive_subsample_skeleton (int k_delete, Joint **current) |
| int | reccursive_scale (Joint *current, double *s) |
| int | fill_joint_vector () |
| int | reccursive_fill_joint_vector (Joint *current) |
Private Attributes | |
| int | N_joint |
| Joint * | joint_root |
| int | N_list_bones |
| std::vector < Animation_transformation > | anim |
| std::vector< Joint * > | joint_access |
Definition at line 32 of file Skeleton.h.
| Skeleton::Skeleton | ( | ) |
Definition at line 7 of file Skeleton.cpp.
References joint_access, joint_root, N_joint, and N_list_bones.
00008 { 00009 N_joint = 0; 00010 N_list_bones = 0; 00011 joint_root=NULL; 00012 joint_root=new Joint; 00013 00014 if(joint_root==NULL) 00015 { 00016 cout<<"error allocation joint in Skeleton"<<endl; 00017 exit(-1); 00018 } 00019 00020 joint_access.resize(0); 00021 00022 }
| Skeleton::Skeleton | ( | const Skeleton & | skeleton | ) |
Definition at line 1082 of file Skeleton.cpp.
References anim, copy_reccursive_joint(), joint_root, N_joint, N_list_bones, and read_skeleton().
01083 { 01084 01085 01086 01087 joint_root = new Joint(); 01088 01089 N_joint = skeleton.N_joint; 01090 01091 int k=0; 01092 01093 01094 N_list_bones = skeleton.N_list_bones; 01095 01096 Joint *to_copy; 01097 to_copy= skeleton.joint_root; 01098 copy_reccursive_joint(joint_root,to_copy); 01099 01100 01101 anim.resize(skeleton.anim.size()); 01102 for(k=0;k<(int)skeleton.anim.size();k++) 01103 anim[k] = skeleton.anim[k]; 01104 01105 // joint_access.resize(skeleton.joint_access.size()); 01106 // for(k=0;k<(int)skeleton.joint_access.size();k++) 01107 // joint_access[k] = skeleton.joint_access[k]; 01108 01109 01110 read_skeleton(); 01111 01112 01113 01114 01115 }

| Skeleton::~Skeleton | ( | ) |
Definition at line 26 of file Skeleton.cpp.
References destroy(), and reccursive_destroy().
00027 { 00028 reccursive_destroy(); 00029 destroy(); 00030 }

| int Skeleton::get_N_joint | ( | ) |
Definition at line 48 of file Skeleton.cpp.
References N_joint, and read_skeleton().
Referenced by Skinned::automatic_weight_calculation(), Skinned::check_integrity_skinning(), OpenGL_drawer::draw_skeleton(), Skinned::fill_vertex_depending_on_bone(), get_access_number_of_joint_named(), Skinned::get_max_weight_influence(), Skinned::get_min_distance_to_any_bone(), init_time_animation(), File_parser::load_collada_skining_attribute(), load_model_1(), load_model_2(), load_model_3(), File_parser::save_skeleton_sk(), Skinned::skinning(), and unitize_time_variation().
00049 { 00050 if(N_joint==0) 00051 read_skeleton(); 00052 return N_joint; 00053 }

| Joint * Skeleton::get_root | ( | ) |
Definition at line 55 of file Skeleton.cpp.
References joint_root.
Referenced by deform_skeleton(), File_parser::load_collada_skeleton(), and File_parser::load_old_sk_skeleton().
00056 { 00057 if(joint_root==NULL) 00058 joint_root=new Joint; 00059 return joint_root; 00060 }

| int Skeleton::add_joint_number | ( | ) |
Definition at line 65 of file Skeleton.cpp.
References N_joint.
00066 { 00067 N_joint++; 00068 return 0; 00069 }
Definition at line 74 of file Skeleton.cpp.
References Joint::get_N_son(), and Joint::get_son().
00075 { 00076 (*k_joint)++; 00077 00078 //get tree 00079 if(current->get_N_son()>0) 00080 { 00081 T_joint[*k_joint]=current; 00082 for(int k=0;k<current->get_N_son();k++) 00083 read_reccursive_joint(current->get_son(k),k_joint,T_joint); 00084 } 00085 //get leaf 00086 if(current->get_N_son()==0) 00087 T_joint[*k_joint]=current; 00088 00089 00090 return 0; 00091 }

| int Skeleton::load_bind_name | ( | int | N_name, | |
| char ** | name_bind_pose | |||
| ) |
| char* Skeleton::get_bone_name | ( | int | k_name | ) |
| int Skeleton::look_for_bone_index | ( | char * | name_bone | ) |
| int Skeleton::set_size_time | ( | int | k_bone, | |
| int | size | |||
| ) |
Definition at line 98 of file Skeleton.cpp.
References anim.
Referenced by init_time(), init_time_animation(), File_parser::load_collada_animation(), load_model_1(), load_model_2(), and load_model_3().
00099 { 00100 int ok=0; 00101 if(anim.size()<=(unsigned int)k_bone) 00102 anim.resize(k_bone+1); 00103 00104 ok += anim[k_bone].set_size_time(size); 00105 ok += anim[k_bone].set_size_angle(size); 00106 00107 return ok; 00108 }

| int Skeleton::get_size_time | ( | int | k_bone | ) |
Definition at line 110 of file Skeleton.cpp.
References anim.
00111 { 00112 00113 return anim[k_bone].get_size(); 00114 }
| int Skeleton::set_time | ( | int | k_bone, | |
| int | k_time, | |||
| double | val | |||
| ) |
Definition at line 116 of file Skeleton.cpp.
References anim.
Referenced by init_time(), init_time_animation(), File_parser::load_collada_animation(), load_model_1(), load_model_2(), and load_model_3().
00117 { 00118 int ok=0; 00119 ok += anim[k_bone].set_time(k_time,val); 00120 return ok; 00121 }

| int Skeleton::set_angle | ( | int | k_bone, | |
| int | k_time, | |||
| int | k_axis, | |||
| double | val | |||
| ) |
Definition at line 123 of file Skeleton.cpp.
References anim.
Referenced by add_anim_angle(), File_parser::load_collada_animation(), load_model_1(), load_model_2(), and load_model_3().
00124 { 00125 int ok=0; 00126 ok += anim[k_bone].set_angle(k_time,k_axis,val); 00127 return ok; 00128 }

| int Skeleton::set_translate | ( | int | k_bone, | |
| int | k_time, | |||
| double | tx, | |||
| double | ty, | |||
| double | tz | |||
| ) |
Definition at line 130 of file Skeleton.cpp.
References anim.
Referenced by File_parser::load_collada_animation().
00131 { 00132 int ok=0; 00133 ok += anim[k_bone].set_translation(k_time,tx,ty,tz); 00134 return ok; 00135 }

| int Skeleton::set_anim_matrix | ( | int | k_bone, | |
| int | k_time, | |||
| int | k_dim, | |||
| double | value | |||
| ) |
Definition at line 136 of file Skeleton.cpp.
References anim.
Referenced by File_parser::load_collada_animation().
00137 { 00138 int ok=0; 00139 ok += anim[k_bone].set_anim_matrix(k_time,k_dim,value); 00140 return 0; 00141 }

| double Skeleton::get_angle | ( | int | k_bone, | |
| int | k_time, | |||
| int | k_axis | |||
| ) |
Definition at line 388 of file Skeleton.cpp.
References anim.
Referenced by add_anim_angle().
00389 { 00390 return anim[k_bone].get_angle(k_time,k_axis); 00391 }

| int Skeleton::deform_skeleton | ( | double | t, | |
| Skeleton * | output | |||
| ) |
Definition at line 462 of file Skeleton.cpp.
References deform_reccursive_joint(), get_root(), joint_root, and precalculate_matrix().
Referenced by evolve(), load_model_1(), load_model_2(), and load_model_3().
00463 { 00464 int ok=0; 00465 00466 Joint *current=joint_root; 00467 Joint *to_deform = output->get_root(); 00468 00469 deform_reccursive_joint(current,t,to_deform); 00470 00471 ok += output->precalculate_matrix(); 00472 00473 return ok; 00474 }


Definition at line 477 of file Skeleton.cpp.
References anim, Joint::get_access_number(), Joint::get_matrix(), Joint::get_N_son(), Joint::get_son(), Matrix::invert(), and Joint::set_matrix().
Referenced by deform_skeleton().
00478 { 00479 int index_bone = current->get_access_number(); 00480 Matrix R; 00481 Matrix T; 00482 Matrix M; 00483 00484 Matrix R0 = anim[index_bone].get_rotation(0); 00485 Matrix R0m1 = R0.invert(); 00486 00487 00488 R = anim[index_bone].get_rotation(t); 00489 T = anim[index_bone].get_translation(t); 00490 M = anim[index_bone].get_matrix(t); 00491 00492 00493 00494 00495 to_deform->set_matrix(current->get_matrix()*(T*R)); 00496 //to_deform -> set_matrix(M*current->get_matrix()); 00497 //to_deform -> set_matrix(M); 00498 00499 00500 int N_son=current->get_N_son(); 00501 if(N_son>0) 00502 for(int k=0;k<N_son;k++) 00503 deform_reccursive_joint(current->get_son(N_son-k-1),t,to_deform->get_son(N_son-k-1)); 00504 00505 return 0; 00506 00507 }


| int Skeleton::init_time | ( | ) |
Definition at line 509 of file Skeleton.cpp.
References N_joint, set_size_time(), and set_time().
Referenced by File_parser::load_old_sk_skeleton().
00510 { 00511 if(N_joint==0) 00512 { 00513 cout<<"Warning N_joint=0 in Seleton::init_time !!"<<endl; 00514 exit(-1); 00515 } 00516 for(int k=0;k<N_joint;k++) 00517 { 00518 set_size_time(k,2); 00519 set_time(k,0,0.0); 00520 set_time(k,1,1.0); 00521 } 00522 return 0; 00523 }


| int Skeleton::fix_init_bind_pose | ( | ) |
Definition at line 525 of file Skeleton.cpp.
References joint_root, and recursive_bind_pose_fixing().
Referenced by add_new_joint(), change_father(), load_model_1(), load_model_2(), load_model_3(), File_parser::load_old_sk_skeleton(), scale(), and translate().
00526 { 00527 int ok=0; 00528 00529 Joint *current = joint_root; 00530 Matrix D; 00531 00532 ok += recursive_bind_pose_fixing(D,current); 00533 00534 return ok; 00535 }


| int Skeleton::precalculate_matrix | ( | ) |
Definition at line 550 of file Skeleton.cpp.
References fill_joint_vector(), joint_root, and reccursive_matrix_precalculation().
Referenced by add_new_joint(), change_father(), deform_skeleton(), File_parser::load_collada_skeleton(), load_model_1(), load_model_2(), load_model_3(), File_parser::load_old_sk_skeleton(), new_father(), File_parser::save_skeleton_sk(), scale(), subsample_skeleton(), and translate().
00551 { 00552 Matrix D; 00553 Joint *current = joint_root; 00554 00555 reccursive_matrix_precalculation(D,current); 00556 fill_joint_vector(); 00557 00558 return 0; 00559 00560 }

| int Skeleton::add_new_joint | ( | double | x, | |
| double | y, | |||
| double | z, | |||
| int | father_number | |||
| ) |
Definition at line 894 of file Skeleton.cpp.
References Joint::add_son(), fix_init_bind_pose(), get_joint(), Joint::get_son(), Joint::get_world_matrix(), Matrix::invert(), joint_root, precalculate_matrix(), read_skeleton(), reccursive_set_name_access_number(), Joint::set_matrix(), and Matrix::set_translation().
00895 { 00896 int ok=0; 00897 00898 Joint *father = get_joint(father_number); 00899 father->add_son(); 00900 Joint *current = father->get_son(0); 00901 //current = new Joint(); 00902 if(current==NULL) 00903 printf("Error allocating Joint in add_new_joint\n"); 00904 00905 Matrix current_world_matrix; 00906 current_world_matrix.set_translation(x,y,z); 00907 Matrix current_local; 00908 00909 current_local = (father->get_world_matrix().invert())*current_world_matrix; 00910 00911 current->set_matrix(current_local); 00912 00913 00914 00915 00916 ok += fix_init_bind_pose(); 00917 ok += read_skeleton(); 00918 ok += reccursive_set_name_access_number(joint_root); 00919 ok += precalculate_matrix(); 00920 00921 00922 00923 // if(father->get_N_son()>0) 00924 // { 00925 // int N_son = father->get_N_son(); 00926 // int k_son = 0; 00927 00928 // for(k_son=0;k_son<N_son;k_son++) 00929 // { 00930 // current->add_son(); 00931 // current->get_son(0) = father->get_son(N_son-k+1); 00932 // current->set_father(father); 00933 // } 00934 00935 // } 00936 00937 return ok; 00938 }
| int Skeleton::read_anim | ( | ) |
| int Skeleton::cout_skeleton | ( | ) |
Definition at line 728 of file Skeleton.cpp.
References cout_reccursive_joint(), joint_root, and N_joint.
00729 { 00730 Joint *current=joint_root; 00731 Joint *father=joint_root; 00732 int k=0; 00733 00734 N_joint=0; 00735 int access_number=0; 00736 cout_reccursive_joint(current,father,&k,&access_number); 00737 00738 return 0; 00739 }

| int Skeleton::read_skeleton | ( | ) |
Definition at line 236 of file Skeleton.cpp.
References joint_root, N_joint, and read_reccursive_joint_cout().
Referenced by add_new_joint(), change_father(), get_N_joint(), File_parser::load_collada_skeleton(), load_model_1(), load_model_2(), load_model_3(), File_parser::load_old_sk_skeleton(), new_father(), operator=(), File_parser::save_skeleton_sk(), scale(), Skeleton(), and subsample_skeleton().
00237 { 00238 Joint *current=joint_root; 00239 Joint *father=joint_root; 00240 int k=0; 00241 00242 N_joint=0; 00243 int access_number=0; 00244 read_reccursive_joint_cout(current,father,&k,&access_number); 00245 00246 return 0; 00247 }

| int Skeleton::create_list_name | ( | ) |
| int Skeleton::reccursive_list_name_fill | ( | Joint * | current, | |
| int * | k_bone | |||
| ) |
| Matrix Skeleton::get_rotation_animation | ( | int | k_bone, | |
| double | t | |||
| ) |
Definition at line 270 of file Skeleton.cpp.
References anim.
00271 { 00272 return anim[k_bone].get_rotation(t); 00273 }
| int Skeleton::fill_bones_number | ( | ) |
Definition at line 276 of file Skeleton.cpp.
References joint_root, and reccursive_fill_bones_access_number().
00277 { 00278 int ok=0; 00279 Joint *current = joint_root; 00280 00281 int count=0; 00282 ok += reccursive_fill_bones_access_number(current,&count); 00283 00284 return ok; 00285 }

| int Skeleton::translate | ( | double | tx, | |
| double | ty, | |||
| double | tz | |||
| ) |
Definition at line 315 of file Skeleton.cpp.
00316 { 00317 double t[3]={tx,ty,tz}; 00318 return translate(t); 00319 }
| int Skeleton::translate | ( | double * | t | ) |
Definition at line 300 of file Skeleton.cpp.
References fix_init_bind_pose(), Joint::get_matrix(), joint_root, precalculate_matrix(), Joint::set_matrix(), Matrix::set_value(), and Matrix::value().
00301 { 00302 int k_dim=0; 00303 Matrix D=joint_root->get_matrix(); 00304 for(k_dim=0;k_dim<3;k_dim++) 00305 D.set_value(D.value(3,k_dim)+t[k_dim],3,k_dim); 00306 joint_root->set_matrix(D); 00307 00308 00309 fix_init_bind_pose(); 00310 precalculate_matrix(); 00311 00312 return 0; 00313 }

| int Skeleton::scale | ( | double | sx, | |
| double | sy, | |||
| double | sz | |||
| ) |
Definition at line 357 of file Skeleton.cpp.
Referenced by load_model_1(), and scale().
00358 { 00359 double s[3]={sx,sy,sz}; 00360 return scale(s); 00361 }

| int Skeleton::scale | ( | double * | s | ) |
Definition at line 338 of file Skeleton.cpp.
References fix_init_bind_pose(), joint_root, precalculate_matrix(), read_skeleton(), and reccursive_scale().
00339 { 00340 00341 00342 reccursive_scale(joint_root,s); 00343 00344 00345 fix_init_bind_pose(); 00346 read_skeleton(); 00347 precalculate_matrix(); 00348 00349 // Matrix D=joint_root->get_matrix(); 00350 // for(k_dim=0;k_dim<3;k_dim++) 00351 // D.set_value(D.value(3,k_dim)*s[k_dim],3,k_dim); 00352 // joint_root->set_matrix(D); 00353 00354 return 0; 00355 }

| int Skeleton::scale | ( | double | s | ) |
Definition at line 363 of file Skeleton.cpp.
References scale().
00364 { 00365 double _s[3]={s,s,s}; 00366 return scale(_s); 00367 }

Definition at line 161 of file Skeleton.cpp.
References anim, copy_reccursive_joint(), joint_access, joint_root, N_joint, N_list_bones, read_skeleton(), and reccursive_destroy().
00162 { 00163 00164 00165 00166 reccursive_destroy(&joint_root); 00167 joint_root = new Joint(); 00168 00169 // joint_root = new Joint(); 00170 N_joint = skeleton.N_joint; 00171 00172 int k=0; 00173 00174 00175 N_list_bones = skeleton.N_list_bones; 00176 00177 Joint *to_copy=NULL; 00178 to_copy= skeleton.joint_root; 00179 copy_reccursive_joint(joint_root,to_copy); 00180 00181 00182 anim.resize(skeleton.anim.size()); 00183 for(k=0;k<(int)skeleton.anim.size();k++) 00184 anim[k] = skeleton.anim[k]; 00185 00186 joint_access.resize(skeleton.joint_access.size()); 00187 for(k=0;k<(int)skeleton.joint_access.size();k++) 00188 joint_access[k] = skeleton.joint_access[k]; 00189 00190 00191 read_skeleton(); 00192 00193 return *this; 00194 }

| Joint * Skeleton::get_joint | ( | int | k_bone | ) |
Definition at line 393 of file Skeleton.cpp.
References joint_access.
Referenced by add_new_joint(), OpenGL_drawer::draw_skeleton(), find_closest_joint(), get_access_number_of_joint_named(), Skinned::get_vertex_to_bone_distance(), get_world_position_of_bone(), File_parser::load_collada_skining_attribute(), File_parser::save_skeleton_sk(), and Skinned::skinning().
00394 { 00395 00396 if(k_bone<0 || k_bone>=(int)joint_access.size()) 00397 {printf("Error in get_joint in Skeleton, k_bone[%d] (size=%d) is not correct\n",k_bone,joint_access.size());exit(-1);} 00398 return joint_access[k_bone]; 00399 00400 // if(k_bone<0 || k_bone>N_joint){printf("ERROR in get_joint in Skeleton, this joint does not exists [%d]\n",k_bone);exit(-1);} 00401 00402 // Joint *current = joint_root; 00403 // Joint *joint=NULL; 00404 // int counter=0; 00405 00406 // reccursive_bone_looking_for(current,&counter,&joint,k_bone); 00407 // return joint; 00408 }

| Matrix Skeleton::get_position | ( | int | k_bone | ) |
Definition at line 431 of file Skeleton.cpp.
References counter, joint_root, and reccursive_bone_looking_for_position().
00432 { 00433 00434 Matrix P; 00435 00436 Joint *current = joint_root; 00437 int counter=0; 00438 Matrix M; 00439 reccursive_bone_looking_for_position(current,M,&counter,k_bone,&P); 00440 return P; 00441 }

| int Skeleton::change_father | ( | int | k_bone | ) |
Definition at line 578 of file Skeleton.cpp.
References add_reccursive_child(), Joint::add_son(), fix_init_bind_pose(), Joint::get_access_number(), Joint::get_father(), Joint::get_matrix(), Joint::get_N_son(), Joint::get_son(), Matrix::invert(), joint_root, precalculate_matrix(), read_skeleton(), reccursive_destroy(), reccursive_look_for_new_father(), reccursive_set_name_access_number(), and Joint::set_matrix().
00579 { 00580 00581 int ok=0; 00582 00583 Joint *current = joint_root; 00584 Joint *new_root = NULL; 00585 Matrix D_init; 00586 Matrix temp_D; 00587 00588 int is_good=0; 00589 ok += reccursive_set_name_access_number(joint_root); 00590 ok += reccursive_look_for_new_father(k_bone,current,&new_root,temp_D,&D_init,&is_good); 00591 00592 00593 00594 00595 Joint *futur_root = new Joint(); 00596 *futur_root = *new_root; 00597 ok += add_reccursive_child(futur_root,new_root,-1); 00598 //cout<<" ns :"<<futur_root->get_N_son()<<endl; 00599 00600 Joint *futur_current = futur_root; 00601 current = new_root; 00602 Joint *save_current=NULL; 00603 int N_son=0; 00604 int k_son=0; 00605 00606 int son_index=0; 00607 while(current->get_father()!=current)//old root node 00608 { 00609 00610 son_index = current->get_access_number(); 00611 save_current = current; 00612 00613 current = current->get_father(); 00614 00615 00616 //old father become new son 00617 futur_current->add_son(); 00618 futur_current = futur_current->get_son(0); 00619 *futur_current=*current; 00620 futur_current->set_matrix(save_current->get_matrix().invert()); 00621 00622 //add son branch 00623 N_son=current->get_N_son(); 00624 if(current->get_N_son()>1) 00625 //do not change the matrix comming from a father 00626 for(k_son=0;k_son<N_son;k_son++) 00627 if(current->get_son(N_son-k_son-1)->get_access_number()!=son_index)//this index must not be added 00628 { 00629 futur_current->add_son(); 00630 ok += add_reccursive_child(futur_current->get_son(0),current->get_son(N_son-k_son-1),son_index); 00631 } 00632 00633 } 00634 ok += reccursive_destroy(&joint_root); 00635 joint_root = futur_root; 00636 joint_root->set_matrix(D_init); 00637 00638 read_skeleton(); 00639 fix_init_bind_pose(); 00640 00641 Matrix Id; 00642 //futur_root->set_matrix(Id); 00643 00644 ok += read_skeleton(); 00645 ok += reccursive_set_name_access_number(joint_root);//name = access number 00646 ok += precalculate_matrix(); 00647 00648 return ok; 00649 }
| int Skeleton::new_father | ( | double | x, | |
| double | y, | |||
| double | z | |||
| ) |
Definition at line 969 of file Skeleton.cpp.
References destroy(), joint_root, N_joint, precalculate_matrix(), read_skeleton(), reccursive_set_name_access_number(), and Joint::set_position().
00970 { 00971 destroy(); 00972 00973 N_joint=1; 00974 joint_root = new Joint; 00975 joint_root->set_position(x,y,z); 00976 00977 00978 read_skeleton(); 00979 reccursive_set_name_access_number(joint_root);//name = access number 00980 precalculate_matrix(); 00981 00982 return 0; 00983 }

| int Skeleton::subsample_skeleton | ( | ) |
Definition at line 767 of file Skeleton.cpp.
References joint_root, precalculate_matrix(), read_skeleton(), and reccursive_subsample_skeleton().
00768 { 00769 int ok=0; 00770 int k_delete=0; 00771 Joint *current = joint_root; 00772 00773 ok += read_skeleton(); 00774 ok += precalculate_matrix(); 00775 00776 ok += reccursive_subsample_skeleton(k_delete,¤t); 00777 00778 ok += read_skeleton(); 00779 ok += precalculate_matrix(); 00780 00781 return ok; 00782 }

| int Skeleton::find_closest_joint | ( | double | x, | |
| double | y, | |||
| double | z, | |||
| double | radius | |||
| ) |
Definition at line 863 of file Skeleton.cpp.
References get_joint(), Matrix::get_position(), Joint::get_world_matrix(), N_joint, and V_3D::set().
00864 { 00865 Joint *current=NULL; 00866 int k_joint=0; 00867 00868 V_3D P1;P1.set(x,y,z); 00869 V_3D P2;double p[3]; 00870 00871 double distance=0.0; 00872 double distance_min=99.9; 00873 int k_closest=-1; 00874 00875 for(k_joint=0;k_joint<N_joint;k_joint++) 00876 { 00877 current = get_joint(k_joint); 00878 current->get_world_matrix().get_position(p); 00879 P2.set(p); 00880 00881 distance = (P1-P2).norm(); 00882 //printf("%d : %f\n",k_joint,distance); 00883 if(distance_min>distance && distance<radius) 00884 { 00885 k_closest=k_joint; 00886 distance_min = distance; 00887 } 00888 } 00889 00890 return k_closest; 00891 }

| V_3D Skeleton::get_world_position_of_bone | ( | int | k_bone | ) |
Definition at line 943 of file Skeleton.cpp.
References get_joint(), Matrix::get_position(), and Joint::get_world_matrix().
Referenced by OpenGL_drawer::draw_skeleton(), and Skinned::get_vertex_to_bone_distance().
00944 { 00945 return get_joint(k_bone)->get_world_matrix().get_position(); 00946 }


| int Skeleton::reccursive_destroy | ( | ) |
Definition at line 719 of file Skeleton.cpp.
References joint_root.
Referenced by change_father(), File_parser::load_collada_skeleton(), operator=(), reccursive_destroy(), and ~Skeleton().
00720 { 00721 if(joint_root!=NULL) 00722 reccursive_destroy(&joint_root); 00723 return 0; 00724 }

| int Skeleton::get_access_number_of_joint_named | ( | std::string & | name_joint | ) |
Definition at line 987 of file Skeleton.cpp.
References Joint::get_access_number(), get_joint(), get_N_joint(), Joint::get_name(), Joint::get_weight_name(), and joint_root.
Referenced by get_access_number_of_joint_named(), File_parser::load_collada_animation(), and File_parser::load_collada_skining_attribute().
00988 { 00989 00990 00991 int count=0; 00992 Joint *current=joint_root; 00993 if(current==NULL) 00994 {printf("Error joint_root is null in get_access_number_of_joint_named in Skeleton\n");exit(-1);} 00995 00996 00997 for(count=0;count<get_N_joint()-1 && (name_joint != current->get_name()) && (name_joint != current->get_weight_name()) ;count++) 00998 current = get_joint(count+1); 00999 01000 if(current==NULL || ((name_joint != current->get_name())&&(name_joint != current->get_weight_name()))) 01001 {printf("WARNING cannot find joint [%s] in get_access_number_of_joint_named in skeleton\n",name_joint.data());return(-1);};//exit(-1);} 01002 01003 return current->get_access_number(); 01004 01005 }


| int Skeleton::get_access_number_of_joint_named | ( | const char * | name_joint | ) |
Definition at line 1006 of file Skeleton.cpp.
References get_access_number_of_joint_named().
01007 { 01008 std::string name; 01009 name = name_joint; 01010 return get_access_number_of_joint_named(name); 01011 }

| int Skeleton::init_time_animation | ( | ) |
Definition at line 1013 of file Skeleton.cpp.
References get_N_joint(), set_size_time(), and set_time().
Referenced by File_parser::load_collada_skeleton().
01014 { 01015 for(int k=0;k<get_N_joint();k++) 01016 { 01017 set_size_time(k,2); 01018 set_time(k,0,0.0); 01019 set_time(k,1,2000.0); 01020 } 01021 01022 return 0; 01023 }


| int Skeleton::is_animated_section | ( | int | k_bone | ) |
Definition at line 1025 of file Skeleton.cpp.
References anim.
01026 { 01027 if(k_bone >= (int)anim.size()) 01028 {printf("error k_bone too large in is_animated_section\n");exit(-1);} 01029 01030 if(anim[k_bone].get_size()==2) 01031 return 0; 01032 else 01033 return 1; 01034 01035 }
| double Skeleton::get_first_anim_time | ( | int | k_bone | ) |
Definition at line 1037 of file Skeleton.cpp.
References anim.
01038 { 01039 if(k_bone >= (int)anim.size()) 01040 {printf("error k_bone too large in is_animated_section\n");exit(-1);} 01041 01042 return anim[k_bone].get_time(0); 01043 }
| double Skeleton::get_last_anim_time | ( | int | k_bone | ) |
| int Skeleton::unitize_time_variation | ( | ) |
Definition at line 1052 of file Skeleton.cpp.
References anim, and get_N_joint().
01053 { 01054 int k_bone=0; 01055 int k_t=0; 01056 double current_t=0.0; 01057 double t_min=0.0,t_max=0.0; 01058 for(k_bone=0;k_bone<get_N_joint();k_bone++) 01059 { 01060 t_min = anim[k_bone].get_time(0); 01061 t_max = anim[k_bone].get_time(anim[k_bone].get_size()-1); 01062 01063 for(k_t=0;k_t<anim[k_bone].get_size();k_t++) 01064 { 01065 current_t = anim[k_bone].get_time(k_t); 01066 anim[k_bone].set_time(k_t,(current_t-t_min)/(t_max-t_min)); 01067 } 01068 } 01069 01070 return 0; 01071 }

| int Skeleton::add_anim_angle | ( | int | index_bone, | |
| int | axis, | |||
| double | offset_angle | |||
| ) |
Definition at line 1073 of file Skeleton.cpp.
References anim, get_angle(), and set_angle().
01074 { 01075 int k_time; 01076 for(k_time=0;k_time<anim[index_bone].get_size();k_time++) 01077 anim[index_bone].set_angle(k_time,axis,offset_angle+anim[index_bone].get_angle(k_time,axis)); 01078 01079 return 0; 01080 }

| int Skeleton::destroy | ( | ) | [private] |
Definition at line 34 of file Skeleton.cpp.
References joint_root.
Referenced by new_father(), and ~Skeleton().
00035 { 00036 int ok=0; 00037 00038 00039 if(joint_root!=NULL) 00040 delete joint_root; 00041 00042 00043 return ok; 00044 }

Definition at line 196 of file Skeleton.cpp.
References Joint::add_son(), Joint::get_access_number(), Joint::get_bind_pose(), Joint::get_father(), Joint::get_matrix(), Joint::get_N_son(), Joint::get_name(), Joint::get_orientation(), Joint::get_son(), Joint::set_access_number(), Joint::set_bind_pose(), Joint::set_father(), Joint::set_matrix(), Joint::set_name(), and Joint::set_orientation().
Referenced by operator=(), and Skeleton().
00197 { 00198 int ok=0; 00199 00200 current->set_name(to_copy->get_name()); 00201 double orientation[3]; 00202 to_copy->get_orientation(orientation); 00203 current->set_orientation(orientation); 00204 current->set_bind_pose(to_copy->get_bind_pose()); 00205 current->set_matrix(to_copy->get_matrix()); 00206 current->set_access_number(to_copy->get_access_number()); 00207 00208 // cout<<current->get_matrix()<<endl; 00209 00210 Joint *father = current; 00211 int k_son=0; 00212 00213 int N_son = to_copy->get_N_son(); 00214 if(N_son>0) 00215 { 00216 for(k_son=0;k_son<N_son;k_son++) 00217 { 00218 00219 current->add_son(); 00220 current = current->get_son(0); 00221 00222 // cout<<N_son-k_son-1<<", "<<N_son<<endl; 00223 00224 //to_copy = to_copy->get_son(k_son); 00225 current->set_father(father); 00226 ok += copy_reccursive_joint(current,to_copy->get_son(N_son-k_son-1)); 00227 //ok += copy_reccursive_joint(current,to_copy->get_son(k_son)); 00228 current = current->get_father(); 00229 } 00230 } 00231 00232 return ok; 00233 }

| int Skeleton::read_reccursive_joint_cout | ( | Joint * | current, | |
| Joint * | father, | |||
| int * | count, | |||
| int * | access_number | |||
| ) | [private] |
Definition at line 249 of file Skeleton.cpp.
References Joint::get_N_son(), Joint::get_son(), N_joint, Joint::set_access_number(), and Joint::set_level().
Referenced by read_skeleton().
00250 { 00251 //cout<<"l."<<*level<<" joint :"<<current->get_name()<<"("<<current->get_access_number()<<") father: "<<father->get_name()<<"("<<father->get_access_number()<<") number of son: "<<current->get_N_son()<<endl; 00252 00253 current->set_access_number(*access_number); 00254 current->set_level(*level); 00255 *access_number=*access_number+1; 00256 00257 father = current; 00258 for(int k=0;k<current->get_N_son();k++) 00259 { 00260 // current = current->get_son(k); 00261 *level=*level+1; 00262 read_reccursive_joint_cout(current->get_son(current->get_N_son()-k-1),father,level,access_number); 00263 *level=*level-1; 00264 } 00265 N_joint++; 00266 return 0; 00267 }


| int Skeleton::reccursive_fill_bones_access_number | ( | Joint * | current, | |
| int * | count | |||
| ) | [private] |
Definition at line 287 of file Skeleton.cpp.
References Joint::get_N_son(), and Joint::get_son().
Referenced by fill_bones_number().
00288 { 00289 int ok=0; 00290 //ok += current->set_access_number(look_for_bone_index(current->get_name())); 00291 00292 *count = *count+1; 00293 int k_son=0; 00294 for(k_son=0;k_son<current->get_N_son();k_son++) 00295 reccursive_fill_bones_access_number(current->get_son(k_son),count); 00296 00297 return ok; 00298 }


| int Skeleton::reccursive_bone_looking_for | ( | Joint * | current, | |
| int * | counter, | |||
| Joint ** | joint, | |||
| int | k_bone | |||
| ) | [private] |
Definition at line 410 of file Skeleton.cpp.
References Joint::get_N_son(), and Joint::get_son().
00411 { 00412 int N_son=current->get_N_son(); 00413 00414 if(*counter==k_bone) 00415 *joint = current; 00416 00417 00418 *counter = *counter+1; 00419 for(int k_son=0;*counter<=k_bone && k_son<N_son;k_son++) 00420 reccursive_bone_looking_for(current->get_son(N_son-k_son-1),counter,joint,k_bone); 00421 00422 00423 return 0; 00424 00425 00426 }

| int Skeleton::reccursive_bone_looking_for_position | ( | Joint * | current, | |
| Matrix | M, | |||
| int * | counter, | |||
| int | k_bone, | |||
| Matrix * | P | |||
| ) | [private] |
Definition at line 443 of file Skeleton.cpp.
References Joint::get_matrix(), Joint::get_N_son(), Joint::get_son(), and Matrix::multiply().
Referenced by get_position().
00444 { 00445 M = M.multiply(current->get_matrix()); 00446 if(*counter==k_bone) 00447 *P=M; 00448 00449 *counter = *counter+1; 00450 if(*counter<=k_bone) 00451 for(int k_son=0;*counter<=k_bone && k_son<current->get_N_son();k_son++) 00452 { 00453 reccursive_bone_looking_for_position(current->get_son(k_son),M,counter,k_bone,P); 00454 } 00455 return 0; 00456 00457 }


Definition at line 537 of file Skeleton.cpp.
References Joint::get_matrix(), Joint::get_N_son(), Joint::get_son(), Matrix::invert(), and Joint::set_bind_pose().
Referenced by fix_init_bind_pose().
00538 { 00539 00540 D = D*current->get_matrix(); 00541 00542 current->set_bind_pose(D.invert()); 00543 for(int k=0;k<current->get_N_son();k++) 00544 recursive_bind_pose_fixing(D,current->get_son(current->get_N_son()-k-1)); 00545 00546 return 0; 00547 }


Definition at line 562 of file Skeleton.cpp.
References Joint::get_bind_pose(), Joint::get_matrix(), Joint::get_N_son(), Joint::get_son(), Joint::set_T(), and Joint::set_world_matrix().
Referenced by precalculate_matrix().
00563 { 00564 D = D*current->get_matrix(); 00565 current->set_world_matrix(D); 00566 current->set_T(D*current->get_bind_pose()); 00567 00568 // cout<<current->get_access_number()<<endl; 00569 // cout<<current->get_world_matrix()<<endl; 00570 00571 int k=0; 00572 for(k=0;k<current->get_N_son();k++) 00573 reccursive_matrix_precalculation(D,current->get_son(current->get_N_son()-k-1)); 00574 return 0; 00575 }


| int Skeleton::reccursive_set_name_access_number | ( | Joint * | current | ) | [private] |
Definition at line 651 of file Skeleton.cpp.
References Joint::get_access_number(), Joint::get_N_son(), Joint::get_son(), and Joint::set_name().
Referenced by add_new_joint(), change_father(), and new_father().
00652 { 00653 char value[10]; 00654 sprintf(value,"%d",current->get_access_number()); 00655 current->set_name(value); 00656 for(int k_son=0;k_son<current->get_N_son();k_son++) 00657 reccursive_set_name_access_number(current->get_son(current->get_N_son()-k_son-1)); 00658 return 0; 00659 }


| int Skeleton::reccursive_look_for_new_father | ( | int | k_bone, | |
| Joint * | current, | |||
| Joint ** | new_root, | |||
| Matrix | temp_D, | |||
| Matrix * | D_init, | |||
| int * | is_good | |||
| ) | [private] |
Definition at line 661 of file Skeleton.cpp.
References Joint::get_access_number(), Joint::get_matrix(), Joint::get_N_son(), and Joint::get_son().
Referenced by change_father().
00662 { 00663 00664 int k_son=0; 00665 00666 00667 if(*is_good==0) 00668 temp_D = temp_D*current->get_matrix(); 00669 if(current->get_access_number()==k_bone) 00670 { 00671 *new_root = current; 00672 *is_good=1; 00673 (*D_init) = temp_D; 00674 } 00675 else 00676 for(k_son=0;*is_good==0 && k_son<current->get_N_son();k_son++) 00677 reccursive_look_for_new_father(k_bone,current->get_son(current->get_N_son()-k_son-1),new_root,temp_D,D_init,is_good); 00678 00679 return 0; 00680 }


| int Skeleton::add_reccursive_child | ( | Joint * | new_joint, | |
| Joint * | old_joint, | |||
| int | forbidden_index | |||
| ) | [private] |
Definition at line 683 of file Skeleton.cpp.
References Joint::add_son(), Joint::get_access_number(), Joint::get_N_son(), and Joint::get_son().
Referenced by change_father().
00684 { 00685 int k_son=0; 00686 int N_son = old_joint->get_N_son(); 00687 00688 *new_joint = *old_joint; 00689 //cout<<"b"<<new_joint->get_access_number()<<endl; 00690 for(k_son=0;k_son<N_son;k_son++) 00691 { 00692 if(old_joint->get_son(N_son-k_son-1)->get_access_number()!=forbidden_index)//this index must not be added 00693 { 00694 new_joint->add_son(); 00695 add_reccursive_child(new_joint->get_son(0),old_joint->get_son(N_son-k_son-1),forbidden_index); 00696 } 00697 } 00698 00699 00700 00701 return 0; 00702 00703 }


| int Skeleton::reccursive_destroy | ( | Joint ** | current | ) | [private] |
Definition at line 705 of file Skeleton.cpp.
References Joint::get_son(), and reccursive_destroy().
00706 { 00707 Joint *child; 00708 for(int k_son=0;k_son<(*current)->get_N_son();k_son++) 00709 { 00710 child = (*current)->get_son((*current)->get_N_son()-k_son-1); 00711 reccursive_destroy(&child); 00712 } 00713 00714 delete *current; 00715 *current=NULL; 00716 return 0; 00717 }

| int Skeleton::cout_reccursive_joint | ( | Joint * | current, | |
| Joint * | father, | |||
| int * | level, | |||
| int * | access_number | |||
| ) | [private] |
Definition at line 741 of file Skeleton.cpp.
References Joint::get_access_number(), Joint::get_father(), Joint::get_N_son(), Joint::get_name(), Joint::get_son(), and N_joint.
Referenced by cout_skeleton().
00742 { 00743 cout<<"lev."<<*level<<" joint :"<<current->get_name()<<"("<<current->get_access_number()<<") father: "<<current->get_father()->get_name()<<"("<<current->get_father()->get_access_number()<<") number of son: "<<current->get_N_son(); 00744 cout<<" ["; 00745 for(int k=0;k<current->get_N_son()-1;k++) 00746 printf("%d,",current->get_son(current->get_N_son()-k-1)->get_access_number()); 00747 if(current->get_N_son()>0) 00748 printf("%d",current->get_son(0)->get_access_number()); 00749 cout<<"]"<<endl; 00750 00751 //current->set_access_number(*access_number); 00752 *access_number=*access_number+1; 00753 00754 father = current; 00755 for(int k=0;k<current->get_N_son();k++) 00756 { 00757 // current = current->get_son(k); 00758 *level=*level+1; 00759 cout_reccursive_joint(current->get_son(current->get_N_son()-k-1),father,level,access_number); 00760 *level=*level-1; 00761 } 00762 N_joint++; 00763 return 0; 00764 }


| int Skeleton::reccursive_subsample_skeleton | ( | int | k_delete, | |
| Joint ** | current | |||
| ) | [private] |
Definition at line 784 of file Skeleton.cpp.
References Joint::get_matrix(), Joint::get_son(), PI, Joint::set_father(), and Joint::set_matrix().
Referenced by subsample_skeleton().
00785 { 00786 int k_son=0; 00787 int N_son = (*current)->get_N_son(); 00788 int is_deleted = 0; 00789 00790 double L_max=0.15*5;//size max between two joints 00791 double angle_max = 20; 00792 00793 if(N_son==1 && (*current)->get_father()->get_N_son()==1) 00794 { 00795 00796 00797 //calculate angle 00798 double X0[3],X1[3],X2[3]; 00799 00800 (*current)->get_father()->get_world_matrix().get_position(X0); 00801 (*current)->get_world_matrix().get_position(X1); 00802 (*current)->get_son(0)->get_world_matrix().get_position(X2); 00803 00804 00805 int k_dim=0; 00806 double L=0.0; 00807 for(k_dim=0;k_dim<3;k_dim++) 00808 L += (X2[k_dim]-X0[k_dim])*(X2[k_dim]-X0[k_dim]); 00809 L = powf(L,0.5); 00810 00811 00812 00813 double V1[3],V2[3]; 00814 double proj=0.0; 00815 double n_v1=0.0,n_v2=0.0; 00816 double angle=0.0; 00817 00818 for(k_dim=0;k_dim<3;V1[k_dim]=X1[k_dim]-X0[k_dim],V2[k_dim]=X2[k_dim]-X1[k_dim],k_dim++); 00819 for(k_dim=0,proj=0.0,n_v1=0.0,n_v2=0.0;k_dim<3;k_dim++) 00820 { 00821 proj += V1[k_dim]*V2[k_dim]; 00822 n_v1 += V1[k_dim]*V1[k_dim]; 00823 n_v2 += V2[k_dim]*V2[k_dim]; 00824 } 00825 n_v1 = powf(n_v1,0.5); 00826 n_v2 = powf(n_v2,0.5); 00827 00828 00829 angle = acos(proj/(n_v1*n_v2)); 00830 00831 if( (*current)->get_access_number()!=0 && (((angle*180/PI<angle_max) && L<L_max) || L<L_max/10.0 ))//bellow size min L_max/10 the angle does not account 00832 { 00833 00834 is_deleted = 1; 00835 (*current)->get_father()->set_son(0,(*current)->get_son(0)); 00836 00837 Joint *current_son=(*current)->get_son(0); 00838 00839 current_son->set_father((*current)->get_father()); 00840 current_son->set_matrix((*current)->get_matrix()*current_son->get_matrix()); 00841 00842 00843 } 00844 } 00845 00846 Joint *son=NULL; 00847 for(k_son=0;k_son<N_son;k_son++) 00848 { 00849 son = (*current)->get_son(N_son-k_son-1); 00850 reccursive_subsample_skeleton(k_delete, &son ); 00851 } 00852 00853 if(is_deleted==1) 00854 delete *current; 00855 00856 00857 00858 00859 00860 return 0; 00861 }


| int Skeleton::reccursive_scale | ( | Joint * | current, | |
| double * | s | |||
| ) | [private] |
Definition at line 369 of file Skeleton.cpp.
References Joint::get_matrix(), Joint::get_N_son(), Joint::get_son(), Joint::set_matrix(), Matrix::set_value(), and Matrix::value().
Referenced by scale().
00370 { 00371 int ok=0; 00372 00373 int k_dim=0; 00374 Matrix D=current->get_matrix(); 00375 for(k_dim=0;k_dim<3;k_dim++) 00376 D.set_value(D.value(3,k_dim)*s[k_dim],3,k_dim); 00377 current->set_matrix(D); 00378 00379 int k_son=0; 00380 for(k_son=0;k_son<current->get_N_son();k_son++) 00381 reccursive_scale(current->get_son(current->get_N_son()-k_son-1),s); 00382 00383 return ok; 00384 }


| int Skeleton::fill_joint_vector | ( | ) | [private] |
Definition at line 948 of file Skeleton.cpp.
References joint_access, joint_root, and reccursive_fill_joint_vector().
Referenced by precalculate_matrix().
00949 { 00950 joint_access.resize(0); 00951 reccursive_fill_joint_vector(joint_root); 00952 00953 return 0; 00954 }


| int Skeleton::reccursive_fill_joint_vector | ( | Joint * | current | ) | [private] |
Definition at line 956 of file Skeleton.cpp.
References Joint::get_N_son(), Joint::get_son(), and joint_access.
Referenced by fill_joint_vector().
00957 { 00958 int k_son=0; 00959 int N_son=current->get_N_son(); 00960 00961 joint_access.push_back(current); 00962 for(k_son=0;k_son<N_son;k_son++) 00963 reccursive_fill_joint_vector(current->get_son(N_son-k_son-1)); 00964 00965 return 0; 00966 }


int Skeleton::N_joint [private] |
Definition at line 155 of file Skeleton.h.
Referenced by add_joint_number(), cout_reccursive_joint(), cout_skeleton(), find_closest_joint(), get_N_joint(), init_time(), new_father(), operator=(), read_reccursive_joint_cout(), read_skeleton(), and Skeleton().
Joint* Skeleton::joint_root [private] |
Definition at line 156 of file Skeleton.h.
Referenced by add_new_joint(), change_father(), cout_skeleton(), deform_skeleton(), destroy(), fill_bones_number(), fill_joint_vector(), fix_init_bind_pose(), get_access_number_of_joint_named(), get_position(), get_root(), new_father(), operator=(), precalculate_matrix(), read_skeleton(), reccursive_destroy(), scale(), Skeleton(), subsample_skeleton(), and translate().
int Skeleton::N_list_bones [private] |
std::vector<Animation_transformation> Skeleton::anim [private] |
Definition at line 161 of file Skeleton.h.
Referenced by add_anim_angle(), deform_reccursive_joint(), get_angle(), get_first_anim_time(), get_last_anim_time(), get_rotation_animation(), get_size_time(), is_animated_section(), operator=(), read_anim(), set_angle(), set_anim_matrix(), set_size_time(), set_time(), set_translate(), Skeleton(), and unitize_time_variation().
std::vector<Joint*> Skeleton::joint_access [private] |
Definition at line 162 of file Skeleton.h.
Referenced by fill_joint_vector(), get_joint(), operator=(), reccursive_fill_joint_vector(), and Skeleton().
1.5.6