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; //} }