bool IntersenseAPIStandalone::updateData()
{
   if (FALSE != ISD_GetData(mHandle, &mData))
   {
      return true; 
   }
   return false;
}
示例#2
0
文件: istracker.cpp 项目: nixz/covise
const bool ISTracker::getData(float &rotX, float &rotY, float &rotZ)
{
    ISD_GetData(handle, &data);
    //  ISD_GetCameraData( handle, &cameraData );

    if (ISD_GetCommInfo(handle, &Tracker))
    {
        rotX = data.Station[0].Orientation[0];
        rotY = data.Station[0].Orientation[1];
        rotZ = data.Station[0].Orientation[2];
    }

    return true;
}
示例#3
0
void
ISenseDirect::pollForInput(Array<EventRef> &events)
{
  ISD_TRACKER_DATA_TYPE trackerData;
  ISD_GetData( _handle, &trackerData );    

  for (int s=0;s<_maxStations;s++) {
    ISD_STATION_STATE_TYPE *data = &trackerData.Station[s];

    Vector3 trans = Vector3(data->Position[0], data->Position[1], data->Position[2]);
    //printf("%6.2f %6.2f %6.2f ",
    //       data->Position[0], data->Position[1], data->Position[2]);
    
    CoordinateFrame trackerToDevice;
    if ( _stationInfo[s].AngleFormat == ISD_QUATERNION ) {
      //printf("%5.2f %5.2f %5.2f %5.2f ", data->Orientation[0], 
      //       data->Orientation[1], data->Orientation[2], data->Orientation[3]);

      Matrix3 rot = Matrix3(Quat(data->Orientation[0], data->Orientation[1],
                                 data->Orientation[2], data->Orientation[3]));

      trackerToDevice = CoordinateFrame(rot, trans);
    }
    else { // Euler angles
      //printf("%7.2f %7.2f %7.2f ",
      //       data->Orientation[0], data->Orientation[1], data->Orientation[2]);
      Matrix3 rotY = Matrix3::fromAxisAngle(Vector3(0,1,0), toRadians(data->Orientation[1]));
      Matrix3 rotX = Matrix3::fromAxisAngle(Vector3(1,0,0), toRadians(data->Orientation[0]));
      Matrix3 rotZ = Matrix3::fromAxisAngle(Vector3(0,0,1), toRadians(data->Orientation[2]));
      
      trackerToDevice = trans * rotY * rotX * rotZ;
    }

    trackerToDevice.translation *= _trackerUnitsToRoomUnitsScale;
    CoordinateFrame eventRoom = _finalOffset[s] * _deviceToRoom * 
      trackerToDevice * _propToTracker[s];

    events.append(new Event(getTrackerName(s), eventRoom));  


    /*printf("%d%d%d%d%d ", 
           (int) data->ButtonState[0], 
           (int) data->ButtonState[1], 
           (int) data->ButtonState[2], 
           (int) data->ButtonState[3], 
           (int) data->ButtonState[4]);
    */

    for (int i=0;i<ISD_MAX_BUTTONS;i++) {
      if (data->ButtonState[i] != _btnStatus[s][i]) {
        _btnStatus[s][i] = !_btnStatus[s][i];
        if (_btnStatus[s][i]) {
          events.append(new Event(getButtonName(s, i) + "_down"));
        }
        else {
          events.append(new Event(getButtonName(s, i) + "_up"));
        }
      }
    }
      
    // TODO: deal with analogs..
    //printf("%d %d ", data->AnalogData[0], data->AnalogData[1]); 
  }
}