Browse Source

+ angle of a TUIOobject now returns the depth at the current corner coordinate, but moved some distance nearer to the center

SLR_Kinect_PC 9 years ago
parent
commit
2db45bdd26
3 changed files with 103 additions and 5 deletions
  1. BIN
      bbiwarg.v12.suo
  2. 23 0
      bbiwarg/Images/DepthImage.cs
  3. 80 5
      bbiwarg/TUIO/TuioCommunicator.cs

BIN
bbiwarg.v12.suo


+ 23 - 0
bbiwarg/Images/DepthImage.cs

@@ -88,6 +88,29 @@ namespace BBIWARG.Images
             }
         }
 
+
+        /// <summary>
+        /// Returns the depth in the processed image at a given position.
+        /// It will move the x,y more to the center of the palm!
+        /// </summary>
+        /// <param name="x">x coordinate of the position</param>
+        /// <param name="y">y coordinate of the position</param>
+        /// <returns>the depth at the position</returns>
+        public Int16 getDepthAtFixed(int x0, int y0, int x1, int y1)
+        {
+            try
+            {
+                int rx = (int) ((x1 - x0) * 0.15f + x0);
+                int ry = (int) ((y1 - y0) * 0.15f + y0);
+
+                return (Int16)(MinDepth + Image.Data[ry, rx, 0]);
+            }
+            catch (IndexOutOfRangeException e)
+            {
+                return (Int16)(MinDepth + Image.Data[0, 0, 0]);
+            }
+        }
+
         /// <summary>
         /// Sets the depth in the processed image.
         /// </summary>

+ 80 - 5
bbiwarg/TUIO/TuioCommunicator.cs

@@ -116,17 +116,56 @@ namespace BBIWARG.TUIO
                 List<int> updatedIDs = new List<int>();
                 foreach (Palm palm in frameData.TrackedPalms)
                 {
+
                     if (tobjects.Keys.Contains(palm.TrackID))
                     {
                         // update / move
                         List<TuioObject> palmTobjs = tobjects[palm.TrackID];
                         Vector2D[] corners = palm.Quad.Corners;
                         for (int i = 0; i < 4; i++)
+                        {
+                            /* BEGIN HACK */
+                            int x0 = 0;
+                            int y0 = 0;
+                            int x1 = 0;
+                            int y1 = 0;
+
+                            if (i == 0)
+                            {
+                                x0 = (int)corners[0].X;
+                                y0 = (int)corners[0].Y;
+                                x1 = (int)corners[2].X;
+                                y1 = (int)corners[2].Y;
+                            }
+                            else if (i == 1)
+                            {
+                                x0 = (int)corners[1].X;
+                                y0 = (int)corners[1].Y;
+                                x1 = (int)corners[3].X;
+                                y1 = (int)corners[3].Y;
+                            }
+                            else if (i == 2)
+                            {
+                                x0 = (int)corners[2].X;
+                                y0 = (int)corners[2].Y;
+                                x1 = (int)corners[0].X;
+                                y1 = (int)corners[0].Y;
+                            }
+                            else if (i == 3)
+                            {
+                                x0 = (int)corners[3].X;
+                                y0 = (int)corners[3].Y;
+                                x1 = (int)corners[1].X;
+                                y1 = (int)corners[1].Y;
+                            }
+                            /* END HACK */
                             server.updateTuioObject(
-                                palmTobjs[i], 
-                                corners[i].X, 
-                                corners[i].Y, 
-                                frameData.DepthImage.getDepthAt((int) corners[i].X, (int) corners[i].Y));
+                                palmTobjs[i],
+                                corners[i].X,
+                                corners[i].Y,
+                                frameData.DepthImage.getDepthAtFixed(x0, y0, x1, y1));
+                                //frameData.DepthImage.getDepthAt((int)corners[i].X, (int)corners[i].Y));
+                        }
                         updatedIDs.Add(palm.TrackID);
                     }
                     else
@@ -136,10 +175,46 @@ namespace BBIWARG.TUIO
                         Vector2D[] corners = palm.Quad.Corners;
                         for (int i = 0; i < 4; i++) 
                         {
+                            
+                            /* BEGIN HACK */
+                            int x0 = 0;
+                            int y0 = 0;
+                            int x1 = 0;
+                            int y1 = 0;
+
+                            if (i == 0)
+                            {
+                                x0 = (int)corners[0].X;
+                                y0 = (int)corners[0].Y;
+                                x1 = (int)corners[2].X;
+                                y1 = (int)corners[2].Y;
+                            }
+                            else if (i == 1)
+                            {
+                                x0 = (int)corners[1].X;
+                                y0 = (int)corners[1].Y;
+                                x1 = (int)corners[3].X;
+                                y1 = (int)corners[3].Y;
+                            }
+                            else if (i == 2)
+                            {
+                                x0 = (int)corners[2].X;
+                                y0 = (int)corners[2].Y;
+                                x1 = (int)corners[0].X;
+                                y1 = (int)corners[0].Y;
+                            }
+                            else if (i == 3)
+                            {
+                                x0 = (int)corners[3].X;
+                                y0 = (int)corners[3].Y;
+                                x1 = (int)corners[1].X;
+                                y1 = (int)corners[1].Y;
+                            }
+                            /* END HACK */
                             palmTobjs.Add(server.addTuioObject(
                                 corners[i].X, 
                                 corners[i].Y, 
-                                frameData.DepthImage.getDepthAt((int) corners[i].X, (int) corners[i].Y))); //palm.TrackID + 0.1f * i));
+                                frameData.DepthImage.getDepthAtFixed(x0, y0, x1, y1))); //palm.TrackID + 0.1f * i));
                         }
                         tobjects.Add(palm.TrackID, palmTobjs);
                         updatedIDs.Add(palm.TrackID);