public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); Model.LeapMotion.EFingerBoneType eFingerBoneType = (EFingerBoneType)Enum.Parse(typeof(EFingerBoneType), jObject["Type"].ToString()); FingerBone fingerBone = new FingerBone(eFingerBoneType); string localStartPositionString = jObject["LocalStartPosition"].ToString().TrimStart('<').TrimEnd('>'); string[] localStartPositions = localStartPositionString.Split(','); fingerBone.LocalStartPosition = new Vector3( float.Parse(localStartPositions[0]), float.Parse(localStartPositions[1]), float.Parse(localStartPositions[2]) ); string localEndPositionString = jObject["LocalEndPosition"].ToString().TrimStart('<').TrimEnd('>'); string[] localEndPositions = localEndPositionString.Split(','); fingerBone.LocalEndPosition = new Vector3( float.Parse(localEndPositions[0]), float.Parse(localEndPositions[1]), float.Parse(localEndPositions[2]) ); return(fingerBone); }
public Quaternion GetBoneRotation(uint actorId, Side side, Finger fingerId, FingerBone fingerboneId) { SideBone sideBoneId = BoneReference.HumanoidSideBone(fingerId, fingerboneId); Quaternion q = GetBoneRotation(actorId, side, sideBoneId); return(q); }
/// <summary> /// Auto detect finger bones, set offset. /// </summary> /// <param name="type">Left or right hand</param> /// <param name="offset">Offset the finger rotation to make it works correctly. For right hand, it needs an offset of Vector3(0.0f, 0.0f, 180.0f).</param> public RocketBoxHand(HandType type, Vector3 offset = new Vector3()) { handType = type; for (int fingerIndex = 0; fingerIndex <= fingerBones.GetUpperBound(0); fingerIndex++) { for (int fingerBoneIndex = 0; fingerBoneIndex <= fingerBones.GetUpperBound(1); fingerBoneIndex++) { string name = "Finger" + fingerIndex + ((fingerBoneIndex == 0) ? "" : fingerBoneIndex.ToString()); string namePrefix = "Bip01 " + ((type == HandType.LeftHand) ? "L " : "R "); Transform transform = GameObject.Find(namePrefix + name).transform; fingerBones[fingerIndex, fingerBoneIndex] = new FingerBone(name, transform, offset); } } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); Model.LeapMotion.EFingerType fingerType = (EFingerType)Enum.Parse(typeof(Model.LeapMotion.EFingerType), jObject["Type"].ToString()); Finger finger = new Finger(fingerType); IList <FingerBone> fingerBones = new List <FingerBone>(); serializer.Converters.Add(new FingerBoneTypeConverter()); foreach (var child in jObject["Bones"]) { FingerBone fingerBone = child.ToObject <FingerBone>(serializer); fingerBones.Add(fingerBone); } finger.Bones = fingerBones; return(finger); }
public static SideBone HumanoidSideBone(Finger fingerId, FingerBone fingerBoneId) { SideBone boneId = (SideBone)(((int)Tracking.SideBone.ThumbProximal - 1) + (int)fingerId * 4 + (int)fingerBoneId); return(boneId); }