Пример #1
0
        public ClusterLoggingProvider(SensorType sensorType1, SensorType sensorType2, CancellationToken externalToken)
        //: this(new CorrectedAccelerometerProvider(sensorType1), new CorrectedAccelerometerProvider(sensorType2)) { }
            : base()
        {
            // Quick shortcut lambda so I don't have to type all that crap out just to get the words "SensorType.Accelerometer" anytime I want 'em.
            Func <SensorType, string> TypeName = (SensorType s) => Enum.GetName(typeof(SensorType), s);

            if (sensorType1.IsOneOf(OrientationSensorTypes))
            {
                if (!default(T1).CanConvert <T1, Quaternion>())
                {
                    throw new InvalidCastException($"SensorType {TypeName(sensorType1)} requires that T1 be Quaternion type.");
                }
                AddProvider(new FrameShiftedOrientationProvider(sensorType1));
            }
            else if (sensorType1.IsOneOf(VectorSensorTypes))
            {
                if (!default(T1).CanConvert <T1, Vector3>())
                {
                    throw new InvalidCastException($"SensorType {TypeName(sensorType1)} requires that T1 be Vector3 type.");
                }
                AddProvider(new CorrectedAccelerometerProvider(sensorType1));
            }
            else
            {
                throw new ArgumentException($"Sensor type {TypeName(sensorType1)} is neither Quaternion nor Vector3.  Construct its provider manually without using this shortcut form.");
            }

            if (sensorType2.IsOneOf(OrientationSensorTypes))
            {
                if (!default(T2).CanConvert <T2, Quaternion>())
                {
                    throw new InvalidCastException($"SensorType {TypeName(sensorType2)} requires that T2 be Quaternion type.");
                }
                AddProvider(new FrameShiftedOrientationProvider(sensorType2));
            }
            else if (sensorType2.IsOneOf(VectorSensorTypes))
            {
                if (!default(T2).CanConvert <T2, Vector3>())
                {
                    throw new InvalidCastException($"SensorType {TypeName(sensorType2)} requires that T1 be Vector3 type.");
                }
                AddProvider(new CorrectedAccelerometerProvider(sensorType2));
            }
            else
            {
                throw new ArgumentException($"Sensor type {TypeName(sensorType2)} is neither Quaternion nor Vector3.  Construct its provider manually without using this shortcut form.");
            }
        }
Пример #2
0
 protected IProvider GetProvider(SensorType sensorType)
 {
     if (sensorType.IsOneOf(VectorSensorTypes))
     {
         return((IProvider) new Vector3Provider(sensorType));
     }
     else if (sensorType.IsOneOf(OrientationSensorTypes))
     {
         return((IProvider) new OrientationSensorProvider(sensorType));
     }
     else
     {
         throw new ArgumentException($"Sensor type {Enum.GetName(typeof(SensorType), sensorType)} not recognized as either Vector or Quaternion type.");
     }
 }