Esempio n. 1
0
    [Fact] public void Div_Int()
    {
        Data_Generator dg     = new Data_Generator();
        Hand_Generator hg     = new Hand_Generator(dg);
        var            dat_j1 = hg.newJoints();
        var            dat_f  = dg.newInt(100);

        var exp_j = hg.newJoints();

        var mock_vh = new Mock <IVectorHelper>();

        mock_vh.Setup(m => m.divList(dat_j1.pinky, dat_f)).Returns(exp_j.pinky);
        mock_vh.Setup(m => m.divList(dat_j1.ring, dat_f)).Returns(exp_j.ring);
        mock_vh.Setup(m => m.divList(dat_j1.middle, dat_f)).Returns(exp_j.middle);
        mock_vh.Setup(m => m.divList(dat_j1.index, dat_f)).Returns(exp_j.index);
        mock_vh.Setup(m => m.divList(dat_j1.thumb, dat_f)).Returns(exp_j.thumb);
        mock_vh.Setup(m => m.div(dat_j1.palm, dat_f)).Returns(exp_j.palm);

        JointsHelper jh    = new JointsHelper(mock_vh.Object);
        var          act_j = jh.div(dat_j1, dat_f);

        mock_vh.Verify(m => m.divList(dat_j1.pinky, dat_f), Times.Once());
        mock_vh.Verify(m => m.divList(dat_j1.ring, dat_f), Times.Once());
        mock_vh.Verify(m => m.divList(dat_j1.middle, dat_f), Times.Once());
        mock_vh.Verify(m => m.divList(dat_j1.index, dat_f), Times.Once());
        mock_vh.Verify(m => m.divList(dat_j1.thumb, dat_f), Times.Once());
        mock_vh.Verify(m => m.div(dat_j1.palm, dat_f), Times.Once());

        test.jointsEqual(exp_j, act_j);
    }
Esempio n. 2
0
    [Fact] public void Add()
    {
        Data_Generator dg     = new Data_Generator();
        Hand_Generator hg     = new Hand_Generator(dg);
        var            dat_j1 = hg.newJoints();
        var            dat_j2 = hg.newJoints();

        var exp_j = hg.newJoints();

        var mock_vh = new Mock <IVectorHelper>();

        mock_vh.Setup(m => m.addList(dat_j1.pinky, dat_j2.pinky)).Returns(exp_j.pinky);
        mock_vh.Setup(m => m.addList(dat_j1.ring, dat_j2.ring)).Returns(exp_j.ring);
        mock_vh.Setup(m => m.addList(dat_j1.middle, dat_j2.middle)).Returns(exp_j.middle);
        mock_vh.Setup(m => m.addList(dat_j1.index, dat_j2.index)).Returns(exp_j.index);
        mock_vh.Setup(m => m.addList(dat_j1.thumb, dat_j2.thumb)).Returns(exp_j.thumb);
        mock_vh.Setup(m => m.add(dat_j1.palm, dat_j2.palm)).Returns(exp_j.palm);

        JointsHelper jh    = new JointsHelper(mock_vh.Object);
        var          act_j = jh.add(dat_j1, dat_j2);

        mock_vh.Verify(m => m.addList(dat_j1.pinky, dat_j2.pinky), Times.Once());
        mock_vh.Verify(m => m.addList(dat_j1.ring, dat_j2.ring), Times.Once());
        mock_vh.Verify(m => m.addList(dat_j1.middle, dat_j2.middle), Times.Once());
        mock_vh.Verify(m => m.addList(dat_j1.index, dat_j2.index), Times.Once());
        mock_vh.Verify(m => m.addList(dat_j1.thumb, dat_j2.thumb), Times.Once());
        mock_vh.Verify(m => m.add(dat_j1.palm, dat_j2.palm), Times.Once());

        test.jointsEqual(exp_j, act_j);
    }
Esempio n. 3
0
    [Fact] public void Pow()
    {
        Data_Generator dg      = new Data_Generator();
        Hand_Generator hg      = new Hand_Generator(dg);
        var            dat_j1  = hg.newJoints();
        var            exp_j   = hg.newJoints();
        var            mock_vh = new Mock <IVectorHelper>();

        mock_vh.Setup(m => m.powList(dat_j1.pinky, 2)).Returns(exp_j.pinky);
        mock_vh.Setup(m => m.powList(dat_j1.ring, 2)).Returns(exp_j.ring);
        mock_vh.Setup(m => m.powList(dat_j1.middle, 2)).Returns(exp_j.middle);
        mock_vh.Setup(m => m.powList(dat_j1.index, 2)).Returns(exp_j.index);
        mock_vh.Setup(m => m.powList(dat_j1.thumb, 2)).Returns(exp_j.thumb);
        mock_vh.Setup(m => m.pow(dat_j1.palm, 2)).Returns(exp_j.palm);

        JointsHelper jh    = new JointsHelper(mock_vh.Object);
        var          act_j = jh.pow(dat_j1, 2);

        mock_vh.Verify(m => m.powList(dat_j1.pinky, 2), Times.Once());
        mock_vh.Verify(m => m.powList(dat_j1.ring, 2), Times.Once());
        mock_vh.Verify(m => m.powList(dat_j1.middle, 2), Times.Once());
        mock_vh.Verify(m => m.powList(dat_j1.index, 2), Times.Once());
        mock_vh.Verify(m => m.powList(dat_j1.thumb, 2), Times.Once());
        mock_vh.Verify(m => m.pow(dat_j1.palm, 2), Times.Once());
        test.jointsEqual(act_j, exp_j);
    }
Esempio n. 4
0
    [Fact] public void HandToJoints()
    {
        Data_Generator  dg     = new Data_Generator();
        Hand_Generator  hg     = new Hand_Generator(dg);
        List <Vector[]> dat_vL = new List <Vector[]>()
        {
            dg.newVectors(5),
            dg.newVectors(5),
            dg.newVectors(5),
            dg.newVectors(5),
            dg.newVectors(5),
        };
        List <Finger> dat_fL   = hg.newFingerList(dat_vL);
        Hand          dat_hand = hg.newHand(dat_fL);

        Joints exp_joints = new Joints {
            pinky  = dat_vL[0],
            ring   = dat_vL[1],
            middle = dat_vL[2],
            index  = dat_vL[3],
            thumb  = dat_vL[4],
            palm   = dat_hand.PalmPosition
        };

        VectorHelper vh         = new VectorHelper();
        JointsHelper jh         = new JointsHelper(vh);
        Joints       act_joints = jh.handToJoints(dat_hand);

        test.jointsEqual(exp_joints, act_joints);
    }
Esempio n. 5
0
    [Fact] public void LowestJoint()
    {
        Data_Generator dg       = new Data_Generator();
        Hand_Generator hg       = new Hand_Generator(dg);
        Hand           dat_hand = hg.newHand(hg.newFingerList());

        Vector exp_joint = new Vector(-1, -1, -1);

        dat_hand.Fingers[4].bones[3].NextJoint = exp_joint;

        VectorHelper vh        = new VectorHelper();
        JointsHelper jh        = new JointsHelper(vh);
        Vector       act_joint = jh.lowestJoint(dat_hand);
    }
Esempio n. 6
0
    [Fact] public void FingerToVectors()
    {
        Data_Generator dg         = new Data_Generator();
        Hand_Generator hg         = new Hand_Generator(dg);
        Finger         inp_finger = hg.newFinger(dg.newVectors(5));

        Vector[] exp_vL = new Vector[] {
            inp_finger.bones[0].PrevJoint,
            inp_finger.bones[1].PrevJoint,
            inp_finger.bones[2].PrevJoint,
            inp_finger.bones[3].PrevJoint,
            inp_finger.bones[3].NextJoint,
        };

        VectorHelper vh = new VectorHelper();
        JointsHelper jh = new JointsHelper(vh);

        Vector[] act_vL = jh.fingerToVectors(inp_finger);

        test.vectorsEqual(exp_vL, act_vL);
    }
Esempio n. 7
0
    [Fact] public void Emit()
    {
        Data_Generator dg = new Data_Generator();
        Hand_Generator hg = new Hand_Generator(dg);

        VectorHelper vh = new VectorHelper();
        JointsHelper jh = new JointsHelper(vh);
        AmplitudeModulationEmitter mock_emitter = new AmplitudeModulationEmitter("MockDevice:U5;logfile=log.txt");

        var  j      = hg.newJoints();
        bool exp    = false;
        bool act    = false;
        var  haptic = new Haptic(jh, mock_emitter);
        var  point  = haptic.AquireTarget(j);
        var  points = new List <AmplitudeModulationControlPoint>();

        points.Add(point);
        exp = mock_emitter.update(points);
        act = haptic.Emit(points);

        Assert.Equal(exp, act);
    }
Esempio n. 8
0
    [Fact] public void MinMax()
    {
        Data_Generator dg = new Data_Generator();
        Hand_Generator hg = new Hand_Generator(dg);

        (Joints min, Joints max, Joints j)dat;
        dat.j   = hg.newJoints();
        dat.min = new Joints(dg.newMinVectors(5), dg.newMinVectors(5), dg.newMinVectors(5), dg.newMinVectors(5),
                             dg.newMinVectors(5), dg.newMinVector(), dg.newFloat(100));
        dat.max = new Joints(dg.newZeroVectors(5), dg.newZeroVectors(5), dg.newZeroVectors(5), dg.newZeroVectors(5),
                             dg.newZeroVectors(5), dg.newZeroVector(), dg.newFloat(100));

        (Joints min, Joints max)exp;
        exp.min = dat.min;
        exp.max = dat.j;

        var vH = new VectorHelper();
        var jH = new JointsHelper(vH);

        var act = jH.minMax(dat.min, dat.max, dat.j);

        test.jointsEqual(exp.min, act.min);
        test.jointsEqual(exp.max, act.max);
    }
Esempio n. 9
0
 public Haptic(JointsHelper hand, AmplitudeModulationEmitter emitter)
 {
     jh = hand;
     ee = emitter;
 }
Esempio n. 10
0
    public static void Main()
    {
        Thread newWindowThread = new Thread(new ThreadStart(() =>
        {
            // create and show the window
            App obj = new App();

            // start the Dispatcher processing
            System.Windows.Threading.Dispatcher.Run();
        }));

        newWindowThread.SetApartmentState(ApartmentState.STA);
        newWindowThread.IsBackground = true;
        newWindowThread.Start();

        while (!GBL.DONE_EDITING)
        {
            System.Threading.Thread.Sleep(1000);
        }

        // Connect to LeapMotion Controller
        Console.WriteLine("Initializing Leap...");
        var leapMotion = new Controller();

        do
        {
            System.Threading.Thread.Sleep(1000);
            Console.WriteLine(".");
        } while (!leapMotion.IsConnected);
        Console.WriteLine("Leap ready.");

        // Connect to UHDK5 ultrasonic emitters
        Console.WriteLine("Initializing UHDK5...");
        var uhdk5 = new AmplitudeModulationEmitter();

        Console.WriteLine("UHDK5 ready.");
        Console.WriteLine("Dog Friendly Mode: " + GBL.DOG_FRIENDLY);

        // Connect virtual MIDI ports
        Console.WriteLine("Initializing virtual MIDI ports...");
        MIDI.logging(MIDI.TE_VM_LOGGING_MISC | MIDI.TE_VM_LOGGING_RX | MIDI.TE_VM_LOGGING_TX);
        var leftManu  = new Guid("aa4e075f-3504-4aab-9b06-9a4104a91cf0");
        var leftProd  = new Guid("bb4e075f-3504-4aab-9b06-9a4104a91cf0");
        var leftMIDI  = new MIDI("Air Drums Left Hand", 65535, MIDI.TE_VM_FLAGS_PARSE_RX, ref leftManu, ref leftProd);
        var rightManu = new Guid("cc4e075f-3504-4aab-9b06-9a4104a91cf0");
        var rightProd = new Guid("dd4e075f-3504-4aab-9b06-9a4104a91cf0");
        var rightMIDI = new MIDI("Air Drums Right Hand", 65535, MIDI.TE_VM_FLAGS_PARSE_RX, ref rightManu, ref rightProd);

        Console.WriteLine("MIDI resources ready.");

        // Haptics resources
        var hapticTargets = new List <AmplitudeModulationControlPoint>();
        var hapticTimes   = new List <int>();
        var hapticVH      = new VectorHelper();
        var hapticJH      = new JointsHelper(hapticVH);
        var haptic        = new Haptic(hapticJH, uhdk5);

        // MIDI resources
        var leftComTable  = new Commands(true);
        var leftNotes     = new List <int>();
        var leftTimes     = new List <int>();
        var leftPort      = new Port(leftMIDI);
        var rightComTable = new Commands(false);
        var rightNotes    = new List <int>();
        var rightTimes    = new List <int>();
        var rightPort     = new Port(rightMIDI);

        // Classification resources
        var leftVH           = new VectorHelper();
        var leftJH           = new JointsHelper(leftVH);
        var leftStats        = new Stats(leftJH);
        var leftClassify     = new Classify(leftVH, leftStats);
        var leftQueues       = new Queues(leftJH);
        var leftDataManager  = new DataManager(leftQueues, true);
        var rightVH          = new VectorHelper();
        var rightJH          = new JointsHelper(rightVH);
        var rightStats       = new Stats(rightJH);
        var rightClassify    = new Classify(rightVH, rightStats);
        var rightQueues      = new Queues(rightJH);
        var rightDataManager = new DataManager(rightQueues, false);

        // Concurrency structures
        var leftFrameStream    = new ConcurrentQueue <Frame>();
        var leftCommandStream  = new ConcurrentQueue <int>();
        var rightFrameStream   = new ConcurrentQueue <Frame>();
        var rightCommandStream = new ConcurrentQueue <int>();
        var hapticStream       = new ConcurrentQueue <Joints>();

        // Processes
        var data         = new Proc_Data(leapMotion, leftFrameStream, rightFrameStream) as IProc;
        var leftGesture  = new Proc_Gesture(leftClassify, leftDataManager, leftVH, leftFrameStream, leftCommandStream, hapticStream) as IProc;
        var leftCommand  = new Proc_MIDI(leftPort, leftCommandStream, leftNotes, leftTimes, leftComTable) as IProc;
        var rightGesture = new Proc_Gesture(rightClassify, rightDataManager, rightVH, rightFrameStream, rightCommandStream, hapticStream) as IProc;
        var rightCommand = new Proc_MIDI(rightPort, rightCommandStream, rightNotes, rightTimes, rightComTable) as IProc;
        var haptics      = new Proc_Haptics(haptic, hapticStream, hapticTargets, hapticTimes) as IProc;

        // Instantiate threads with looped pipelines
        var dataThread         = new Thread(data.Loop);
        var leftGestureThread  = new Thread(leftGesture.Loop);
        var rightGestureThread = new Thread(rightGesture.Loop);
        var leftCommandThread  = new Thread(leftCommand.Loop);
        var rightCommandThread = new Thread(rightCommand.Loop);
        var hapticsThread      = new Thread(haptics.Loop);

        // Start threads
        dataThread.Start();
        leftGestureThread.Start();
        rightGestureThread.Start();
        leftCommandThread.Start();
        rightCommandThread.Start();
        hapticsThread.Start();
    }