void VROpenVRInputDevice::processVREvent( const vr::VREvent_t & event ,vr::TrackedDevicePose_t *pose) { switch( event.eventType ) { case vr::VREvent_TrackedDeviceActivated: { devices.push_back(getDeviceName( event.trackedDeviceIndex) ); std::cerr << "Device " << devices[devices.size()-1] << " idx : "<< event.trackedDeviceIndex << " attached.\n" << std::endl; } break; case vr::VREvent_TrackedDeviceDeactivated: { std::cerr << "Device " << devices[event.trackedDeviceIndex] << " detached.\n" << std::endl; } break; case vr::VREvent_TrackedDeviceUpdated: { std::cerr << "Device " << devices[event.trackedDeviceIndex] << " updated.\n" << std::endl; } break; case vr::VREvent_ButtonPress : { std::string event_name = devices[event.trackedDeviceIndex] + "_" + getButtonName((vr::EVRButtonId) event.data.controller.button) + "_Pressed"; _dataIndex.addData(event_name + "/Pose", poseToMatrix4(pose)); _events.push_back(_dataIndex.serialize(event_name)); } break; case vr::VREvent_ButtonUnpress: { std::string event_name = devices[event.trackedDeviceIndex] + "_" + getButtonName((vr::EVRButtonId) event.data.controller.button) + "_Released"; _dataIndex.addData(event_name + "/Pose", poseToMatrix4(pose)); _events.push_back(_dataIndex.serialize(event_name)); } break; case vr::VREvent_ButtonTouch: { std::string event_name = devices[event.trackedDeviceIndex] + "_" + getButtonName((vr::EVRButtonId) event.data.controller.button) + "_Touched"; _dataIndex.addData(event_name + "/Pose", poseToMatrix4(pose)); _events.push_back(_dataIndex.serialize(event_name)); } break; case vr::VREvent_ButtonUntouch: { std::string event_name = devices[event.trackedDeviceIndex] + "_" + getButtonName((vr::EVRButtonId) event.data.controller.button) + "_Untouched"; _dataIndex.addData(event_name + "/Pose", poseToMatrix4(pose)); _events.push_back(_dataIndex.serialize(event_name)); } break; } }
void Message::setMessageButton(MessageBoxStyle _info) { clearButton(); std::vector<MessageBoxStyle> buttons = _info.getButtons(); for (size_t index=0; index<buttons.size(); ++index) { // корректируем ее номер MessageBoxStyle info = buttons[index]; // если бит есть то ставим кнопку addButtonName(getButtonName(info)); // внутри адд сбрасывается mVectorButton.back()->_setInternalData(info); // первая кнопка if (mVectorButton.size() == 1) mInfoOk = info; // последняя кнопка mInfoCancel = info; } updateSize(); }
UString Message::getButtonName(MessageBoxStyle _style) { size_t index = _style.getButtonIndex(); const char* tag = getButtonTag(index); UString result = LanguageManager::getInstance().replaceTags(utility::toString("#{", tag, "}")); if (result == tag) return getButtonName(index); return result; }
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]); } }
void TrackDClient::pollForInput(Array<EventRef> &events) { // Update trackers for (int i=0;i<iMin(_numSensors, _tEventNames.size());i++) { float tracker[6]; trackdGetPosition(_trackerMemory, i, &(tracker[0])); trackdGetEulerAngles(_trackerMemory, i, &(tracker[3])); Vector3 trans(tracker[0], tracker[1], tracker[2]); Matrix3 rotY = Matrix3::fromAxisAngle(Vector3(0,1,0), toRadians(tracker[4])); Matrix3 rotX = Matrix3::fromAxisAngle(Vector3(1,0,0), toRadians(tracker[3])); Matrix3 rotZ = Matrix3::fromAxisAngle(Vector3(0,0,1), toRadians(tracker[5])); CoordinateFrame trackerToDevice = CoordinateFrame(trans) * CoordinateFrame(rotY) * CoordinateFrame(rotX) * CoordinateFrame(rotZ); trackerToDevice.translation *= _trackerUnitsToRoomUnitsScale; /** This is probably more direct, but can't test it right now.. float mat[4][4]; trackdGetMatrix(_trackerMemory, i, mat); CoordinateFrame trackerToDevice = CoordinateFrame(Matrix3(mat[0][0], mat[1][1], mat[2][2], mat[0][1], mat[1][1], mat[2][1], mat[0][2], mat[1][2], mat[2][2]), Vector3(mat[0][3], mat[1][3], mat[2][3])); **/ CoordinateFrame eventRoom = _finalOffset[i] * _deviceToRoom * trackerToDevice * _propToTracker[i]; events.append(new Event(getTrackerName(i), eventRoom)); } // Update buttons for (int i=0;i<iMin(_numButtons, _bEventNames.size());i++) { int b = trackdGetButton(_wandMemory, i); if (b != _buttonStates[i]) { _buttonStates[i] = b; std::string name = getButtonName(i); if (b) { name = name + "_down"; } else { name = name + "_up"; } events.append(new Event(name)); } } /** // Update valuators for (int i=0;i<_numValuators;i++) { float v = trackdGetValuator(_wandMemory, i); if (v != _valuatorStates[i]) { _valuatorStates[i] = v; events.append(new Event(getValuatorName(i), v)); } } **/ }
void PointerHandler::onPointerButtonDown(Event e) { std::cout << getButtonName(e.mouseButton.button) << " pressed" << std::endl; }
void PointerHandler::onPointerButtonUp(Event e) { std::cout << getButtonName(e.mouseButton.button) << " released" << std::endl; }