public void removeTuioBlob(TuioBlob tblb)
 {
     lock (_lockObj)
     {
         _eventQueue.Enqueue(new TuioEvent(ETuioEventType.REMOVE_BLOB, tblb));
     }
 }
示例#2
0
 public void updateTuioBlob(TuioBlob b)
 {
     if (verbose)
     {
         Console.WriteLine("set blb " + b.BlobID + " (" + b.SessionID + ") " + b.X + " " + b.Y + " " + b.Angle + " " + b.Width + " " + b.Height + " " + b.Area + " " + b.MotionSpeed + " " + b.RotationSpeed + " " + b.MotionAccel + " " + b.RotationAccel);
     }
 }
 public void addTuioBlob(TuioBlob tblb)
 {
     lock (_lockObj)
     {
         _eventQueue.Enqueue(new TuioEvent(ETuioEventType.ADD_BLOB, tblb));
     }
 }
 public void updateTuioBlob(TuioBlob tblb)
 {
     lock (_lockObj)
     {
         _eventQueue.Enqueue(new TuioEvent(ETuioEventType.UPDATE_BLOB, tblb));
     }
 }
示例#5
0
 public void removeTuioBlob(TuioBlob b)
 {
     lock (blobSync)
     {
         blobList.Remove(b.SessionID);
     }
     //Debug.Log("del blb " + b.BlobID + " (" + b.SessionID + ")");
 }
示例#6
0
 public void addTuioBlob(TuioBlob b)
 {
     lock (blobSync)
     {
         blobList.Add(b.SessionID, b);
     }
     //Debug.Log("add blb " + b.BlobID + " (" + b.SessionID + ") " + b.X + " " + b.Y + " " + b.Angle + " " + b.Width + " " + b.Height + " " + b.Area);
 }
示例#7
0
 public void removeTuioBlob(TuioBlob b)
 {
     lock (blobList) {
         blobList.Remove(b.SessionID);
     }
     if (verbose)
     {
         Console.WriteLine("del blb " + b.BlobID + " (" + b.SessionID + ")");
     }
 }
示例#8
0
 public void addTuioBlob(TuioBlob b)
 {
     lock (blobList) {
         blobList.Add(b.SessionID, b);
     }
     if (verbose)
     {
         Console.WriteLine("add blb " + b.BlobID + " (" + b.SessionID + ") " + b.X + " " + b.Y + " " + b.Angle + " " + b.Width + " " + b.Height + " " + b.Area);
     }
 }
示例#9
0
        private void updateBlobProperties(TouchPoint touch, TuioBlob blob)
        {
            var props = touch.Properties;

            props["Angle"]                = blob.Angle;
            props["Width"]                = blob.Width;
            props["Height"]               = blob.Height;
            props["Area"]                 = blob.Area;
            props["RotationVelocity"]     = blob.RotationVelocity;
            props["RotationAcceleration"] = blob.RotationAcceleration;
        }
示例#10
0
 public void removeTuioBlob(TuioBlob b)
 {
 }
			public TuioEventBlobArgs(TuioBlob theTuioBlob)
			{
				tuioBlob = theTuioBlob;
			}
示例#12
0
 public void addTuioBlob(TuioBlob b)
 {
 }
示例#13
0
 public void updateTuioBlob(TuioBlob b)
 {
 }
示例#14
0
 public void addTuioBlob(TuioBlob tblb)
 {
     //Debugger.Break();
 }
示例#15
0
 public void addTuioBlob(TuioBlob tblb)
 {
     Console.WriteLine("add blb " + tblb.BlobID + " (" + tblb.SessionID + ") " + tblb.X + " " + tblb.Y + " " + tblb.Angle + " " + tblb.Width + " " + tblb.Height + " " + tblb.Area);
 }
示例#16
0
        //here we go, thats the method called by vvvv each frame
        //all data handling should be in here
        public void Evaluate(int SpreadMax)
        {
            //if any of the inputs has changed
            //recompute the outputs
            if (FTUIOPacketInput.PinIsChanged)
            {
                string currentPacket;
                FTUIOPacketInput.GetString(0, out currentPacket);
                if (currentPacket == "" || currentPacket == null)
                {
                    return;
                }
                int tuioPosition = currentPacket.IndexOf("#bundle");
                if (tuioPosition == -1)
                {
                    return;
                }


                while ((tuioPosition = currentPacket.IndexOf("#bundle")) >= 0)
                {
                    int    nextpos = currentPacket.IndexOf("#bundle", tuioPosition + 1);
                    string currentSeperatedPacket = "";
                    if (nextpos == -1)
                    {
                        currentSeperatedPacket = currentPacket;
                        currentPacket          = "";
                    }
                    else
                    {
                        currentSeperatedPacket = currentPacket.Substring(tuioPosition, nextpos - tuioPosition);
                        currentPacket          = currentPacket.Substring(nextpos);
                    }
                    OSC.NET.OSCPacket packet = OSC.NET.OSCPacket.Unpack(Encoding.Default.GetBytes(currentSeperatedPacket));
                    if (packet.IsBundle())
                    {
                        ArrayList messages = packet.Values;
                        for (int i = 0; i < messages.Count; i++)
                        {
                            FTuioClient.ProcessMessage((OSC.NET.OSCMessage)messages[i]);
                        }
                    }
                    else
                    {
                        FTuioClient.ProcessMessage((OSC.NET.OSCMessage)packet);
                    }
                }
            }
            List <TuioCursor> cursors = FTuioClient.getTuioCursors();
            List <TuioObject> objects = FTuioClient.getTuioObjects();
            List <TuioBlob>   blobs   = FTuioClient.getTuioBlobs();
            int slicecount            = cursors.Count + objects.Count + blobs.Count;

            FSessionIDOut.SliceCount            = slicecount;
            FClassIDOut.SliceCount              = slicecount;
            FUniqueIDOut.SliceCount             = slicecount;
            FPosXOut.SliceCount                 = slicecount;
            FPosYOut.SliceCount                 = slicecount;
            FWidthOut.SliceCount                = slicecount;
            FHeightOut.SliceCount               = slicecount;
            FAreaOut.SliceCount                 = slicecount;
            FAngleOut.SliceCount                = slicecount;
            FMovementXOut.SliceCount            = slicecount;
            FMovementYOut.SliceCount            = slicecount;
            FMotionAccelerationOut.SliceCount   = slicecount;
            FRotationAccelerationOut.SliceCount = slicecount;
            FMotionSpeedOut.SliceCount          = slicecount;
            FRotationSpeedOut.SliceCount        = slicecount;

            int curindex = 0;

            for (int i = 0; i < cursors.Count; i++)
            {
                TuioCursor cur = cursors[i];
                FSessionIDOut.SetValue(curindex, cur.getSessionID());
                FClassIDOut.SetValue(curindex, 0);
                FUniqueIDOut.SetValue(curindex, cur.getFingerID());
                FPosXOut.SetValue(curindex, cur.getPosition().getX() * 2 - 1);
                FPosYOut.SetValue(curindex, -cur.getPosition().getY() * 2 + 1);
                FAngleOut.SetValue(curindex, 0);
                FMovementXOut.SetValue(curindex, cur.getXSpeed());
                FMovementYOut.SetValue(curindex, cur.getYSpeed());
                FMotionAccelerationOut.SetValue(curindex, cur.getMotionAccel());
                FRotationAccelerationOut.SetValue(curindex, 0);
                FMotionSpeedOut.SetValue(curindex, cur.getMotionSpeed());
                FRotationSpeedOut.SetValue(curindex, 0);
                curindex++;
            }
            int objectOffset = 1000;

            for (int i = 0; i < objects.Count; i++)
            {
                TuioObject obj = objects[i];
                FSessionIDOut.SetValue(curindex, obj.getSessionID());
                FClassIDOut.SetValue(curindex, 1);
                FUniqueIDOut.SetValue(curindex, obj.getFiducialID() + objectOffset);
                FPosXOut.SetValue(curindex, obj.getPosition().getX() * 2 - 1);
                FPosYOut.SetValue(curindex, -obj.getPosition().getY() * 2 + 1);
                FAngleOut.SetValue(curindex, 1 - ((obj.getAngle()) / (Math.PI + Math.PI)));
                FMovementXOut.SetValue(curindex, obj.getXSpeed());
                FMovementYOut.SetValue(curindex, obj.getYSpeed());
                FMotionAccelerationOut.SetValue(curindex, obj.getMotionAccel());
                FRotationAccelerationOut.SetValue(curindex, obj.getRotationAccel());
                FMotionSpeedOut.SetValue(curindex, obj.getMotionSpeed());
                FRotationSpeedOut.SetValue(curindex, obj.getRotationSpeed());
                curindex++;
            }

            int blobOffset = 2000;

            for (int i = 0; i < blobs.Count; i++)
            {
                TuioBlob blb = blobs[i];
                FSessionIDOut.SetValue(curindex, blb.getSessionID());
                FClassIDOut.SetValue(curindex, 2);
                FUniqueIDOut.SetValue(curindex, blb.getBlobID() + blobOffset);
                FPosXOut.SetValue(curindex, blb.getPosition().getX() * 2 - 1);
                FPosYOut.SetValue(curindex, -blb.getPosition().getY() * 2 + 1);
                FWidthOut.SetValue(curindex, blb.getWidth());
                FHeightOut.SetValue(curindex, blb.getHeight());
                FAreaOut.SetValue(curindex, blb.getArea());
                FAngleOut.SetValue(curindex, 1 - ((blb.getAngle()) / (Math.PI + Math.PI)));
                FMovementXOut.SetValue(curindex, blb.getXSpeed());
                FMovementYOut.SetValue(curindex, blb.getYSpeed());
                FMotionAccelerationOut.SetValue(curindex, blb.getMotionAccel());
                FRotationAccelerationOut.SetValue(curindex, blb.getRotationAccel());
                FMotionSpeedOut.SetValue(curindex, blb.getMotionSpeed());
                FRotationSpeedOut.SetValue(curindex, blb.getRotationSpeed());
                curindex++;
            }
        }
示例#17
0
        /// <inheritdoc />
        public override void CancelTouch(TouchPoint touch, bool @return)
        {
            base.CancelTouch(touch, @return);
            lock (this)
            {
                TuioCursor cursor = null;
                foreach (var touchPoint in cursorToInternalId)
                {
                    if (touchPoint.Value.Id == touch.Id)
                    {
                        cursor = touchPoint.Key;
                        break;
                    }
                }
                if (cursor != null)
                {
                    cancelTouch(touch.Id);
                    if (@return)
                    {
                        cursorToInternalId[cursor] = beginTouch(touch.Position, touch.Tags, false);
                    }
                    else
                    {
                        cursorToInternalId.Remove(cursor);
                    }
                    return;
                }

                TuioBlob blob = null;
                foreach (var touchPoint in blobToInternalId)
                {
                    if (touchPoint.Value.Id == touch.Id)
                    {
                        blob = touchPoint.Key;
                        break;
                    }
                }
                if (blob != null)
                {
                    cancelTouch(touch.Id);
                    if (@return)
                    {
                        var t = beginTouch(touch.Position, touch.Tags, false);
                        t.Properties           = touch.Properties;
                        blobToInternalId[blob] = t;
                    }
                    else
                    {
                        blobToInternalId.Remove(blob);
                    }
                    return;
                }

                TuioObject obj = null;
                foreach (var touchPoint in objectToInternalId)
                {
                    if (touchPoint.Value.Id == touch.Id)
                    {
                        obj = touchPoint.Key;
                        break;
                    }
                }
                if (obj != null)
                {
                    cancelTouch(touch.Id);
                    if (@return)
                    {
                        var t = beginTouch(touch.Position, touch.Tags, false);
                        t.Properties            = touch.Properties;
                        objectToInternalId[obj] = t;
                    }
                    else
                    {
                        objectToInternalId.Remove(obj);
                    }
                }
            }
        }
示例#18
0
 public void updateTuioBlob(TuioBlob b)
 {
     //Debug.Log("set blb " + b.BlobID + " (" + b.SessionID + ") " + b.X + " " + b.Y + " " + b.Angle + " " + b.Width + " " + b.Height + " " + b.Area + " " + b.MotionSpeed + " " + b.RotationSpeed + " " + b.MotionAccel + " " + b.RotationAccel);
 }
示例#19
0
        public void ProcessMessage(OscMessage message)
        {
            if (message.Address != "/tuio/2Dblb")
            {
                return;
            }

            var command = message.Data[0].ToString();

            switch (command)
            {
            case "set":
                if (message.Data.Count < 13)
                {
                    return;
                }

                var id                   = (int)message.Data[1];
                var xPos                 = (float)message.Data[2];
                var yPos                 = (float)message.Data[3];
                var angle                = (float)message.Data[4];
                var width                = (float)message.Data[5];
                var height               = (float)message.Data[6];
                var area                 = (float)message.Data[7];
                var velocityX            = (float)message.Data[8];
                var velocityY            = (float)message.Data[9];
                var rotationVelocity     = (float)message.Data[10];
                var acceleration         = (float)message.Data[11];
                var rotationAcceleration = (float)message.Data[12];

                TuioBlob blob;
                if (!blobs.TryGetValue(id, out blob))
                {
                    blob = new TuioBlob(id);
                }
                blob.Update(xPos, yPos, angle, width, height, area, velocityX, velocityY, rotationVelocity, acceleration, rotationAcceleration);
                updatedBlobs.Add(blob);
                break;

            case "alive":
                var total = message.Data.Count;
                for (var i = 1; i < total; i++)
                {
                    addedBlobs.Add((int)message.Data[i]);
                }
                foreach (KeyValuePair <int, TuioBlob> value in blobs)
                {
                    if (!addedBlobs.Contains(value.Key))
                    {
                        removedBlobs.Add(value.Key);
                    }
                    addedBlobs.Remove(value.Key);
                }
                break;

            case "fseq":
                if (message.Data.Count < 2)
                {
                    return;
                }
                FrameNumber = (int)message.Data[1];
                var count = updatedBlobs.Count;
                for (var i = 0; i < count; i++)
                {
                    var updatedBlob = updatedBlobs[i];
                    if (addedBlobs.Contains(updatedBlob.Id) && !blobs.ContainsKey(updatedBlob.Id))
                    {
                        blobs.Add(updatedBlob.Id, updatedBlob);
                        if (BlobAdded != null)
                        {
                            BlobAdded(this, new TuioBlobEventArgs(updatedBlob));
                        }
                    }
                    else
                    {
                        if (BlobUpdated != null)
                        {
                            BlobUpdated(this, new TuioBlobEventArgs(updatedBlob));
                        }
                    }
                }
                count = removedBlobs.Count;
                for (var i = 0; i < count; i++)
                {
                    var blobId = removedBlobs[i];
                    blob = blobs[blobId];
                    blobs.Remove(blobId);
                    if (BlobRemoved != null)
                    {
                        BlobRemoved(this, new TuioBlobEventArgs(blob));
                    }
                }

                addedBlobs.Clear();
                removedBlobs.Clear();
                updatedBlobs.Clear();
                break;
            }
        }
 public void addTuioBlob(TuioBlob tblb)
 {
 }
示例#21
0
 public void updateTuioBlob(TuioBlob tblb)
 {
     //Do nothing
 }
示例#22
0
 public void removeTuioBlob(TuioBlob tblb)
 {
     //Do nothing
 }
示例#23
0
        /// <inheritdoc />
        public override bool CancelPointer(Pointer pointer, bool shouldReturn)
        {
            base.CancelPointer(pointer, shouldReturn);
            lock (this)
            {
                if (pointer.Type == Pointer.PointerType.Touch)
                {
                    TuioCursor cursor = null;
                    foreach (var touchPoint in cursorToInternalId)
                    {
                        if (touchPoint.Value.Id == pointer.Id)
                        {
                            cursor = touchPoint.Key;
                            break;
                        }
                    }
                    if (cursor != null)
                    {
                        cancelPointer(pointer);
                        if (shouldReturn)
                        {
                            cursorToInternalId[cursor] = internalReturnTouch(pointer as TouchPointer);
                        }
                        else
                        {
                            cursorToInternalId.Remove(cursor);
                        }
                        return(true);
                    }
                    return(false);
                }

                TuioObject obj = null;
                foreach (var touchPoint in objectToInternalId)
                {
                    if (touchPoint.Value.Id == pointer.Id)
                    {
                        obj = touchPoint.Key;
                        break;
                    }
                }
                if (obj != null)
                {
                    cancelPointer(pointer);
                    if (shouldReturn)
                    {
                        objectToInternalId[obj] = internalReturnObject(pointer as ObjectPointer, pointer.Position);
                    }
                    else
                    {
                        objectToInternalId.Remove(obj);
                    }
                    return(true);
                }

                TuioBlob blob = null;
                foreach (var touchPoint in blobToInternalId)
                {
                    if (touchPoint.Value.Id == pointer.Id)
                    {
                        blob = touchPoint.Key;
                        break;
                    }
                }
                if (blob != null)
                {
                    cancelPointer(pointer);
                    if (shouldReturn)
                    {
                        blobToInternalId[blob] = internalReturnObject(pointer as ObjectPointer, pointer.Position);
                    }
                    else
                    {
                        blobToInternalId.Remove(blob);
                    }
                    return(true);
                }

                return(false);
            }
        }
 public void removeTuioBlob(TuioBlob tblb)
 {
 }
示例#25
0
 private void updateBlobProperties(ObjectPointer obj, TuioBlob target)
 {
     obj.Width  = target.Width;
     obj.Height = target.Height;
     obj.Angle  = target.Angle;
 }
示例#26
0
 public TuioBlobEventArgs(TuioBlob blob)
 {
     Blob = blob;
 }
 public void updateTuioBlob(TuioBlob tblb)
 {
 }
示例#28
0
 public void removeTuioBlob(TuioBlob tblb)
 {
     Console.WriteLine("del blb " + tblb.BlobID + " (" + tblb.SessionID + ")");
 }