Exemplo n.º 1
0
static value openflkinect_update_skeletons(value ref)
{
  val_check_kind(ref, k_Kinect);

  Kinect* k = static_cast<Kinect*>(val_data(ref));

  vector<Skeleton> trackedSkels = k->skeletons();
  value skeletons = alloc_array(trackedSkels.size());
  for ( int i=0; i<trackedSkels.size(); i++ )
  {
    Skeleton& s = trackedSkels[i];
    value skeleton = alloc_empty_object();
    val_array_set_i(skeletons, i, skeleton);

    if ( trackedSkels[i].size() > 0 )
    {
      alloc_field( skeleton, val_id( "isTracked" ),
          alloc_bool( true ) );
      value bones = alloc_array( trackedSkels[i].size() );
      alloc_field(skeleton, val_id("bones"), bones);

      for ( int j=0; j<trackedSkels[i].size(); j++ )
      {
        int k = 0;
        for ( boneIt it = trackedSkels[i].begin();
            it != trackedSkels[i].end(); ++it )
        {
          //cout << it->second.orientation.startJoint << endl;
          value b = get_bone(it->second);
          val_array_set_i(bones, k++, b);
        }
      }

    }
    else
    {
      alloc_field( skeleton, val_id( "isTracked" ),
          alloc_bool( false ) );

    }
  }
  return skeletons;
}