bool IntersenseAPIStandalone::updateData() { if (FALSE != ISD_GetData(mHandle, &mData)) { return true; } return false; }
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; }
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]); } }