public static void SetWorkspaceCloudRealVerticesAndCenter(Workspace workspace, FrameSize depthFrameSize)
        {
            dataStore = DataStore.Instance;
            KinectClient client = dataStore.GetClientForWorkspace(workspace.ID);
            double sumX = 0;
            double sumY = 0;
            double sumZ = 0;
            double numberOfPoints = 0;
            Point[] workspaceVertices = {
                new Point(workspace.Vertices[0].X, workspace.Vertices[0].Y),
                new Point(workspace.Vertices[1].X, workspace.Vertices[1].Y),
                new Point(workspace.Vertices[2].X, workspace.Vertices[2].Y),
                new Point(workspace.Vertices[3].X, workspace.Vertices[3].Y),
            };

            List<Point3D> pointCloud = new List<Point3D>();
            NullablePoint3D[] clientPointCloud = dataStore.GetPointCloudForClient(client);
            for (int i = 0; i < clientPointCloud.Count(); i++)
            {
                if (GeometryHelper.InsidePolygon(workspaceVertices, new Point(i%depthFrameSize.Width, i/depthFrameSize.Width)))
                {
                    NullablePoint3D point = clientPointCloud[i];
                    if (point != null)
                    {
                        double x = point.X;
                        double y = point.Y;
                        double z = point.Z;

                        sumX += x;
                        sumY += y;
                        sumZ += z;

                        numberOfPoints += 1;

                        pointCloud.Add(new Point3D(point.X, point.Y, point.Z));
                    }
                }
            }
            workspace.Center = new Point3D(sumX / numberOfPoints, sumY / numberOfPoints, sumZ / numberOfPoints);

            workspace.PointCloud = pointCloud.ToArray();

            SetRealVertices(workspace);
        }
 private void kinectServer_DepthDataArrived(KinectDemoMessage message, KinectClient client)
 {
     depthFrameSize = ((DepthStreamMessage)message).DepthFrameSize;
     serverMessageProcessor.DepthMessageArrived -= kinectServer_DepthDataArrived;
 }
 private void ProcessDepthStreamMessage(object obj, KinectClient sender)
 {
     if (DepthMessageArrived != null)
     {
         DepthMessageArrived((DepthStreamMessage)obj, sender);
         if (depthFrameSize == null)
         {
             depthFrameSize = ((DepthStreamMessage)obj).DepthFrameSize;
         }
     }
 }