// Para option = 0 => se está trabajando con los strokes_shape
        // Para option = 1 => con strokes_without_recognize
        public static void SplitStroke(Stroke s, List <Point> resampled, List <int> corners, int option)
        {
            // Se crea el findex que se va a emplear en el split
            float findex = 0;

            // Se comprueba la posicion en que el punto del stroke coincide con la segunda
            // esquina (sólo hace falta mirar la segunda esquina porque la primera es el
            // primer punto del stroke, y a partir de la tercera pertenecerían al stroke
            // nuevo, el obtenido al romper el trazo). Si la segunda esquina es el último
            // punto, ya tenemos la línea, pero si no lo es, tendremos que ver que
            // posición ocupa en el stroke para poder romperlo por ahí.

            // Punto de la esquina (en resampled)
            Point pt_corner = resampled[corners[1]];

            // Se comprueba que no sea el último punto
            if (!pt_corner.Equals(resampled[resampled.Count - 1]))
            {
                findex = SplitStrokes.GetFIndex(pt_corner, s);

                // El stroke se rompe por ese punto
                Stroke new_stroke = s.Split(findex);

                // El nuevo stroke se añade a la lista de strokes
                FormManager.ink_overlay.Ink.Strokes.Add(new_stroke);

                if (option == 0)
                {
                    FormManager.strokes_shape.Add(new_stroke);
                }
                else
                {
                    Facade.strokes_without_recognize.Add(new_stroke);
                }
            }
        }
Exemplo n.º 2
0
        private void exportarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            GetPath();

            if (Facade.path == null)
            {
                MessageBox.Show("Debe introducir una ruta", "Atención",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                double       dist_between_points = 0;
                List <Point> resampled           = new List <Point>();

                Renderer renderer = new Renderer();
                Graphics g        = pnlInput.CreateGraphics();

                foreach (Stroke s in ink_overlay.Ink.Strokes)
                {
                    if (!s.Deleted)
                    {
                        // Separar el texto de las figuras
                        Divider(s);

                        for (int i = 0; i < strokes_shape.Count; i++)
                        {
                            // Buscar las esquinas en las figuras
                            dist_between_points = CornerFinder.DeterminingResampleSpacing(strokes_shape[i]);

                            resampled = (List <Point>)CornerFinder.ResamplePoints(strokes_shape[i], dist_between_points);

                            List <int> corners = (List <int>)CornerFinder.GetCorners(resampled);

                            // Dividir las polilíneas en líneas
                            SplitStrokes.SplitStroke(strokes_shape[i], resampled, corners, 0);
                        }
                    }
                }

                for (int i = 0; i < strokes_shape.Count; i++)
                {
                    RecognizeShapes.Clasifier(strokes_shape[i]);
                }
                // Buscar clases
                RecognizeShapes.SearchClasses();
                MessageBox.Show(Facade.classes.Count.ToString());

                // Determinar el nombre de las clases
                SetNameClasses();

                foreach (Class c in Facade.classes)
                {
                    MessageBox.Show(c.GetName());
                }

                // Determinar los atributos de las clases
                SetAttributesClasses();

                // Determinar los metodos de las clases
                SetMethodsClasses();

                // Actualizar la lista de strokes no procesados, es decir, todos los que no formen
                // parte de las clases. Esto reduce el grupo de strokes a procesar a las relaciones
                // entre clases.
                ActualiceNonRecognizedStrokes();

                // Repetir buscar corner y dividir en líneas (con los strokes que no se han reconocido)
                for (int i = 0; i < Facade.strokes_without_recognize.Count; i++)
                {
                    if (!Facade.strokes_without_recognize[i].Deleted)
                    {
                        // Buscar las esquinas en las figuras
                        dist_between_points = CornerFinder.DeterminingResampleSpacing(Facade.strokes_without_recognize[i]);

                        resampled = (List <Point>)CornerFinder.ResamplePoints(Facade.strokes_without_recognize[i], dist_between_points);

                        List <int> corners = (List <int>)CornerFinder.GetCorners(resampled);

                        // Dividir las polilíneas en líneas
                        SplitStrokes.SplitStroke(Facade.strokes_without_recognize[i], resampled, corners, 1);
                    }
                }

                if (Facade.strokes_without_recognize.Count > 0)
                {
                    RecognizeShapes.SearchRelationships();
                }


                CreateXML.CreateCHICOFile();
                MessageBox.Show("Exportado");
            }
        }