#include "proj.h" #include "viewer.h" #include "Utils.h" #include "MotionCapturer.h" // ik button cb void ikCB(Fl_Widget* wid, Fl_Widget *container) { Fl_Light_Button *but = (Fl_Light_Button *)wid; Panel *win = (Panel *)container; Gl_Win *gl = win->gl; gl->b_ik = false; if (but->value() == 1) { win->quat_browser->value(HIDE); (win->quat_browser->callback())(win->quat_browser,win->quat_browser->user_data()); win->emap_browser->value(HIDE); (win->emap_browser->callback())(win->emap_browser,win->emap_browser->user_data()); win->euler_browser->value(NONE); // ik on euler. TODO: modify poses in interp mode (win->euler_browser->callback())(win->euler_browser,win->euler_browser->user_data()); if (gl->cap == NULL) fl_alert("Load Motion file first."); else if ( !(gl->cap->b_read_flex_success) ) { fl_alert("read in a valid joint flex file first."); but->value(0); } else gl->b_ik = true; } win->damage(1); } // reads joint limits file void read_flexCB(Fl_Widget* wid, Fl_Widget *container) { Fl_Button *but = (Fl_Button *)wid; Gl_Win *gl = (Gl_Win *)container; MotionCapturer *cap = gl->cap; if (cap == NULL) { fl_alert("Load Motion file first."); } else { char *filename = NULL; FILE *fin; filename = fl_file_chooser("Enter joint flex file name to load ", "*.flx", NULL); if (filename == NULL) { fl_alert("invalid file name! File not loaded."); cap->b_read_flex_success = false; return; } if ( (fin = fopen(filename, "r")) == NULL) { fl_alert("Error opening file! File not loaded."); cap->b_read_flex_success = false; return; } cap->b_read_flex_success = (cap->read_input_flex(fin, cap->root) == SUCCESS); if (!cap->b_read_flex_success) fl_alert("Invalid Joint flex file."); } } static bool begins(const char* str1, const char* str2) { const char* a = str1; const char* b = str2; // look at each character until we get to the end of B while(*b) { if (! *a) return false; // A ends too early? if (toupper(*a) != toupper(*b)) return false; a++, b++; } return true; } void Gl_Win::write_qbvh() { char *outname = NULL; FILE *fout, *fin; char hdr_lineBuf[LINESIZE]; // where to read the line into double *tptr, *rptr; outname = fl_file_chooser("Enter file name to save to ", "*.qbvh", NULL); if (outname == NULL) { fl_alert("invalid file name! File not saved."); return; } if ( (fout = fopen(outname, "w")) == NULL) { fl_alert("Error opening file! File not saved."); return; } if ( (fin = fopen(in_bvh_name, "r")) == NULL) { fl_alert("Error opening original bvh! File not saved."); return; } // copy skeleton info while (fgets(hdr_lineBuf, LINESIZE, fin)) { fputs(hdr_lineBuf, fout); if (begins(hdr_lineBuf, "Frame Time")) break; } fclose(fin); tptr = cap->trans; rptr = cap->qinterp; // write out interp for (int f=0; f