// 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); } } }
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"); } }