//private void Stitch()
        //{
        //    AccordStitchForm accordStitch = new AccordStitchForm();
        //    accordStitch.ShowDialog();
        //    pointsLeft = accordStitch.PointsLeft;
        //    pointsRight = accordStitch.PointsRight;
        //}


        public void ShowICPResults(List <Vertex> myVerticesTarget, List <Vertex> myVerticesSource, List <Vertex> myTransformPoints, bool changeColor)
        {
            this.OpenGLControl.RemoveAllModels();

            //target in green
            List <float[]> myColors = PointCloudUtils.CreateColorList(myVerticesTarget.Count, 0, 255, 0, 255);

            if (myVerticesTarget != null)
            {
                if (changeColor)
                {
                    Vertices.SetColorToList(myVerticesTarget, myColors);
                }
                this.OpenGLControl.ShowPointCloud("ICP Target", myVerticesTarget);
            }

            if (myVerticesSource != null)
            {
                //source in white
                myColors = PointCloudUtils.CreateColorList(myVerticesSource.Count, 255, 255, 255, 255);
                if (changeColor)
                {
                    Vertices.SetColorToList(myVerticesSource, myColors);
                }
                this.OpenGLControl.ShowPointCloud("ICP To be matched", myVerticesSource);
            }

            if (myTransformPoints != null)
            {
                //transformed in red
                myColors = PointCloudUtils.CreateColorList(myTransformPoints.Count, 255, 0, 0, 255);
                Vertices.SetColorToList(myTransformPoints, myColors);
                this.OpenGLControl.ShowPointCloud("ICP Solution", myTransformPoints);
            }
        }
        private List <Vertex> ICPOnPoints_WithSubset_PointsData(List <List <Vertex> > PointsDataList, List <System.Drawing.Point> pointsLeft, List <System.Drawing.Point> pointsRight)
        {
            List <Vertex> myPointsTarget = PointsDataList[0];
            List <Vertex> mypointsSource = PointsDataList[1];

            if (PointsDataList.Count > 1)
            {
                if (pointsLeft != null)
                {
                    List <Vertex> mySubsetLeft  = PointCloudUtils.CreateVerticesFromDrawingPoints_IncludingCheck(pointsLeft, PointsDataList[0], pointsRight);
                    List <Vertex> mySubsetRight = PointCloudUtils.CreateVerticesFromDrawingPoints_IncludingCheck(pointsRight, PointsDataList[1], pointsLeft);

                    if (mySubsetLeft.Count == mySubsetRight.Count)
                    {
                        List <Vertex> myPointsTransformed = ICPOnPoints_WithSubset(myPointsTarget, mypointsSource, mySubsetLeft, mySubsetRight);
                        return(myPointsTransformed);
                    }
                    else
                    {
                        MessageBox.Show("Error in identifying stitched points ");
                    }
                }
            }

            return(null);
        }
        public void ShowPointCloud(byte[] mycolorInfo, ushort[] depthInfo, int width, int height)
        {
            List <Vector3d> myVectors = Vertices.ConvertToVector3DList_FromArray(depthInfo, width, height);
            List <float[]>  myColors  = PointCloudUtils.CreateColorInfo(mycolorInfo, depthInfo, width, height);

            this.lastPointCloud = myVectors;
            this.lastColors     = myColors;

            this.OpenGLControl.ShowPointCloud("Color Point Cloud", myVectors, myColors);
        }
        public void TransformPointCloud_SaveObjFile()
        {
            //open a file
            DepthMetaData DepthMetaData = new DepthMetaData();

            byte[] colorInfo = null;


            DepthMetaData.ReadDepthWithColor_OBJ(path, "KinectFace1.obj", ref DepthMetaData.FrameData, ref colorInfo);

            List <Vector3d> myVectors      = Vertices.ConvertToVector3DList_FromArray(DepthMetaData.FrameData, DepthMetaData.XResDefault, DepthMetaData.YResDefault);
            List <float[]>  myColorsFloats = PointCloudUtils.CreateColorInfo(colorInfo, DepthMetaData.FrameData, DepthMetaData.XResDefault, DepthMetaData.YResDefault);
            List <Vertex>   myVertexList   = Model3D.CreateVertexList(myVectors, myColorsFloats);

            VertexUtils.ScaleByFactor(myVertexList, 0.9);
            VertexUtils.RotateVertices30Degrees(myVertexList);
            VertexUtils.TranslateVertices(myVertexList, 10, 3, 5);

            Model3D.Save_ListVertices_Obj(myVertexList, path, "transformed.obj");
        }