Example #1
0
void DumpBSpline(NiBSplineCompTransformInterpolatorRef spline, string target)
{
   float start = spline->GetStartTime();
   float stop = spline->GetStopTime();

   int nframes = int((stop-start) / FramesIncrement);

   Ref<NiBSplineData > data = spline->GetSplineData();
   Ref<NiBSplineBasisData > basis = spline->GetBasisData();
   int nctrl = basis->GetNumControlPoints();

   cout.setf(ios::fixed, ios::floatfield);
   cout << setprecision(3); // << setiosflags(ios_base::showpos);

   if (dumpControl)
   {
      vector<short > control = data->GetShortControlPoints();
      cout << "Control data for " << target << endl
           << "Control Pt: " << control.size() << endl;
      int j=0;
      cout << "0" << '\t';
      for (int i=0, n=control.size(); i<n; ++i, ++j) {
         //cout << float(control[i]) / float (32767) << '\t';
         cout << i << '\t' << control[i] << endl;
      }
      cout << endl;

      return;
   }

   {
      vector<Vector3> control = spline->GetTranslateControlData();
      if (!control.empty()) {

         float mult = spline->GetTranslateMultiplier();
         float bias = spline->GetTranslateBias();

         cout << "Translation data for " << target << endl
            << "Control Pt: " << control.size() << endl
            << "Mult: " << mult << endl
            << "Bias: " << bias << endl
            << endl ;

         for (int i=0, n=control.size(); i<n; ++i){
            Vector3 xyz = control[i];
            cout << i << "\t[" << xyz.x << ",\t" << xyz.y << ",\t" << xyz.z << "]" << endl;
         }

         cout << endl;

         int npoints = control.size() * 2 + 1;
         vector< Key<Vector3> > keys = spline->SampleTranslateKeys(npoints, 3);
         for (int i=0, n=keys.size(); i<n; ++i){
            Vector3 xyz = keys[i].data;
            cout << i << "\t[" << xyz.x << ",\t" << xyz.y << ",\t" << xyz.z << "]" << endl;
         }
         cout << endl;
      }
   }

   {
      vector<Quaternion> control = spline->GetQuatRotateControlData();
      if (!control.empty()) {

         float mult = spline->GetRotationMultiplier();
         float bias = spline->GetRotationBias();

         cout << "Quaternion rotation data for " << target << endl
              << "Control Pt: " << control.size() << endl
              << "Mult: " << mult << endl
              << "Bias: " << bias << endl
              << endl ;

         for (int i=0, n=control.size(), j=1; i<n; ++i, ++j){
            Quaternion q = control[i];
            Float3 ypr = q.AsEulerYawPitchRoll();
               cout << i << "\t<" << q.w << ",\t" << q.x << ",\t" << q.y << ",\t" << q.z << ">"
                  << "\t[" << TODEG(ypr[0]) << ",\t" << TODEG(ypr[1]) << ",\t" << TODEG(ypr[2]) << "]" 
                  << endl;
            if (j==nctrl)
            {
               cout << endl;
               j = 0;
            }
         }

         cout << endl;

         int npoints = control.size() * 2 + 1;
         vector< Key<Quaternion> > keys = spline->SampleQuatRotateKeys(npoints, 3);
         for (int i=0, n=keys.size(); i<n; ++i){
            Quaternion q = keys[i].data;
            Float3 ypr = q.AsEulerYawPitchRoll();
            cout << i << "\t<" << q.w << ",\t" << q.x << ",\t" << q.y << ",\t" << q.z << ">"
               << "\t[" << TODEG(ypr[0]) << ",\t" << TODEG(ypr[1]) << ",\t" << TODEG(ypr[2]) << "]" 
               << endl;
         }
         cout << endl;
      }
   }
   {
      vector<float> control = spline->GetScaleControlData();
      if (!control.empty()) {

         float mult = spline->GetScaleMultiplier();
         float bias = spline->GetScaleBias();

         cout << "Scale data for " << target << endl
            << "Control Pt: " << control.size() << endl
            << "Mult: " << mult << endl
            << "Bias: " << bias << endl
            << endl ;

         for (int i=0, n=control.size(); i<n; ++i){
            float s = control[i];
            cout << i << "\t" << s << endl;
         }

         cout << endl;

         int npoints = control.size() * 2 + 1;
         vector< Key<float> > keys = spline->SampleScaleKeys(npoints, 3);
         for (int i=0, n=keys.size(); i<n; ++i){
            float s = keys[i].data;
            cout << i << "\t" << s << endl;
         }
         cout << endl;
      }
   }
   //extern void bspline(int n, int t, int l, float *control, float *output, int num_output);
   //
   //Float4 *p = new Float4[nctrl];
   //for (int i=0, j=0;i<nctrl; ++i) {
   //   p[i][0] = float(points[j++]) / float (32767);
   //   p[i][1] = float(points[j++]) / float (32767);
   //   p[i][2] = float(points[j++]) / float (32767);
   //   p[i][3] = float(points[j++]) / float (32767);

   //   float w = float(p[i][0]) * mult + bias;
   //   float x = float(p[i][1]) * mult + bias;
   //   float y = float(p[i][2]) * mult + bias;
   //   float z = float(p[i][3]) * mult + bias;

   //   Quaternion q (w,z,x,y);
   //   Float3 ypr = q.AsEulerYawPitchRoll();

   //   cout << i 
   //      << "\t" << w 
   //      << "\t" << x 
   //      << "\t" << y 
   //      << "\t" << z 
   //      << "\t" << TODEG(ypr[0])
   //      << "\t" << TODEG(ypr[1])
   //      << "\t" << TODEG(ypr[2])
   //      << endl;
   //}
   //cout << endl;
   //int res = (nframes+1)*2+1;
   //Float4 *out = new Float4[res];
   //bspline(nctrl-1, 4, 4, &p[0][0], &out[0][0], res);
   //for (int i = 0; i < res; ++i)
   //{
   //   float fT = ((float)i)/((float)res-1) * (stop-start) * FramesPerSecond;
   //   float w = float(out[i][0]) * mult + bias;
   //   float x = float(out[i][1]) * mult + bias;
   //   float y = float(out[i][2]) * mult + bias;
   //   float z = float(out[i][3]) * mult + bias;

   //   Quaternion q (w,z,x,y);
   //   Float3 ypr = q.AsEulerYawPitchRoll();

   //   cout << i 
   //      << "\t" << fT
   //      << "\t" << w 
   //      << "\t" << x 
   //      << "\t" << y 
   //      << "\t" << z 
   //      << "\t" << TODEG(ypr[0])
   //      << "\t" << TODEG(ypr[1])
   //      << "\t" << TODEG(ypr[2])
   //      << endl;
   //}
}