Inheritance: HandModel
Example #1
0
    public void setUp()
    {
        getScripts();
        leftHand.SetActive(true);

        RiggedHand script = leftHand.GetComponent <RiggedHand>();

        script.handModel = transformation;

        if (stimulus == StimulusType.st)
        {
            handPoints.emptyPath();

            handPoints.path       = PathManager.generateNewPath(transformation == 2);
            handPoints.firstPoint = 0;
            handPoints.displayPath(transformation);

            isClose    = false;
            pathIsOver = false;
        }

        /*
         * GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
         * sphere.transform.position = pos.position ;
         * sphere.transform.parent = pos.transform;
         * sphere.transform.localScale = new Vector3(0.001f, 0.001f, 0.001f);
         */
    }
Example #2
0
 // Use this for initialization
 void Start()
 {
     maoGrafica       = this.GetComponent <RiggedHand> ();
     posicaoDedos [0] = posicaoDedosDedao;
     posicaoDedos [1] = posicaoDedosIndicador;
     posicaoDedos [2] = posicaoDedosMedio;
     posicaoDedos [3] = posicaoDedosAnelar;
     posicaoDedos [4] = posicaoDedosMinimo;
 }
Example #3
0
    void Update()
    {
        RiggedHand leftRig  = leftHand.GetComponent <RiggedHand>();
        RiggedHand rightRig = rightHand.GetComponent <RiggedHand>();

        BuildRectangle(leftRig, rightRig);

        if (Input.GetKey("g"))
        {
            EnablePhysics();
        }
        if (Input.GetKey("r"))
        {
            Reset();
        }
    }
Example #4
0
    public void FixedUpdate()
    {
        if (graphicsEnabled)
        {
            UpdateHandRepresentations();

            if (ikActive)
            {
                if (leftActive && leftHand != null)
                {
                    RiggedHand l = leftHand as RiggedHand;

                    vrIK.solver.leftArm.IKPosition     = leftHand.GetPalmPosition();
                    vrIK.solver.leftArm.IKRotation     = leftHand.GetPalmRotation() * l.Reorientation();
                    vrIK.solver.leftArm.positionWeight = 1.0f;
                    vrIK.solver.leftArm.rotationWeight = 0.0f;
                    leftTransform.Enabled = true;
                }
                else
                {
                    vrIK.solver.leftArm.positionWeight = 0.0f;
                    vrIK.solver.leftArm.rotationWeight = 0.0f;
                    leftTransform.Enabled = false;
                }

                if (rightActive && rightHand != null)
                {
                    RiggedHand r = rightHand as RiggedHand;

                    vrIK.solver.rightArm.IKPosition     = rightHand.GetPalmPosition();
                    vrIK.solver.rightArm.IKRotation     = rightHand.GetPalmRotation() * r.Reorientation();
                    vrIK.solver.rightArm.positionWeight = 1.0f;
                    vrIK.solver.rightArm.rotationWeight = 0.0f;
                    rightTransform.Enabled = true;
                }
                else
                {
                    vrIK.solver.rightArm.positionWeight = 0.0f;
                    vrIK.solver.rightArm.rotationWeight = 0.0f;
                    rightTransform.Enabled = false;
                }
            }
        }
    }
Example #5
0
 public PinchGesture(RiggedHand hand)
 {
     this.hand = hand;
 }
Example #6
0
    public Vector3 center    = Vector3.zero;    // pointing center

    public TriangleGesture(RiggedHand left, RiggedHand right)
    {
        this.left  = left;
        this.right = right;
    }
Example #7
0
    void BuildRectangle(RiggedHand leftRig, RiggedHand rightRig)
    {
        Vector3 leftIndex  = leftRig.fingers[1].GetTipPosition();
        Vector3 leftThumb  = leftRig.fingers[0].GetTipPosition();
        Vector3 leftMiddle = leftRig.fingers[2].GetTipPosition();
        Vector3 leftRing   = leftRig.fingers[3].GetTipPosition();
        Vector3 leftPinkey = leftRig.fingers[4].GetTipPosition();

        Vector3 rightIndex  = rightRig.fingers[1].GetTipPosition();
        Vector3 rightThumb  = rightRig.fingers[0].GetTipPosition();
        Vector3 rightMiddle = rightRig.fingers[2].GetTipPosition();
        Vector3 rightRing   = rightRig.fingers[3].GetTipPosition();
        Vector3 rightPinkey = rightRig.fingers[4].GetTipPosition();

        bool firstMove = true;

        if (VectorEqual(leftIndex, leftThumb) && VectorEqual(leftIndex, leftMiddle) &&
            VectorEqual(leftMiddle, leftRing) && VectorEqual(leftRing, leftPinkey) &&
            VectorEqual(rightIndex, rightThumb) && VectorEqual(rightIndex, rightMiddle) &&
            VectorEqual(rightMiddle, rightRing) && VectorEqual(rightRing, rightPinkey))
        {
            Vector3 midpoint         = (rightIndex + leftIndex) / 2;
            Vector3 diff             = rightIndex - midpoint;
            Vector3 projectedVectorZ = Vector3.ProjectOnPlane(diff, Vector3.up);
            float   angleZ           = (diff.y / Math.Abs(diff.y)) * Vector3.Angle(diff, projectedVectorZ);

            Vector3 projectedVectorX = Vector3.ProjectOnPlane(diff, Vector3.back);
            float   angleX           = -(diff.z / Math.Abs(diff.z)) * Vector3.Angle(diff, projectedVectorX);

            if (!float.IsNaN(angleX) && !float.IsNaN(angleZ))
            {
                pubX = angleX;
                pubZ = angleZ;
                this.gameObject.transform.localRotation = Quaternion.Euler(0, angleX + lastX, angleZ + lastZ);
            }

            firstMove = false;
            finalMove = false;
        }

        else if ((VectorEqual(leftThumb, leftIndex) || VectorEqualRight(rightThumb, rightIndex)) &&
                 VectorClose(leftIndex, rightIndex) && leftHand.activeSelf && rightHand.activeSelf)
        {
            if (creating == false)
            {
                creating = true;
                if (cube != null)
                {
                    objects.Add(cube);
                }
                SnapCollisions();
                if (type == "cube" && color == "brick")
                {
                    cube = Instantiate(cubeBrickPrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }
                else if (type == "cube" && color == "red")
                {
                    cube = Instantiate(cubeRedPrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }
                else if (type == "cube" && color == "yellow")
                {
                    cube = Instantiate(cubeYellowPrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }
                else if (type == "cube" && color == "blue")
                {
                    cube = Instantiate(cubeBluePrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }
                else if (type == "sphere" && color == "brick")
                {
                    cube = Instantiate(sphereBrickPrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }
                else if (type == "sphere" && color == "red")
                {
                    cube = Instantiate(sphereRedPrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }
                else if (type == "sphere" && color == "yellow")
                {
                    cube = Instantiate(sphereYellowPrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }
                else if (type == "sphere" && color == "blue")
                {
                    cube = Instantiate(sphereBluePrefab, this.gameObject.transform);
                    cube.transform.localScale = new Vector3(.1f, .1f, .1f);
                }

                cube.transform.rotation = Quaternion.Euler(0, 0, 0);
            }
        }
        else if (VectorEqual(leftThumb, leftIndex) && VectorEqualRight(rightThumb, rightIndex) &&
                 !VectorEqual(leftIndex, leftMiddle))
        {
            creating = false;
            rotating = true;
        }
        else if ((!VectorEqual(leftThumb, leftIndex) && !VectorEqualRight(rightThumb, rightIndex)))
        {
            creating = false;
            rotating = false;
        }

        if (creating)
        {
            Vector3 midpoint = (rightIndex + leftIndex) / 2;
            Vector3 diff     = rightIndex - leftIndex;
            cube.transform.position   = midpoint;
            cube.transform.localScale = new Vector3(diff.x, diff.y, diff.z);
        }
        else if (rotating)
        {
            Vector3 midpoint = (rightIndex + leftIndex) / 2;
            Vector3 diff     = rightIndex - midpoint;
            cube.transform.position = midpoint;
            Vector3 projectedVectorZ = Vector3.ProjectOnPlane(diff, Vector3.up);
            float   angleZ           = (diff.y / Math.Abs(diff.y)) * Vector3.Angle(diff, projectedVectorZ);

            Vector3 projectedVectorX = Vector3.ProjectOnPlane(diff, Vector3.back);
            float   angleX           = -(diff.z / Math.Abs(diff.z)) * Vector3.Angle(diff, projectedVectorX);

            Vector3 projectedVectorY = Vector3.ProjectOnPlane(diff, Vector3.up);
            float   angleY           = (diff.y / Math.Abs(diff.y)) * Vector3.Angle(diff, projectedVectorY);
            if (!float.IsNaN(angleX) && !float.IsNaN(angleZ))
            {
                cube.transform.rotation = Quaternion.Euler(0, angleX, angleZ);
            }
        }
        if (firstMove && !finalMove)
        {
            Vector3 midpoint         = (rightIndex + leftIndex) / 2;
            Vector3 diff             = rightIndex - midpoint;
            Vector3 projectedVectorZ = Vector3.ProjectOnPlane(diff, Vector3.up);
            float   angleZ           = (diff.y / Math.Abs(diff.y)) * Vector3.Angle(diff, projectedVectorZ);

            Vector3 projectedVectorX = Vector3.ProjectOnPlane(diff, Vector3.back);
            float   angleX           = -(diff.z / Math.Abs(diff.z)) * Vector3.Angle(diff, projectedVectorX);

            lastZ    += pubZ;
            lastX    += pubX;
            finalMove = true;
        }
    }