Exemplo n.º 1
0
        private InputBinding ConfigureSkeleton(
            XPathNavigator navigator, XPathNodeIterator bindingIt, ISkeletonInput input)
        {
            string point       = bindingIt.Current.GetAttribute("point", "");
            float  zeroAngle   = float.Parse(bindingIt.Current.GetAttribute("zeroAngle", ""), CultureInfo.InvariantCulture);
            float  sensitivity = float.Parse(bindingIt.Current.GetAttribute("sensitivity", ""), CultureInfo.InvariantCulture);

            XPathNodeIterator axis = bindingIt.Current.Select("skeleton/axis");

            if (axis.Count > 0)
            {
                axis.MoveNext();
                return(ConfigureAbsoluteSkeleton(navigator, bindingIt,
                                                 (AbsoluteSkeletonBinding.BindingAxis)Enum.Parse(typeof(AbsoluteSkeletonBinding.BindingAxis), axis.Current.Value),
                                                 point, zeroAngle, sensitivity, input));
            }

            XPathNodeIterator sb1 = bindingIt.Current.Select("skeleton/firstBone");
            XPathNodeIterator sb2 = bindingIt.Current.Select("skeleton/secondBone");

            if (sb1.Count > 0)
            {
                sb1.MoveNext();
                BoneMarkers bone1 = (BoneMarkers)Enum.Parse(typeof(BoneMarkers), sb1.Current.Value);
                if (sb2.Count > 0)
                {
                    sb2.MoveNext();
                    BoneMarkers bone2 = (BoneMarkers)Enum.Parse(typeof(BoneMarkers), sb2.Current.Value);
                    return(new SkeletonBinding(input, Configuration.GetHandle(point), bone1, bone2, zeroAngle, sensitivity));
                }
                return(new SkeletonBinding(input, Configuration.GetHandle(point), bone1, zeroAngle, sensitivity));
            }
            return(null);
        }
Exemplo n.º 2
0
 public SkeletonBinding(
     ISkeletonInput input,
     Configuration.InputValueHandle handle,
     BoneMarkers bone,
     float zeroAngle,
     float sensitivity)
     : base(handle, zeroAngle, sensitivity)
 {
     this._input            = input;
     FirstBone              = bone;
     _type                  = BindingType.SingleBoneAngle;
     _event_handler         = new EventHandler <SkeletonChangedEventArgs>(_input_assign_single_bone_angle);
     _analyzer_handler      = new EventHandler <SkeletonChangedEventArgs>(_analyzer_handle);
     input.SkeletonChanged += _event_handler;
     input.SkeletonChanged += _analyzer_handler;
 }
Exemplo n.º 3
0
        public void ProcessSkeleton(BoneMarkers marker, ISkeleton skeleton)
        {
            SkeletonProcessRequest p = new SkeletonProcessRequest();

            p.Analyzer        = _analyzer as ISkeletonAnalyzer;
            p.CurrentMarker   = marker;
            p.CurrentSkeleton = skeleton;

            lock (_lockObject)
            {
                _requestQueue.Enqueue(p);

                if (_requestQueue.Count == 1) // the only element that we just inserted is there
                {
                    Monitor.Pulse(_lockObject);
                }
            }
        }
Exemplo n.º 4
0
        public void OnSkeletonChanged(BoneMarkers marker, ISkeleton newSkeleton, IGame game)
        {
            if (_writer == null)
            {
                return;
            }
            for (int i = 0; i < (int)SkeletonMarkers.Count - 1; i++)
            {
                Vector3 v = newSkeleton.GetPositionOf((SkeletonMarkers)i);
                _currentData[i] = new Vub.Etro.IO.Vector4(v.X, v.Y, v.Z, 0);
            }

            writeGameObjects(game, (int)labels.Length);

            //if (newSkeleton is IRichSkeleton)
            //{
            //  writeSkeletonAngles((IRichSkeleton)newSkeleton, labels.Length + game.GameObjects.Keys.Count);
            //  writeSkeletonQualities((IRichSkeleton)newSkeleton, labels.Length + game.GameObjects.Keys.Count + angleLabels.Length);
            //}
            _writer.WriteIntFrame(_currentData);
            WriteAnalogData(game);
        }