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); }
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; }
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); } } }
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); }