Beispiel #1
0
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;
	}
}
Beispiel #2
0
	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();
	}
Beispiel #3
0
	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;
	}
Beispiel #4
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]); 
  }
}
Beispiel #5
0
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));
    }
  }
  **/
}
Beispiel #6
0
void PointerHandler::onPointerButtonDown(Event e)
{
	std::cout << getButtonName(e.mouseButton.button) << " pressed" << std::endl;
}
Beispiel #7
0
void PointerHandler::onPointerButtonUp(Event e)
{
	std::cout << getButtonName(e.mouseButton.button) << " released" << std::endl;
}