276 lines
7.9 KiB
C#
276 lines
7.9 KiB
C#
#if !PICO_OPENXR_SDK
|
||
/*******************************************************************************
|
||
Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
|
||
|
||
NOTICE:All information contained herein is, and remains the property of
|
||
PICO Technology Co., Ltd. The intellectual and technical concepts
|
||
contained herein are proprietary to PICO Technology Co., Ltd. and may be
|
||
covered by patents, patents in process, and are protected by trade secret or
|
||
copyright law. Dissemination of this information or reproduction of this
|
||
material is strictly forbidden unless prior written permission is obtained from
|
||
PICO Technology Co., Ltd.
|
||
*******************************************************************************/
|
||
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
namespace Unity.XR.PXR
|
||
{
|
||
[Serializable]
|
||
public class PXR_HandPoseConfig : ScriptableObject
|
||
{
|
||
[DisplayOnly]
|
||
public ShapesRecognizer shapesRecognizer;
|
||
[DisplayOnly]
|
||
public BonesRecognizer bonesRecognizer;
|
||
[DisplayOnly]
|
||
public TransRecognizer transRecognizer;
|
||
}
|
||
|
||
[Serializable]
|
||
public class ShapesRecognizer
|
||
{
|
||
public Finger thumb = new Finger(HandFinger.Thumb);
|
||
public Finger index = new Finger(HandFinger.Index);
|
||
public Finger middle = new Finger(HandFinger.Middle);
|
||
public Finger ring = new Finger(HandFinger.Ring);
|
||
public Finger pinky = new Finger(HandFinger.Pinky);
|
||
public float holdDuration = 0.09f;
|
||
[Serializable]
|
||
public class Finger
|
||
{
|
||
[HideInInspector]
|
||
public HandFinger handFinger;
|
||
public Flexion flexion;
|
||
public Curl curl;
|
||
public Abduction abduction;
|
||
public FingerConfigs fingerConfigs;
|
||
|
||
public Finger(HandFinger finger)
|
||
{
|
||
handFinger = finger;
|
||
flexion = Flexion.Any;
|
||
curl = Curl.Any;
|
||
abduction = Abduction.Any;
|
||
fingerConfigs = new FingerConfigs(finger);
|
||
}
|
||
}
|
||
[Serializable]
|
||
public class FingerConfigs
|
||
{
|
||
public RangeConfigs flexionConfigs;
|
||
public RangeConfigs curlConfigs;
|
||
public RangeConfigsAbduction abductionConfigs;
|
||
|
||
public FingerConfigs(HandFinger finger)
|
||
{
|
||
flexionConfigs = new RangeConfigs(flexionMin, flexionMax, defaultFlexionWidth);
|
||
if (finger == HandFinger.Thumb)
|
||
{
|
||
curlConfigs = new RangeConfigs(curlThumbMin, curlThumbMax, defaultCurlWidth);
|
||
abductionConfigs = new RangeConfigsAbduction(abductionThumbMid, abductionThumbWidth);
|
||
}
|
||
else
|
||
{
|
||
curlConfigs = new RangeConfigs(curlMin, curlMax, defaultCurlWidth);
|
||
abductionConfigs = new RangeConfigsAbduction(abductionMid, abductionWidth);
|
||
}
|
||
}
|
||
}
|
||
|
||
public enum ShapeType
|
||
{
|
||
flexion,
|
||
curl,
|
||
abduction
|
||
}
|
||
|
||
public enum Flexion
|
||
{
|
||
Any,
|
||
Open,
|
||
Close,
|
||
//Custom
|
||
}
|
||
|
||
public enum Curl
|
||
{
|
||
Any,
|
||
Open,
|
||
Close,
|
||
//Custom
|
||
}
|
||
|
||
public enum Abduction
|
||
{
|
||
Any,
|
||
Open,
|
||
Close,
|
||
}
|
||
[Serializable]
|
||
public class RangeConfigs
|
||
{
|
||
public float min;
|
||
public float max;
|
||
public float width;
|
||
public RangeConfigs(float n, float m, float w)
|
||
{
|
||
min = n;
|
||
max = m;
|
||
width =w;
|
||
}
|
||
}
|
||
[Serializable]
|
||
public class RangeConfigsAbduction
|
||
{
|
||
public float mid;
|
||
public float width;
|
||
public RangeConfigsAbduction(float m, float w)
|
||
{
|
||
mid = m;
|
||
width = w;
|
||
}
|
||
}
|
||
|
||
public const float defaultFlexionWidth = 10f;
|
||
|
||
public const float flexionThumbOpenMin = 155f;
|
||
public const float flexionThumbOpenMax = 180f;
|
||
public const float flexionThumbCloseMin = 90f;
|
||
public const float flexionThumbCloseMax = 120f;
|
||
|
||
public const float flexionOpenMin = 144f;
|
||
public const float flexionOpenMax = 180f;
|
||
public const float flexionCloseMin = 90f;
|
||
public const float flexionCloseMax = 126f;
|
||
public const float flexionMin = 90f;
|
||
public const float flexionMax = 180f;
|
||
|
||
public const float defaultCurlWidth = 20f;
|
||
|
||
public const float curlThumbOpenMin = 90f;
|
||
public const float curlThumbOpenMax = 180f;
|
||
public const float curlThumbCloseMin = 45f;
|
||
public const float curlThumbCloseMax = 90f;
|
||
public const float curlThumbMin = 45f;
|
||
public const float curlThumbMax = 180f;
|
||
|
||
public const float curlOpenMin = 107f;
|
||
public const float curlOpenMax = 180f;
|
||
public const float curlCloseMin = 0f;
|
||
public const float curlCloseMax = 73f;
|
||
public const float curlMin = 0f;
|
||
public const float curlMax = 180f;
|
||
|
||
public const float abductionThumbMid = 13f;
|
||
public const float abductionThumbWidth = 6f;
|
||
|
||
public const float abductionMid = 10f;
|
||
public const float abductionWidth = 6f;
|
||
public const float abductionMin = 0f;
|
||
public const float abductionMax = 90f;
|
||
}
|
||
|
||
[Serializable]
|
||
public class BonesRecognizer
|
||
{
|
||
public List<BonesGroup> Bones = new List<BonesGroup>();
|
||
|
||
public float holdDuration = 0.022f;
|
||
[Serializable]
|
||
public class BonesGroup
|
||
{
|
||
[LabelAttribute("Joint 1")]
|
||
public HandBones bone1 = HandBones.Wrist;
|
||
[LabelAttribute("Joint 2")]
|
||
public HandBones bone2 = HandBones.Wrist;
|
||
public float distance = 0.025f;
|
||
[LabelAttribute("Margin")]
|
||
public float thresholdWidth = 0.003f;
|
||
|
||
[HideInInspector]
|
||
public bool activeState;
|
||
}
|
||
public enum HandBones
|
||
{
|
||
Palm = 0,
|
||
Wrist = 1,
|
||
|
||
Thumb_Metacarpal = 2,
|
||
Thumb_Proximal = 3,
|
||
Thumb_Distal = 4,
|
||
Thumb_Tip = 5,
|
||
|
||
Index_Metacarpal = 6,
|
||
Index_Proximal = 7,
|
||
Index_Intermediate = 8,
|
||
Index_Distal = 9,
|
||
Index_Tip = 10,
|
||
|
||
Middle_Metacarpal = 11,
|
||
Middle_Proximal = 12,
|
||
Middle_Intermediate = 13,
|
||
Middle_Distal = 14,
|
||
Middle_Tip = 15,
|
||
|
||
Ring_Metacarpal = 16,
|
||
Ring_Proximal = 17,
|
||
Ring_Intermediate = 18,
|
||
Ring_Distal = 19,
|
||
Ring_Tip = 20,
|
||
|
||
Little_Metacarpal = 21,
|
||
Little_Proximal = 22,
|
||
Little_Intermediate = 23,
|
||
Little_Distal = 24,
|
||
Little_Tip = 25
|
||
}
|
||
}
|
||
|
||
[Serializable]
|
||
public class TransRecognizer
|
||
{
|
||
public TrackAxis trackAxis;
|
||
public SpaceType spaceType;
|
||
public TrackTarget trackTarget;
|
||
|
||
public enum SpaceType
|
||
{
|
||
WorldSpace,
|
||
LocalXY,
|
||
LocalYZ,
|
||
LocalXZ
|
||
}
|
||
|
||
public enum TrackAxis
|
||
{
|
||
Fingers, Palm, Thumb
|
||
}
|
||
|
||
public enum TrackTarget
|
||
{
|
||
TowardsFace,
|
||
AwayFromFace,
|
||
WorldUp,
|
||
WorldDown,
|
||
}
|
||
|
||
public float angleThreshold = 35f;
|
||
public float thresholdWidth = 10f;
|
||
public float holdDuration = 0.022f;
|
||
}
|
||
|
||
public class DisplayOnly : PropertyAttribute { }
|
||
public class LabelAttribute : PropertyAttribute
|
||
{
|
||
public string name;
|
||
public LabelAttribute(string name)
|
||
{
|
||
this.name = name;
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
|