public void removeTuioCursor(TuioCursor c) { lock(cursorSync) { cursorList.Remove(c.SessionID); } if (verbose) Console.WriteLine("del cur "+c.CursorID + " ("+c.SessionID+")"); }
public void addTuioCursor(TuioCursor c) { lock(cursorSync) { cursorList.Add(c.SessionID,c); } if (verbose) Console.WriteLine("add cur "+c.CursorID + " ("+c.SessionID+") "+c.X+" "+c.Y); }
public void newCursor(TuioCursor cursor) { ibheTuioEvent newEvent = new ibheTuioEvent(cursor.getSessionID()); newEvent.tuioPosition = new Vector2(cursor.getX(),(1.0f - cursor.getY())); //switching y and z (y is up axis by default in unity) newEvent.screenPosition = new Vector3(cursor.getX() * cameraPixelWidth, 0,(1.0f - cursor.getY()) * cameraPixelHeight); newEvent.lastScreenPosition = newEvent.screenPosition; newEvent.eventState = mtEventState.Began; newEvent.xPos = cursor.getHXpos() * cameraPixelWidth; newEvent.yPos = (1.0f - cursor.getHYpos()) * cameraPixelHeight; newEvent.width = cursor.getWidth(); newEvent.height = cursor.getHeight(); if( cursor.getHeightPoints() != null) newEvent.heights = cursor.getHeightPoints().ToArray(); float min = 250.0F; for(int i=0; i < newEvent.heights.Length; i++) { if(((newEvent.heights[i] / 255.0F)*-4.0F) < min) min = (newEvent.heights[i] / 255.0F) * -4.0F; } newEvent.minHeight = min; if (activeEvents.ContainsKey(cursor.getSessionID())) { //Already on list, remove old - add new activeEvents.Remove(cursor.getSessionID()); } activeEvents.Add( cursor.getSessionID(), newEvent ); // queue it up for processing lock (eventQueueLock) eventQueue.Add(newEvent); didChange = true; }
/** * Returns the TuioCursor corresponding to the provided Session ID * or NULL if the Session ID does not refer to an active TuioCursor * * @return an active TuioCursor corresponding to the provided Session ID or NULL */ public TuioCursor getTuioCursor(long s_id) { TuioCursor tcursor = null; cursorList.TryGetValue(s_id, out tcursor); return(tcursor); }
public void removeTuioCursor(TuioCursor c) { TouchInfo info = MakeInfo(c, TouchAction2.Up); RemoveInactiveTouchPoints(); UpdateActiveTouchPoint(info); CallDelegates(c); }
internal void EnqueueContact(TuioCursor cursor, ContactState state) { lock (contactsQueue) { Contact contact = new TuioContact(cursor, state, monitorSize); //Trace.WriteLine(contact.Position.ToString()); contactsQueue.Enqueue(contact); } }
/** * Returns the TuioCursor corresponding to the provided Session ID * or NULL if the Session ID does not refer to an active TuioCursor * * @return an active TuioCursor corresponding to the provided Session ID or NULL */ public TuioCursor getTuioCursor(long s_id) { TuioCursor tcursor = null; lock (cursorSync) { cursorList.TryGetValue(s_id, out tcursor); } return(tcursor); }
public TuioContact(TuioCursor cursor, ContactState state, System.Drawing.Size monitorSize) : base(cursor.getFingerID(), state, new Point(0, 0), 20, 20) { float x = cursor.getScreenX(monitorSize.Width); float y = cursor.getScreenY(monitorSize.Height); Position = new Point(x, y); Orientation = 0; }
public virtual void cursorUp(TuioCursor cursor) { // find the matching event object, set the state to 'ended' // and remove it from our actives if (!activeEvents.ContainsKey(cursor.getSessionID())) return; BBTouchEvent anEvent = activeEvents[cursor.getSessionID()]; anEvent.eventState = BBTouchEventState.Ended; lock (eventQueueLock) eventQueue.Add(anEvent); activeEvents.Remove( cursor.getSessionID() ); }
public virtual void cursorMove(TuioCursor cursor) { // find the matching event object, set th state to 'moved' // and update it with the new position info if (!activeEvents.ContainsKey(cursor.getSessionID())) return; BBTouchEvent anEvent = activeEvents[cursor.getSessionID()]; updateEvent(anEvent,cursor); anEvent.eventState = BBTouchEventState.Moved; lock (eventQueueLock) eventQueue.Add(anEvent); }
public void addTuioCursor(TuioCursor tuioCursor) { this.Dispatcher.Invoke( DispatcherPriority.Normal, (Action)(() => { BSQSim.AddTouchDevice((int)tuioCursor.getSessionID(), new Point(tuioCursor.getScreenX(Convert.ToInt32(DISPLAY_W)), tuioCursor.getScreenY(Convert.ToInt32(DISPLAY_H)))); })); }
public void removeCursor(TuioCursor cursor) { if (!activeEvents.ContainsKey(cursor.getSessionID())) return; mtEvent anEvent = activeEvents[cursor.getSessionID()]; anEvent.eventState = mtEventState.Ended; lock (eventQueueLock) { eventQueue.Add(anEvent); } activeEvents.Remove( cursor.getSessionID() ); didChange = true; }
public void addTuioCursor(TuioCursor c) { TouchInfo info = MakeInfo(c, TouchAction2.Down); //UIElement source = PerformHitTest(info.Position); RemoveInactiveTouchPoints(); UpdateActiveTouchPoint(info); foreach (var p in ActiveTouchPoints.Values) { p.UpdateSource(); } CallDelegates(c); }
public void updateCursor(TuioCursor cursor) { if (!activeEvents.ContainsKey(cursor.getSessionID())) return; mtEvent anEvent = activeEvents[cursor.getSessionID()]; anEvent.lastScreenPosition = anEvent.screenPosition; anEvent.screenPosition = new Vector3(cursor.getX() * cameraPixelWidth, 0,(1.0f - cursor.getY()) * cameraPixelHeight); anEvent.tuioPosition = new Vector2(cursor.getX(),(1.0f - cursor.getY())); anEvent.eventState = mtEventState.Moved; lock (eventQueueLock) eventQueue.Add(anEvent); didChange = true; }
public void newCursor(TuioCursor cursor) { mtEvent newEvent = new mtEvent(cursor.getSessionID()); newEvent.tuioPosition = new Vector2(cursor.getX(),(1.0f - cursor.getY())); //switching y and z (y is up axis by default in unity) newEvent.screenPosition = new Vector3(cursor.getX() * cameraPixelWidth, 0,(1.0f - cursor.getY()) * cameraPixelHeight); newEvent.lastScreenPosition = newEvent.screenPosition; newEvent.eventState = mtEventState.Began; if (activeEvents.ContainsKey(cursor.getSessionID())) { //Already on list, remove old - add new activeEvents.Remove(cursor.getSessionID()); } activeEvents.Add( cursor.getSessionID(), newEvent ); // queue it up for processing lock (eventQueueLock) eventQueue.Add(newEvent); didChange = true; }
public TuioContact(TuioCursor cursor, ContactState state, System.Drawing.Size monitorSize) : base(cursor.getFingerID(), state, new Point(0, 0), 20, 20) { float x, y; //Edit by Wander if (secondaryScreen == null) { x = cursor.getScreenX(monitorSize.Width); y = cursor.getScreenY(monitorSize.Height); } else { x = cursor.getX() * secondaryScreen.WorkingArea.Width + secondaryScreen.WorkingArea.Left; y = cursor.getY() * secondaryScreen.WorkingArea.Height + secondaryScreen.WorkingArea.Top; } Position = new Point(x, y); Orientation = 0; }
// Cursor down is for new touch events. we take the TUIO cursor object and convert it // into a touch event, and add it to our active list of events public virtual void cursorDown(TuioCursor cursor) { // first, make a new BBTouchEvent, tag it with the unique touch id BBTouchEvent newEvent = new BBTouchEvent(cursor.getSessionID()); // set the initial information newEvent.screenPosition = new Vector3(cursor.getX() * cameraPixelWidth,(1.0f - cursor.getY()) * cameraPixelHeight,0.3f); newEvent.eventState = BBTouchEventState.Began; // set all the rest of the info updateEvent(newEvent,cursor); // add it to our active event dictionary so we can retireve it based on it's unique ID // some times badness happens and we get an error adding one here for some reason // it should not ever be the case that the ID is already there. // if it is, then we need to behave if (activeEvents.ContainsKey(cursor.getSessionID())) { // then something is not right.. remove the old one and add a new one activeEvents.Remove(cursor.getSessionID()); } activeEvents.Add( cursor.getSessionID(), newEvent ); // queue it up for processing lock (eventQueueLock) eventQueue.Add(newEvent); }
/** * This constructor takes the atttibutes of the provided TuioCursor * and assigs these values to the newly created TuioCursor. * * @param tcur the TuioCursor to assign */ public TuioCursor(TuioCursor tcur) : base(tcur) { cursor_id = tcur.getCursorID(); }
/** * The OSC callback method where all TUIO messages are received and decoded * and where the TUIO event callbacks are dispatched * * @param message the received OSC message */ private void processMessage(OSCMessage message) { string address = message.Address; ArrayList args = message.Values; string command = (string)args[0]; if (address == "/tuio/2Dobj") { if (command == "set") { long s_id = (int)args[1]; int f_id = (int)args[2]; float xpos = (float)args[3]; float ypos = (float)args[4]; float angle = (float)args[5]; float xspeed = (float)args[6]; float yspeed = (float)args[7]; float rspeed = (float)args[8]; float maccel = (float)args[9]; float raccel = (float)args[10]; lock (objectSync) { if (!objectList.ContainsKey(s_id)) { TuioObject addObject = new TuioObject(s_id, f_id, xpos, ypos, angle); frameObjects.Add(addObject); } else { TuioObject tobj = objectList[s_id]; if (tobj == null) { return; } if ((tobj.getX() != xpos) || (tobj.getY() != ypos) || (tobj.getAngle() != angle) || (tobj.getXSpeed() != xspeed) || (tobj.getYSpeed() != yspeed) || (tobj.getRotationSpeed() != rspeed) || (tobj.getMotionAccel() != maccel) || (tobj.getRotationAccel() != raccel)) { TuioObject updateObject = new TuioObject(s_id, f_id, xpos, ypos, angle); updateObject.update(xpos, ypos, angle, xspeed, yspeed, rspeed, maccel, raccel); frameObjects.Add(updateObject); } } } } else if (command == "alive") { newObjectList.Clear(); for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newObjectList.Add(s_id); // reduce the object list to the lost objects if (aliveObjectList.Contains(s_id)) { aliveObjectList.Remove(s_id); } } // remove the remaining objects lock (objectSync) { for (int i = 0; i < aliveObjectList.Count; i++) { long s_id = aliveObjectList[i]; TuioObject removeObject = objectList[s_id]; removeObject.remove(currentTime); frameObjects.Add(removeObject); } } } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if (fseq > currentFrame) { currentTime = TuioTime.getSessionTime(); } if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } else if ((TuioTime.getSessionTime().getTotalMilliseconds() - currentTime.getTotalMilliseconds()) > 100) { currentTime = TuioTime.getSessionTime(); } if (!lateFrame) { IEnumerator <TuioObject> frameEnum = frameObjects.GetEnumerator(); while (frameEnum.MoveNext()) { TuioObject tobj = frameEnum.Current; switch (tobj.getTuioState()) { case TuioObject.TUIO_REMOVED: TuioObject removeObject = tobj; removeObject.remove(currentTime); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.removeTuioObject(removeObject); } } lock (objectSync) { objectList.Remove(removeObject.getSessionID()); } break; case TuioObject.TUIO_ADDED: TuioObject addObject = new TuioObject(currentTime, tobj.getSessionID(), tobj.getSymbolID(), tobj.getX(), tobj.getY(), tobj.getAngle()); lock (objectSync) { objectList.Add(addObject.getSessionID(), addObject); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioObject(addObject); } } break; default: TuioObject updateObject = getTuioObject(tobj.getSessionID()); if ((tobj.getX() != updateObject.getX() && tobj.getXSpeed() == 0) || (tobj.getY() != updateObject.getY() && tobj.getYSpeed() == 0)) { updateObject.update(currentTime, tobj.getX(), tobj.getY(), tobj.getAngle()); } else { updateObject.update(currentTime, tobj.getX(), tobj.getY(), tobj.getAngle(), tobj.getXSpeed(), tobj.getYSpeed(), tobj.getRotationSpeed(), tobj.getMotionAccel(), tobj.getRotationAccel()); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioObject(updateObject); } } break; } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(new TuioTime(currentTime)); } } List <long> buffer = aliveObjectList; aliveObjectList = newObjectList; // recycling the List newObjectList = buffer; } frameObjects.Clear(); } } else if (address == "/tuio/2Dcur" || address == "/tuio/2Dcur source ccv@localhost") { if (command == "set") { long s_id = (int)args[1]; float xpos = (float)args[2]; float ypos = (float)args[3]; float xspeed = (float)args[4]; float yspeed = (float)args[5]; float maccel = (float)args[6]; //~ Debug.Log("Cursor - id: " + s_id); lock (cursorList) { if (!cursorList.ContainsKey(s_id)) { TuioCursor addCursor = new TuioCursor(s_id, -1, xpos, ypos); frameCursors.Add(addCursor); } else { TuioCursor tcur = (TuioCursor)cursorList[s_id]; if (tcur == null) { return; } if ((tcur.getX() != xpos) || (tcur.getY() != ypos) || (tcur.getXSpeed() != xspeed) || (tcur.getYSpeed() != yspeed) || (tcur.getMotionAccel() != maccel)) { TuioCursor updateCursor = new TuioCursor(s_id, tcur.getCursorID(), xpos, ypos); updateCursor.update(xpos, ypos, xspeed, yspeed, maccel); frameCursors.Add(updateCursor); } } } //experimental contour data (by Rasmus H. - www.schnitzel.dk) } else if (command == "contour") { long s_id = (int)args[1]; int m_length = (int)args[2]; //~ Debug.Log("Contour - id: " + s_id + " Lenght: " + m_length); if (m_length > 0) { lock (cursorList) { List <TuioPoint> contr = new List <TuioPoint>(); for (int i = 3; i + 2 <= m_length + 3; i += 2) { float xpos = (float)args[i]; float ypos = (float)args[i + 1]; contr.Add(new TuioPoint(xpos, ypos)); } if (!cursorList.ContainsKey(s_id)) { //no cursor with that id so we return return; } else { TuioCursor tcur = (TuioCursor)cursorList[s_id]; if (tcur == null) { return; } TuioCursor updateCursor = new TuioCursor(tcur); updateCursor.update(tcur, contr); frameCursors.Add(updateCursor); } } } //experimental height data (by Rasmus H. - www.schnitzel.dk) } else if (command == "height") { long s_id = (int)args[1]; float xpos = (float)args[2]; float ypos = (float)args[3]; int xwidth = (int)args[4]; int yheight = (int)args[5]; int hpoints = (int)args[6]; //Debug.Log("Contour - id: " + s_id + " x: " + xpos + " y: " + ypos + " width: " + xwidth + " height: " + yheight + " hpoints: " + hpoints ); lock (cursorList) { List <float> heightp = new List <float>(); for (int i = 7; i < hpoints + 7; i++) { heightp.Add((float)args[i]); } if (!cursorList.ContainsKey(s_id)) { //no cursor with that id so we return return; } else { TuioCursor tcur = (TuioCursor)cursorList[s_id]; if (tcur == null) { return; } TuioCursor updateCursor = new TuioCursor(tcur); updateCursor.update(tcur, xpos, ypos, xwidth, yheight, heightp); frameCursors.Add(updateCursor); } } } else if (command == "alive") { newCursorList.Clear(); for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newCursorList.Add(s_id); // reduce the cursor list to the lost cursors if (aliveCursorList.Contains(s_id)) { aliveCursorList.Remove(s_id); } } // remove the remaining cursors lock (cursorSync) { for (int i = 0; i < aliveCursorList.Count; i++) { long s_id = aliveCursorList[i]; if (!cursorList.ContainsKey(s_id)) { continue; } TuioCursor removeCursor = cursorList[s_id]; removeCursor.remove(currentTime); frameCursors.Add(removeCursor); } } } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if (fseq > currentFrame) { currentTime = TuioTime.getSessionTime(); } if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } else if ((TuioTime.getSessionTime().getTotalMilliseconds() - currentTime.getTotalMilliseconds()) > 100) { currentTime = TuioTime.getSessionTime(); } if (!lateFrame) { IEnumerator <TuioCursor> frameEnum = frameCursors.GetEnumerator(); while (frameEnum.MoveNext()) { TuioCursor tcur = frameEnum.Current; switch (tcur.getTuioState()) { case TuioCursor.TUIO_REMOVED: TuioCursor removeCursor = tcur; removeCursor.remove(currentTime); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.removeTuioCursor(removeCursor); } } lock (cursorSync) { cursorList.Remove(removeCursor.getSessionID()); if (removeCursor.getCursorID() == maxCursorID) { maxCursorID = -1; if (cursorList.Count > 0) { IEnumerator <KeyValuePair <long, TuioCursor> > clist = cursorList.GetEnumerator(); while (clist.MoveNext()) { int f_id = clist.Current.Value.getCursorID(); if (f_id > maxCursorID) { maxCursorID = f_id; } } List <TuioCursor> freeCursorBuffer = new List <TuioCursor>(); IEnumerator <TuioCursor> flist = freeCursorList.GetEnumerator(); while (flist.MoveNext()) { TuioCursor testCursor = flist.Current; if (testCursor.getCursorID() < maxCursorID) { freeCursorBuffer.Add(testCursor); } } freeCursorList = freeCursorBuffer; } else { freeCursorList.Clear(); } } else if (removeCursor.getCursorID() < maxCursorID) { freeCursorList.Add(removeCursor); } } break; case TuioCursor.TUIO_ADDED: TuioCursor addCursor; lock (cursorSync) { int c_id = cursorList.Count; if ((cursorList.Count <= maxCursorID) && (freeCursorList.Count > 0)) { TuioCursor closestCursor = freeCursorList[0]; IEnumerator <TuioCursor> testList = freeCursorList.GetEnumerator(); while (testList.MoveNext()) { TuioCursor testCursor = testList.Current; if (testCursor.getDistance(tcur) < closestCursor.getDistance(tcur)) { closestCursor = testCursor; } } c_id = closestCursor.getCursorID(); freeCursorList.Remove(closestCursor); } else { maxCursorID = c_id; } addCursor = new TuioCursor(currentTime, tcur.getSessionID(), c_id, tcur.getX(), tcur.getY()); cursorList.Add(addCursor.getSessionID(), addCursor); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioCursor(addCursor); } } break; default: TuioCursor updateCursor = getTuioCursor(tcur.getSessionID()); if ((tcur.getX() != updateCursor.getX() && tcur.getXSpeed() == 0) || (tcur.getY() != updateCursor.getY() && tcur.getYSpeed() == 0)) { updateCursor.update(currentTime, tcur.getX(), tcur.getY()); } else { updateCursor.update(currentTime, tcur.getX(), tcur.getY(), tcur.getXSpeed(), tcur.getYSpeed(), tcur.getMotionAccel()); } //rasmus edit if (tcur.getContour() != null) { updateCursor.update(updateCursor, tcur.getContour()); } if (tcur.getHeightPoints() != null) { updateCursor.update(updateCursor, tcur.getHXpos(), tcur.getHYpos(), tcur.getWidth(), tcur.getHeight(), tcur.getHeightPoints()); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioCursor(updateCursor); } } break; } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(new TuioTime(currentTime)); } } List <long> buffer = aliveCursorList; aliveCursorList = newCursorList; // recycling the List newCursorList = buffer; } frameCursors.Clear(); } } }
/** * The OSC callback method where all TUIO messages are received and decoded * and where the TUIO event callbacks are dispatched * * @param message the received OSC message */ private void processMessage(OSCMessage message) { string address = message.Address; ArrayList args = message.Values; string command = (string)args[0]; if (address == "/tuio/2Dobj") { if (command == "set") { if (currentTime.getTotalMilliseconds() == 0) { currentTime = TuioTime.getSessionTime(); } long s_id = (int)args[1]; int f_id = (int)args[2]; float x = (float)args[3]; float y = (float)args[4]; float a = (float)args[5]; float X = (float)args[6]; float Y = (float)args[7]; float A = (float)args[8]; float m = (float)args[9]; float r = (float)args[10]; if (!objectList.ContainsKey(s_id)) { TuioObject addObject = new TuioObject(currentTime, s_id, f_id, x, y, a); objectList.Add(s_id, addObject); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioObject(addObject); } } } else { TuioObject updateObject = objectList[s_id]; if ((updateObject.getX() != x) || (updateObject.getY() != y) || (updateObject.getAngle() != a)) { TuioObject tobj = new TuioObject(currentTime, s_id, updateObject.getSymbolID(), x, y, a); tobj.update(currentTime, x, y, a, X, Y, A, m, r); frameObjects.Add(tobj); /*updateObject.update(currentTime,x,y,a,X,Y,A,m,r); * for (int i=0;i<listenerList.Count;i++) { * TuioListener listener = (TuioListener)listenerList[i]; * if (listener!=null) listener.updateTuioObject(updateObject); * }*/ //objectList[s_id] = tobj; } } } else if (command == "alive") { for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newObjectList.Add(s_id); // reduce the object list to the lost objects if (aliveObjectList.Contains(s_id)) { aliveObjectList.Remove(s_id); } } // remove the remaining objects for (int i = 0; i < aliveObjectList.Count; i++) { long s_id = aliveObjectList[i]; TuioObject removeObject = objectList[s_id]; removeObject.remove(currentTime); objectList.Remove(s_id); for (int j = 0; j < listenerList.Count; j++) { TuioListener listener = (TuioListener)listenerList[j]; if (listener != null) { listener.removeTuioObject(removeObject); } } } List <long> buffer = aliveObjectList; aliveObjectList = newObjectList; // recycling of the List newObjectList = buffer; newObjectList.Clear(); } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } if (!lateFrame) { IEnumerator <TuioObject> frameEnum = frameObjects.GetEnumerator(); while (frameEnum.MoveNext()) { TuioObject tobj = frameEnum.Current; TuioObject updateObject = getTuioObject(tobj.getSessionID()); updateObject.update(currentTime, tobj.getX(), tobj.getY(), tobj.getAngle(), tobj.getXSpeed(), tobj.getYSpeed(), tobj.getRotationSpeed(), tobj.getMotionAccel(), tobj.getRotationAccel()); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioObject(updateObject); } } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(currentTime); } } if (fseq > 0) { currentTime.reset(); } } frameObjects.Clear(); } } else if (address == "/tuio/2Dcur") { if (command == "set") { if (currentTime.getTotalMilliseconds() == 0) { currentTime = TuioTime.getSessionTime(); } long s_id = (int)args[1]; float x = (float)args[2]; float y = (float)args[3]; float X = (float)args[4]; float Y = (float)args[5]; float m = (float)args[6]; if (!cursorList.ContainsKey(s_id)) { int f_id = cursorList.Count; if (cursorList.Count <= maxFingerID) { TuioCursor closestCursor = freeCursorList[0]; IEnumerator <TuioCursor> testList = freeCursorList.GetEnumerator(); while (testList.MoveNext()) { TuioCursor testCursor = testList.Current; if (testCursor.getDistance(x, y) < closestCursor.getDistance(x, y)) { closestCursor = testCursor; } } f_id = closestCursor.getCursorID(); freeCursorList.Remove(closestCursor); } else { maxFingerID = f_id; } TuioCursor addCursor = new TuioCursor(currentTime, s_id, f_id, x, y); cursorList.Add(s_id, addCursor); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioCursor(addCursor); } } } else { TuioCursor updateCursor = (TuioCursor)cursorList[s_id]; if ((updateCursor.getX() != x) || (updateCursor.getY() != y)) { TuioCursor tcur = new TuioCursor(currentTime, s_id, updateCursor.getCursorID(), x, y); tcur.update(currentTime, x, y, X, Y, m); frameCursors.Add(tcur); /*updateCursor.update(currentTime,x,y,X,Y,m); * for (int i=0;i<listenerList.Count;i++) { * TuioListener listener = (TuioListener)listenerList[i]; * if (listener!=null) listener.updateTuioCursor(updateCursor); * }*/ //cursorList[s_id] = tcur; } } } else if (command == "alive") { for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newCursorList.Add(s_id); // reduce the cursor list to the lost cursors if (aliveCursorList.Contains(s_id)) { aliveCursorList.Remove(s_id); } } // remove the remaining cursors for (int i = 0; i < aliveCursorList.Count; i++) { long s_id = aliveCursorList[i]; if (!cursorList.ContainsKey(s_id)) { continue; } TuioCursor removeCursor = cursorList[s_id]; int c_id = removeCursor.getCursorID(); cursorList.Remove(s_id); removeCursor.remove(currentTime); if (c_id == maxFingerID) { maxFingerID = -1; if (cursorList.Count > 0) { IEnumerator <KeyValuePair <long, TuioCursor> > clist = cursorList.GetEnumerator(); while (clist.MoveNext()) { int f_id = clist.Current.Value.getCursorID(); if (f_id > maxFingerID) { maxFingerID = f_id; } } List <TuioCursor> freeCursorBuffer = new List <TuioCursor>(); IEnumerator <TuioCursor> flist = freeCursorList.GetEnumerator(); while (flist.MoveNext()) { TuioCursor testCursor = flist.Current; if (testCursor.getCursorID() < maxFingerID) { freeCursorBuffer.Add(testCursor); } } freeCursorList = freeCursorBuffer; } } else if (c_id < maxFingerID) { freeCursorList.Add(removeCursor); } for (int j = 0; j < listenerList.Count; j++) { TuioListener listener = (TuioListener)listenerList[j]; if (listener != null) { listener.removeTuioCursor(removeCursor); } } } List <long> buffer = aliveCursorList; aliveCursorList = newCursorList; // recycling of the List newCursorList = buffer; newCursorList.Clear(); } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } if (!lateFrame) { IEnumerator <TuioCursor> frameEnum = frameCursors.GetEnumerator(); while (frameEnum.MoveNext()) { TuioCursor tcur = frameEnum.Current; TuioCursor updateCursor = getTuioCursor(tcur.getSessionID()); updateCursor.update(currentTime, tcur.getX(), tcur.getY(), tcur.getXSpeed(), tcur.getYSpeed(), tcur.getMotionAccel()); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioCursor(updateCursor); } } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(currentTime); } } if (fseq > 0) { currentTime.reset(); } } frameCursors.Clear(); } } }
/** * The OSC callback method where all TUIO messages are received and decoded * and where the TUIO event callbacks are dispatched * * @param message the received OSC message */ private void processMessage(OSCMessage message) { string address = message.Address; ArrayList args = message.Values; string command = (string)args[0]; if (address == "/tuio/2Dobj") { if (command == "set") { long s_id = (int)args[1]; int f_id = (int)args[2]; float xpos = (float)args[3]; float ypos = (float)args[4]; float angle = (float)args[5]; float xspeed = (float)args[6]; float yspeed = (float)args[7]; float rspeed = (float)args[8]; float maccel = (float)args[9]; float raccel = (float)args[10]; lock (objectSync) { if (!objectList.ContainsKey(s_id)) { TuioObject addObject = new TuioObject(s_id, f_id, xpos, ypos, angle); frameObjects.Add(addObject); } else { TuioObject tobj = objectList[s_id]; if (tobj == null) { return; } if ((tobj.getX() != xpos) || (tobj.getY() != ypos) || (tobj.getAngle() != angle) || (tobj.getXSpeed() != xspeed) || (tobj.getYSpeed() != yspeed) || (tobj.getRotationSpeed() != rspeed) || (tobj.getMotionAccel() != maccel) || (tobj.getRotationAccel() != raccel)) { TuioObject updateObject = new TuioObject(s_id, f_id, xpos, ypos, angle); updateObject.update(xpos, ypos, angle, xspeed, yspeed, rspeed, maccel, raccel); frameObjects.Add(updateObject); } } } } else if (command == "alive") { newObjectList.Clear(); for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newObjectList.Add(s_id); // reduce the object list to the lost objects if (aliveObjectList.Contains(s_id)) { aliveObjectList.Remove(s_id); } } // remove the remaining objects lock (objectSync) { for (int i = 0; i < aliveObjectList.Count; i++) { long s_id = aliveObjectList[i]; TuioObject removeObject = objectList[s_id]; removeObject.remove(currentTime); frameObjects.Add(removeObject); } } } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if (fseq > currentFrame) { currentTime = TuioTime.getSessionTime(); } if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } else if ((TuioTime.getSessionTime().getTotalMilliseconds() - currentTime.getTotalMilliseconds()) > 100) { currentTime = TuioTime.getSessionTime(); } if (!lateFrame) { IEnumerator <TuioObject> frameEnum = frameObjects.GetEnumerator(); while (frameEnum.MoveNext()) { TuioObject tobj = frameEnum.Current; switch (tobj.getTuioState()) { case TuioObject.TUIO_REMOVED: TuioObject removeObject = tobj; removeObject.remove(currentTime); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.removeTuioObject(removeObject); } } lock (objectSync) { objectList.Remove(removeObject.getSessionID()); } break; case TuioObject.TUIO_ADDED: TuioObject addObject = new TuioObject(currentTime, tobj.getSessionID(), tobj.getSymbolID(), tobj.getX(), tobj.getY(), tobj.getAngle()); lock (objectSync) { objectList.Add(addObject.getSessionID(), addObject); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioObject(addObject); } } break; default: TuioObject updateObject = getTuioObject(tobj.getSessionID()); if ((tobj.getX() != updateObject.getX() && tobj.getXSpeed() == 0) || (tobj.getY() != updateObject.getY() && tobj.getYSpeed() == 0)) { updateObject.update(currentTime, tobj.getX(), tobj.getY(), tobj.getAngle()); } else { updateObject.update(currentTime, tobj.getX(), tobj.getY(), tobj.getAngle(), tobj.getXSpeed(), tobj.getYSpeed(), tobj.getRotationSpeed(), tobj.getMotionAccel(), tobj.getRotationAccel()); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioObject(updateObject); } } break; } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(new TuioTime(currentTime)); } } List <long> buffer = aliveObjectList; aliveObjectList = newObjectList; // recycling the List newObjectList = buffer; } frameObjects.Clear(); } } else if (address == "/tuio/2Dcur") { if (command == "set") { long s_id = (int)args[1]; float xpos = (float)args[2]; float ypos = (float)args[3]; float xspeed = (float)args[4]; float yspeed = (float)args[5]; float maccel = (float)args[6]; lock (cursorList) { if (!cursorList.ContainsKey(s_id)) { TuioCursor addCursor = new TuioCursor(s_id, -1, xpos, ypos); frameCursors.Add(addCursor); } else { TuioCursor tcur = (TuioCursor)cursorList[s_id]; if (tcur == null) { return; } if ((tcur.getX() != xpos) || (tcur.getY() != ypos) || (tcur.getXSpeed() != xspeed) || (tcur.getYSpeed() != yspeed) || (tcur.getMotionAccel() != maccel)) { TuioCursor updateCursor = new TuioCursor(s_id, tcur.getCursorID(), xpos, ypos); updateCursor.update(xpos, ypos, xspeed, yspeed, maccel); frameCursors.Add(updateCursor); } } } } else if (command == "alive") { newCursorList.Clear(); for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newCursorList.Add(s_id); // reduce the cursor list to the lost cursors if (aliveCursorList.Contains(s_id)) { aliveCursorList.Remove(s_id); } } // remove the remaining cursors lock (cursorSync) { for (int i = 0; i < aliveCursorList.Count; i++) { long s_id = aliveCursorList[i]; if (!cursorList.ContainsKey(s_id)) { continue; } TuioCursor removeCursor = cursorList[s_id]; removeCursor.remove(currentTime); frameCursors.Add(removeCursor); } } } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if (fseq > currentFrame) { currentTime = TuioTime.getSessionTime(); } if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } else if ((TuioTime.getSessionTime().getTotalMilliseconds() - currentTime.getTotalMilliseconds()) > 100) { currentTime = TuioTime.getSessionTime(); } if (!lateFrame) { IEnumerator <TuioCursor> frameEnum = frameCursors.GetEnumerator(); while (frameEnum.MoveNext()) { TuioCursor tcur = frameEnum.Current; switch (tcur.getTuioState()) { case TuioCursor.TUIO_REMOVED: TuioCursor removeCursor = tcur; removeCursor.remove(currentTime); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.removeTuioCursor(removeCursor); } } lock (cursorSync) { cursorList.Remove(removeCursor.getSessionID()); if (removeCursor.getCursorID() == maxCursorID) { maxCursorID = -1; if (cursorList.Count > 0) { IEnumerator <KeyValuePair <long, TuioCursor> > clist = cursorList.GetEnumerator(); while (clist.MoveNext()) { int f_id = clist.Current.Value.getCursorID(); if (f_id > maxCursorID) { maxCursorID = f_id; } } List <TuioCursor> freeCursorBuffer = new List <TuioCursor>(); IEnumerator <TuioCursor> flist = freeCursorList.GetEnumerator(); while (flist.MoveNext()) { TuioCursor testCursor = flist.Current; if (testCursor.getCursorID() < maxCursorID) { freeCursorBuffer.Add(testCursor); } } freeCursorList = freeCursorBuffer; } else { freeCursorList.Clear(); } } else if (removeCursor.getCursorID() < maxCursorID) { freeCursorList.Add(removeCursor); } } break; case TuioCursor.TUIO_ADDED: TuioCursor addCursor; lock (cursorSync) { int c_id = cursorList.Count; if ((cursorList.Count <= maxCursorID) && (freeCursorList.Count > 0)) { TuioCursor closestCursor = freeCursorList[0]; IEnumerator <TuioCursor> testList = freeCursorList.GetEnumerator(); while (testList.MoveNext()) { TuioCursor testCursor = testList.Current; if (testCursor.getDistance(tcur) < closestCursor.getDistance(tcur)) { closestCursor = testCursor; } } c_id = closestCursor.getCursorID(); freeCursorList.Remove(closestCursor); } else { maxCursorID = c_id; } addCursor = new TuioCursor(currentTime, tcur.getSessionID(), c_id, tcur.getX(), tcur.getY()); cursorList.Add(addCursor.getSessionID(), addCursor); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioCursor(addCursor); } } break; default: TuioCursor updateCursor = getTuioCursor(tcur.getSessionID()); if ((tcur.getX() != updateCursor.getX() && tcur.getXSpeed() == 0) || (tcur.getY() != updateCursor.getY() && tcur.getYSpeed() == 0)) { updateCursor.update(currentTime, tcur.getX(), tcur.getY()); } else { updateCursor.update(currentTime, tcur.getX(), tcur.getY(), tcur.getXSpeed(), tcur.getYSpeed(), tcur.getMotionAccel()); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioCursor(updateCursor); } } break; } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(new TuioTime(currentTime)); } } List <long> buffer = aliveCursorList; aliveCursorList = newCursorList; // recycling the List newCursorList = buffer; } frameCursors.Clear(); } } }
public void updateTuioCursor(TuioCursor c) { if (verbose) Console.WriteLine("set cur "+c.getCursorID() + " ("+c.getSessionID()+") "+c.getX()+" "+c.getY()+" "+c.getMotionSpeed()+" "+c.getMotionAccel()); }
public void addTuioCursor(TuioCursor c) { lock(cursorSync) { cursorList.Add(c.getSessionID(),c); } if (verbose) Console.WriteLine("add cur "+c.getCursorID() + " ("+c.getSessionID()+") "+c.getX()+" "+c.getY()); }
public void updateTuioCursor(TuioCursor tcur) { Console.WriteLine("set cur "+tcur.CursorID + " ("+tcur.SessionID+") "+tcur.X+" "+tcur.Y+" "+tcur.MotionSpeed+" "+tcur.MotionAccel); }
/** * <summary> * This constructor takes the atttibutes of the provided TuioCursor * and assigs these values to the newly created TuioCursor.</summary> * * <param name="tcur">the TuioCursor to assign</param> */ public TuioCursor(TuioCursor tcur) : base(tcur) { cursor_id = tcur.CursorID; }
public void removeTuioCursor(TuioCursor c) { }
public void RemoveTuioCursor(TuioCursor tuioCursor) { _refreshTimer.Stop(); int pid = tuioCursor.getCursorID(); int i = _pointerTouchInfos.FindIndex(pti => pti.PointerInfo.PointerId == pid); if (i != -1) { PointerTouchInfo pointerTouchInfo = _pointerTouchInfos[i]; pointerTouchInfo.PointerInfo.PointerFlags = PointerFlags.UP; _pointerTouchInfos[i] = pointerTouchInfo; Trace.WriteLine(string.Format("del cur {0} ({1})", pid, tuioCursor.getSessionID()), "TUIO"); } }
public void AddTuioCursor(TuioCursor tuioCursor) { _refreshTimer.Stop(); int pid = tuioCursor.getCursorID(); int i = _pointerTouchInfos.FindIndex(pti => pti.PointerInfo.PointerId == pid); if (i != -1) { _pointerTouchInfos.RemoveAt(i); } int x = (int)((tuioCursor.getX() * (_screenRect.Width + _calibrationBuffer.Width)) + _calibrationBuffer.Left + _screenRect.Left); int y = (int)((tuioCursor.getY() * (_screenRect.Height + _calibrationBuffer.Height)) + _calibrationBuffer.Top + _screenRect.Top); _pointerTouchInfos.Add ( new PointerTouchInfo() { TouchFlags = TouchFlags.NONE, Orientation = TOUCH_ORIENTATION, Pressure = TOUCH_PRESSURE, TouchMasks = TouchMask.CONTACTAREA | TouchMask.ORIENTATION | TouchMask.PRESSURE, PointerInfo = new PointerInfo { PointerInputType = PointerInputType.TOUCH, PointerFlags = PointerFlags.DOWN | PointerFlags.INRANGE | ((this.IsContactEnabled) ? PointerFlags.INCONTACT : PointerFlags.NONE), PtPixelLocation = new PointerTouchPoint { X = x, Y = y }, PointerId = (uint)pid }, ContactArea = new ContactArea { Left = x - CONTACT_AREA_RADIUS, Right = x + CONTACT_AREA_RADIUS, Top = y - CONTACT_AREA_RADIUS, Bottom = y + CONTACT_AREA_RADIUS } } ); Trace.WriteLine(string.Format("add cur {0} ({1}) {2} {3}", pid, tuioCursor.getSessionID(), x, y), "TUIO"); }
/** * <summary> * The OSC callback method where all TUIO messages are received and decoded * and where the TUIO event callbacks are dispatched</summary> * <param name="message">the received OSC message</param> */ private void processMessage(OSCMessage message) { string address = message.Address; ArrayList args = message.Values; string command = (string)args[0]; if (address == "/tuio/2Dobj") { if (command == "set") { long s_id = (int)args[1]; int f_id = (int)args[2]; float xpos = (float)args[3]; float ypos = (float)args[4]; float angle = (float)args[5]; float xspeed = (float)args[6]; float yspeed = (float)args[7]; float rspeed = (float)args[8]; float maccel = (float)args[9]; float raccel = (float)args[10]; lock (objectSync) { if (!objectList.ContainsKey(s_id)) { TuioObject addObject = new TuioObject(s_id, f_id, xpos, ypos, angle); frameObjects.Add(addObject); } else { TuioObject tobj = objectList[s_id]; if (tobj == null) { return; } if ((tobj.X != xpos) || (tobj.Y != ypos) || (tobj.Angle != angle) || (tobj.XSpeed != xspeed) || (tobj.YSpeed != yspeed) || (tobj.RotationSpeed != rspeed) || (tobj.MotionAccel != maccel) || (tobj.RotationAccel != raccel)) { TuioObject updateObject = new TuioObject(s_id, f_id, xpos, ypos, angle); updateObject.update(xpos, ypos, angle, xspeed, yspeed, rspeed, maccel, raccel); frameObjects.Add(updateObject); } } } } else if (command == "alive") { newObjectList.Clear(); for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newObjectList.Add(s_id); // reduce the object list to the lost objects if (aliveObjectList.Contains(s_id)) { aliveObjectList.Remove(s_id); } } // remove the remaining objects lock (objectSync) { for (int i = 0; i < aliveObjectList.Count; i++) { long s_id = aliveObjectList[i]; TuioObject removeObject = objectList[s_id]; removeObject.remove(currentTime); frameObjects.Add(removeObject); } } } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if (fseq > currentFrame) { currentTime = TuioTime.SessionTime; } if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } else if ((TuioTime.SessionTime.TotalMilliseconds - currentTime.TotalMilliseconds) > 100) { currentTime = TuioTime.SessionTime; } if (!lateFrame) { IEnumerator <TuioObject> frameEnum = frameObjects.GetEnumerator(); while (frameEnum.MoveNext()) { TuioObject tobj = frameEnum.Current; switch (tobj.TuioState) { case TuioObject.TUIO_REMOVED: TuioObject removeObject = tobj; removeObject.remove(currentTime); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.removeTuioObject(removeObject); } } lock (objectSync) { objectList.Remove(removeObject.SessionID); } break; case TuioObject.TUIO_ADDED: TuioObject addObject = new TuioObject(currentTime, tobj.SessionID, tobj.SymbolID, tobj.X, tobj.Y, tobj.Angle); lock (objectSync) { objectList.Add(addObject.SessionID, addObject); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioObject(addObject); } } break; default: TuioObject updateObject = getTuioObject(tobj.SessionID); if ((tobj.X != updateObject.X && tobj.XSpeed == 0) || (tobj.Y != updateObject.Y && tobj.YSpeed == 0)) { updateObject.update(currentTime, tobj.X, tobj.Y, tobj.Angle); } else { updateObject.update(currentTime, tobj.X, tobj.Y, tobj.Angle, tobj.XSpeed, tobj.YSpeed, tobj.RotationSpeed, tobj.MotionAccel, tobj.RotationAccel); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioObject(updateObject); } } break; } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(new TuioTime(currentTime)); } } List <long> buffer = aliveObjectList; aliveObjectList = newObjectList; // recycling the List newObjectList = buffer; } frameObjects.Clear(); } } else if (address == "/tuio/2Dcur") { if (command == "set") { long s_id = (int)args[1]; float xpos = (float)args[2]; float ypos = (float)args[3]; float xspeed = (float)args[4]; float yspeed = (float)args[5]; float maccel = (float)args[6]; lock (cursorList) { if (!cursorList.ContainsKey(s_id)) { TuioCursor addCursor = new TuioCursor(s_id, -1, xpos, ypos); frameCursors.Add(addCursor); } else { TuioCursor tcur = (TuioCursor)cursorList[s_id]; if (tcur == null) { return; } if ((tcur.X != xpos) || (tcur.Y != ypos) || (tcur.XSpeed != xspeed) || (tcur.YSpeed != yspeed) || (tcur.MotionAccel != maccel)) { TuioCursor updateCursor = new TuioCursor(s_id, tcur.CursorID, xpos, ypos); updateCursor.update(xpos, ypos, xspeed, yspeed, maccel); frameCursors.Add(updateCursor); } } } } else if (command == "alive") { newCursorList.Clear(); for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newCursorList.Add(s_id); // reduce the cursor list to the lost cursors if (aliveCursorList.Contains(s_id)) { aliveCursorList.Remove(s_id); } } // remove the remaining cursors lock (cursorSync) { for (int i = 0; i < aliveCursorList.Count; i++) { long s_id = aliveCursorList[i]; if (!cursorList.ContainsKey(s_id)) { continue; } TuioCursor removeCursor = cursorList[s_id]; removeCursor.remove(currentTime); frameCursors.Add(removeCursor); } } } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if (fseq > currentFrame) { currentTime = TuioTime.SessionTime; } if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } else if ((TuioTime.SessionTime.TotalMilliseconds - currentTime.TotalMilliseconds) > 100) { currentTime = TuioTime.SessionTime; } if (!lateFrame) { IEnumerator <TuioCursor> frameEnum = frameCursors.GetEnumerator(); while (frameEnum.MoveNext()) { TuioCursor tcur = frameEnum.Current; switch (tcur.TuioState) { case TuioCursor.TUIO_REMOVED: TuioCursor removeCursor = tcur; removeCursor.remove(currentTime); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.removeTuioCursor(removeCursor); } } lock (cursorSync) { cursorList.Remove(removeCursor.SessionID); if (removeCursor.CursorID == maxCursorID) { maxCursorID = -1; if (cursorList.Count > 0) { IEnumerator <KeyValuePair <long, TuioCursor> > clist = cursorList.GetEnumerator(); while (clist.MoveNext()) { int f_id = clist.Current.Value.CursorID; if (f_id > maxCursorID) { maxCursorID = f_id; } } List <TuioCursor> freeCursorBuffer = new List <TuioCursor>(); IEnumerator <TuioCursor> flist = freeCursorList.GetEnumerator(); while (flist.MoveNext()) { TuioCursor testCursor = flist.Current; if (testCursor.CursorID < maxCursorID) { freeCursorBuffer.Add(testCursor); } } freeCursorList = freeCursorBuffer; } else { freeCursorList.Clear(); } } else if (removeCursor.CursorID < maxCursorID) { freeCursorList.Add(removeCursor); } } break; case TuioCursor.TUIO_ADDED: TuioCursor addCursor; lock (cursorSync) { int c_id = cursorList.Count; if ((cursorList.Count <= maxCursorID) && (freeCursorList.Count > 0)) { TuioCursor closestCursor = freeCursorList[0]; IEnumerator <TuioCursor> testList = freeCursorList.GetEnumerator(); while (testList.MoveNext()) { TuioCursor testCursor = testList.Current; if (testCursor.getDistance(tcur) < closestCursor.getDistance(tcur)) { closestCursor = testCursor; } } c_id = closestCursor.CursorID; freeCursorList.Remove(closestCursor); } else { maxCursorID = c_id; } addCursor = new TuioCursor(currentTime, tcur.SessionID, c_id, tcur.X, tcur.Y); cursorList.Add(addCursor.SessionID, addCursor); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioCursor(addCursor); } } break; default: TuioCursor updateCursor = getTuioCursor(tcur.SessionID); if ((tcur.X != updateCursor.X && tcur.XSpeed == 0) || (tcur.Y != updateCursor.Y && tcur.YSpeed == 0)) { updateCursor.update(currentTime, tcur.X, tcur.Y); } else { updateCursor.update(currentTime, tcur.X, tcur.Y, tcur.XSpeed, tcur.YSpeed, tcur.MotionAccel); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioCursor(updateCursor); } } break; } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(new TuioTime(currentTime)); } } List <long> buffer = aliveCursorList; aliveCursorList = newCursorList; // recycling the List newCursorList = buffer; } frameCursors.Clear(); } } else if (address == "/tuio/2Dblb") { if (command == "set") { long s_id = (int)args[1]; float xpos = (float)args[2]; float ypos = (float)args[3]; float angle = (float)args[4]; float width = (float)args[5]; float height = (float)args[6]; float area = (float)args[7]; float xspeed = (float)args[8]; float yspeed = (float)args[9]; float rspeed = (float)args[10]; float maccel = (float)args[11]; float raccel = (float)args[12]; lock (blobList) { if (!blobList.ContainsKey(s_id)) { TuioBlob addBlob = new TuioBlob(s_id, -1, xpos, ypos, angle, width, height, area); frameBlobs.Add(addBlob); } else { TuioBlob tblb = (TuioBlob)blobList[s_id]; if (tblb == null) { return; } if ((tblb.X != xpos) || (tblb.Y != ypos) || (tblb.Angle != angle) || (tblb.Width != width) || (tblb.Height != height) || (tblb.Area != area) || (tblb.XSpeed != xspeed) || (tblb.YSpeed != yspeed) || (tblb.RotationSpeed != rspeed) || (tblb.MotionAccel != maccel) || (tblb.RotationAccel != raccel)) { TuioBlob updateBlob = new TuioBlob(s_id, tblb.BlobID, xpos, ypos, angle, width, height, area); updateBlob.update(xpos, ypos, angle, width, height, area, xspeed, yspeed, rspeed, maccel, raccel); frameBlobs.Add(updateBlob); } } } } else if (command == "alive") { newBlobList.Clear(); for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newBlobList.Add(s_id); // reduce the blob list to the lost blobs if (aliveBlobList.Contains(s_id)) { aliveBlobList.Remove(s_id); } } // remove the remaining blobs lock (blobSync) { for (int i = 0; i < aliveBlobList.Count; i++) { long s_id = aliveBlobList[i]; if (!blobList.ContainsKey(s_id)) { continue; } TuioBlob removeBlob = blobList[s_id]; removeBlob.remove(currentTime); frameBlobs.Add(removeBlob); } } } else if (command == "fseq") { int fseq = (int)args[1]; bool lateFrame = false; if (fseq > 0) { if (fseq > currentFrame) { currentTime = TuioTime.SessionTime; } if ((fseq >= currentFrame) || ((currentFrame - fseq) > 100)) { currentFrame = fseq; } else { lateFrame = true; } } else if ((TuioTime.SessionTime.TotalMilliseconds - currentTime.TotalMilliseconds) > 100) { currentTime = TuioTime.SessionTime; } if (!lateFrame) { IEnumerator <TuioBlob> frameEnum = frameBlobs.GetEnumerator(); while (frameEnum.MoveNext()) { TuioBlob tblb = frameEnum.Current; switch (tblb.TuioState) { case TuioBlob.TUIO_REMOVED: TuioBlob removeBlob = tblb; removeBlob.remove(currentTime); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.removeTuioBlob(removeBlob); } } lock (blobSync) { blobList.Remove(removeBlob.SessionID); if (removeBlob.BlobID == maxBlobID) { maxBlobID = -1; if (blobList.Count > 0) { IEnumerator <KeyValuePair <long, TuioBlob> > blist = blobList.GetEnumerator(); while (blist.MoveNext()) { int b_id = blist.Current.Value.BlobID; if (b_id > maxBlobID) { maxBlobID = b_id; } } List <TuioBlob> freeBlobBuffer = new List <TuioBlob>(); IEnumerator <TuioBlob> flist = freeBlobList.GetEnumerator(); while (flist.MoveNext()) { TuioBlob testBlob = flist.Current; if (testBlob.BlobID < maxBlobID) { freeBlobBuffer.Add(testBlob); } } freeBlobList = freeBlobBuffer; } else { freeBlobList.Clear(); } } else if (removeBlob.BlobID < maxBlobID) { freeBlobList.Add(removeBlob); } } break; case TuioBlob.TUIO_ADDED: TuioBlob addBlob; lock (blobSync) { int b_id = blobList.Count; if ((blobList.Count <= maxBlobID) && (freeBlobList.Count > 0)) { TuioBlob closestBlob = freeBlobList[0]; IEnumerator <TuioBlob> testList = freeBlobList.GetEnumerator(); while (testList.MoveNext()) { TuioBlob testBlob = testList.Current; if (testBlob.getDistance(tblb) < closestBlob.getDistance(tblb)) { closestBlob = testBlob; } } b_id = closestBlob.BlobID; freeBlobList.Remove(closestBlob); } else { maxBlobID = b_id; } addBlob = new TuioBlob(currentTime, tblb.SessionID, b_id, tblb.X, tblb.Y, tblb.Angle, tblb.Width, tblb.Height, tblb.Area); blobList.Add(addBlob.SessionID, addBlob); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioBlob(addBlob); } } break; default: TuioBlob updateBlob = getTuioBlob(tblb.SessionID); if ((tblb.X != updateBlob.X && tblb.XSpeed == 0) || (tblb.Y != updateBlob.Y && tblb.YSpeed == 0) || (tblb.Angle != updateBlob.Angle && tblb.RotationSpeed == 0)) { updateBlob.update(currentTime, tblb.X, tblb.Y, tblb.Angle, tblb.Width, tblb.Height, tblb.Area); } else { updateBlob.update(currentTime, tblb.X, tblb.Y, tblb.Angle, tblb.Width, tblb.Height, tblb.Area, tblb.XSpeed, tblb.YSpeed, tblb.RotationSpeed, tblb.MotionAccel, tblb.RotationAccel); } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioBlob(updateBlob); } } break; } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(new TuioTime(currentTime)); } } List <long> buffer = aliveBlobList; aliveBlobList = newBlobList; // recycling the List newBlobList = buffer; } frameBlobs.Clear(); } } }
public void UpdateTuioCursor(TuioCursor tuioCursor) { _refreshTimer.Stop(); int pid = tuioCursor.getCursorID(); int i = _pointerTouchInfos.FindIndex(pti => pti.PointerInfo.PointerId == pid); if (i != -1) { int x = (int)((tuioCursor.getX() * (_screenRect.Width + _calibrationBuffer.Width)) + _calibrationBuffer.Left + _screenRect.Left); int y = (int)((tuioCursor.getY() * (_screenRect.Height + _calibrationBuffer.Height)) + _calibrationBuffer.Top + _screenRect.Top); PointerTouchInfo pointerTouchInfo = _pointerTouchInfos[i]; pointerTouchInfo.PointerInfo.PointerFlags = PointerFlags.UPDATE | PointerFlags.INRANGE | ((this.IsContactEnabled) ? PointerFlags.INCONTACT : PointerFlags.NONE); pointerTouchInfo.PointerInfo.PtPixelLocation = new PointerTouchPoint { X = x, Y = y }; pointerTouchInfo.ContactArea = new ContactArea { Left = x - CONTACT_AREA_RADIUS, Right = x + CONTACT_AREA_RADIUS, Top = y - CONTACT_AREA_RADIUS, Bottom = y + CONTACT_AREA_RADIUS }; _pointerTouchInfos[i] = pointerTouchInfo; Trace.WriteLine(string.Format("set cur {0} ({1}) {2} {3} {4} {5}", pid, tuioCursor.getSessionID(), x, y, tuioCursor.getMotionSpeed(), tuioCursor.getMotionAccel()), "TUIO"); } }
// Update is called once per frame void LateUpdate() { ////////////////////////////////////////////////// // this is all about making fake events from the mouse for testing //////////////////////////////////////////////////// Camera cam = Camera.main; if (cam == null) { // someone didnt tag their cameras properly!! // just grab the first one if (Camera.allCameras.Length == 0) return; cam = Camera.allCameras[0]; if (cam == null) return; } if (Input.GetMouseButtonDown(0)) { Vector3 fakepos = cam.ScreenToViewportPoint(Input.mousePosition); TuioCursor fakeCursor = new TuioCursor(fakeEventID+1,1,fakepos.x,1.0f - fakepos.y); this.cursorDown(fakeCursor); if (Input.GetKey(KeyCode.LeftApple) || Input.GetKey(KeyCode.RightApple)) { TuioCursor fakeCursor2 = new TuioCursor(fakeEventID,0,fakepos.x - 0.1f,1.0f - fakepos.y); this.cursorDown(fakeCursor2); } if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt)) { TuioCursor fakeCursor3 = new TuioCursor(fakeEventID+2,2,fakepos.x + 0.1f,1.0f - fakepos.y); this.cursorDown(fakeCursor3); } } if (Input.GetMouseButtonUp(0)) { Vector3 fakepos = cam.ScreenToViewportPoint(Input.mousePosition); TuioCursor fakeCursor = new TuioCursor(fakeEventID + 1,1,fakepos.x,1.0f - fakepos.y); this.cursorUp(fakeCursor); // just kill any secondary mouse events here too if (activeEvents.ContainsKey(fakeEventID)) { TuioCursor fakeCursor2 = new TuioCursor(fakeEventID,0,fakepos.x - 0.1f,1.0f - fakepos.y); this.cursorUp(fakeCursor2); } if (activeEvents.ContainsKey(fakeEventID + 2)) { TuioCursor fakeCursor3 = new TuioCursor(fakeEventID + 2,2,fakepos.x - 0.1f,1.0f - fakepos.y - 0.07f); this.cursorUp(fakeCursor3); } fakeEventID += 3; } if (Input.GetMouseButton(0) && !Input.GetMouseButtonDown(0)) { Vector3 fakepos = cam.ScreenToViewportPoint(Input.mousePosition); TuioCursor fakeCursor = new TuioCursor(fakeEventID + 1,5,fakepos.x,1.0f - fakepos.y); this.cursorMove(fakeCursor); } this.finishFrame(); }
public void addTuioCursor(TuioCursor c) { }
public void addTuioCursor(TuioCursor tcur) { Console.WriteLine("add cur "+tcur.CursorID + " ("+tcur.SessionID+") "+tcur.X+" "+tcur.Y); }
public void updateTuioCursor(TuioCursor c) { }
public void removeTuioCursor(TuioCursor tcur) { Console.WriteLine("del cur "+tcur.CursorID + " ("+tcur.SessionID+")"); }
public void updateTuioCursor(TuioCursor c) { if (verbose) Console.WriteLine("set cur "+c.CursorID + " ("+c.SessionID+") "+c.X+" "+c.Y+" "+c.MotionSpeed+" "+c.MotionAccel); }
private void processMessage(OSCMessage message) { string address = message.Address; ArrayList args = message.Values; string command = (string)args[0]; if (address == "/tuio/2Dobj") { if ((command == "set") && (currentFrame >= lastFrame)) { long s_id = (int)args[1]; int f_id = (int)args[2]; float x = (float)args[3]; float y = (float)args[4]; float a = (float)args[5]; float X = (float)args[6]; float Y = (float)args[7]; float A = (float)args[8]; float m = (float)args[9]; float r = (float)args[10]; if (!objectList.ContainsKey(s_id)) { TuioObject addObject = new TuioObject(s_id, f_id, x, y, a); objectList.Add(s_id, addObject); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioObject(addObject); } } } else { TuioObject updateObject = objectList[s_id]; if ((updateObject.getX() != x) || (updateObject.getY() != y) || (updateObject.getAngle() != a)) { updateObject.update(x, y, a, X, Y, A, m, r); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioObject(updateObject); } } //objectList[s_id] = tobj; } } } else if ((command == "alive") && (currentFrame >= lastFrame)) { for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newObjectList.Add(s_id); // reduce the object list to the lost objects if (aliveObjectList.Contains(s_id)) { aliveObjectList.Remove(s_id); } } // remove the remaining objects for (int i = 0; i < aliveObjectList.Count; i++) { long s_id = aliveObjectList[i]; TuioObject removeObject = objectList[s_id]; removeObject.remove(); objectList.Remove(s_id); for (int j = 0; j < listenerList.Count; j++) { TuioListener listener = (TuioListener)listenerList[j]; if (listener != null) { listener.removeTuioObject(removeObject); } } } List <long> buffer = aliveObjectList; aliveObjectList = newObjectList; // recycling of the List newObjectList = buffer; newObjectList.Clear(); } else if (command == "fseq") { lastFrame = currentFrame; currentFrame = (int)args[1]; if (currentFrame == -1) { currentFrame = lastFrame; } if (currentFrame >= lastFrame) { long currentTime = lastTime; if (currentFrame > lastFrame) { TimeSpan span = DateTime.Now - startTime; currentTime = (long)span.TotalMilliseconds; lastTime = currentTime; } IEnumerator <TuioObject> refreshList = objectList.Values.GetEnumerator(); while (refreshList.MoveNext()) { TuioObject refreshObject = refreshList.Current; if (refreshObject.getUpdateTime() == TUIO_UNDEFINED) { refreshObject.setUpdateTime(currentTime); } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(currentTime); } } } } } else if (address == "/tuio/2Dcur") { if ((command == "set") && (currentFrame >= lastFrame)) { long s_id = (int)args[1]; float x = (float)args[2]; if (this.FlipHorizontal) { x = 1.0f - x; } float y = (float)args[3]; if (this.FlipHorizontal) { y = 1.0f - y; } float X = (float)args[4]; float Y = (float)args[5]; float m = (float)args[6]; if (!cursorList.ContainsKey(s_id)) { int f_id = cursorList.Count; if (cursorList.Count <= maxFingerID) { TuioCursor closestCursor = freeCursorList[0]; IEnumerator <TuioCursor> testList = freeCursorList.GetEnumerator(); while (testList.MoveNext()) { TuioCursor testCursor = testList.Current; if (testCursor.getDistance(x, y) < closestCursor.getDistance(x, y)) { closestCursor = testCursor; } } f_id = closestCursor.getFingerID(); freeCursorList.Remove(closestCursor); } else { maxFingerID = f_id; } TuioCursor addCursor = new TuioCursor(s_id, f_id, x, y); cursorList.Add(s_id, addCursor); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.addTuioCursor(addCursor); } } } else { TuioCursor updateCursor = (TuioCursor)cursorList[s_id]; if ((updateCursor.getX() != x) || (updateCursor.getY() != y)) { updateCursor.update(x, y, X, Y, m); for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.updateTuioCursor(updateCursor); } } //cursorList[s_id] = tcur; } } } else if ((command == "alive") && (currentFrame >= lastFrame)) { for (int i = 1; i < args.Count; i++) { // get the message content long s_id = (int)args[i]; newCursorList.Add(s_id); // reduce the cursor list to the lost cursors if (aliveCursorList.Contains(s_id)) { aliveCursorList.Remove(s_id); } } // remove the remaining cursors for (int i = 0; i < aliveCursorList.Count; i++) { long s_id = aliveCursorList[i]; if (!cursorList.ContainsKey(s_id)) { continue; } TuioCursor removeCursor = cursorList[s_id]; int c_id = removeCursor.getFingerID(); cursorList.Remove(s_id); removeCursor.remove(); if (c_id == maxFingerID) { maxFingerID = -1; if (cursorList.Count > 0) { IEnumerator <KeyValuePair <long, TuioCursor> > clist = cursorList.GetEnumerator(); while (clist.MoveNext()) { int f_id = clist.Current.Value.getFingerID(); if (f_id > maxFingerID) { maxFingerID = f_id; } } List <TuioCursor> freeCursorBuffer = new List <TuioCursor>(); IEnumerator <TuioCursor> flist = freeCursorList.GetEnumerator(); while (flist.MoveNext()) { TuioCursor testCursor = flist.Current; if (testCursor.getFingerID() < maxFingerID) { freeCursorBuffer.Add(testCursor); } } freeCursorList = freeCursorBuffer; } } else if (c_id < maxFingerID) { freeCursorList.Add(removeCursor); } for (int j = 0; j < listenerList.Count; j++) { TuioListener listener = (TuioListener)listenerList[j]; if (listener != null) { listener.removeTuioCursor(removeCursor); } } } List <long> buffer = aliveCursorList; aliveCursorList = newCursorList; // recycling of the List newCursorList = buffer; newCursorList.Clear(); } else if (command == "fseq") { lastFrame = currentFrame; currentFrame = (int)args[1]; if (currentFrame == -1) { currentFrame = lastFrame; } if (currentFrame >= lastFrame) { long currentTime = lastTime; if (currentFrame > lastFrame) { TimeSpan span = DateTime.Now - startTime; currentTime = (long)span.TotalMilliseconds; lastTime = currentTime; } IEnumerator <TuioCursor> refreshList = cursorList.Values.GetEnumerator(); while (refreshList.MoveNext()) { TuioCursor refreshCursor = refreshList.Current; if (refreshCursor.getUpdateTime() == TUIO_UNDEFINED) { refreshCursor.setUpdateTime(currentTime); } } for (int i = 0; i < listenerList.Count; i++) { TuioListener listener = (TuioListener)listenerList[i]; if (listener != null) { listener.refresh(currentTime); } } } } } }
/*