public void Extraer(ProcesarRecuadros procesadorRecuadros, int[] indicesRecuadros = null) { // indicesRecuadros == 0 >> PROCESAR TODOS if (procesadorRecuadros == null) { return; } var recuadros = procesadorRecuadros.Recuadros; if (recuadros == null || recuadros.Count == 0) { return; } Extraer(procesarRecuadros.MatOriginal, recuadros[0]); }
void OnGUI() { if (texturaSubida) { var curEvent = Event.current; var dobleColumna = recuadroExaminado != null && position.width > 600; var anchoColumna = dobleColumna ? position.width / 2f:0; EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.MaxWidth(anchoColumna)); var aspectTextura = texturaSubida.width / (float)texturaSubida.height; // var maxWidth = position/2f; EditorGUILayout.BeginHorizontal(); // var areaPreview = GUILayoutUtility.GetRect(0, position.width, 0, alturaPreview); // var rect = new UnityEngine.Rect(areaPreview.x, areaPreview.y, areaPreview.height * aspectTextura, areaPreview.height);//GUILayoutUtility.GetAspectRect(aspectTextura); var rect = GUILayoutUtility.GetAspectRect(aspectTextura, GUILayout.MaxWidth(aspectTextura * alturaPreview)); // rect.width /= 2f; EditorGUI.DrawTextureTransparent(rect, texturaSubida); EditorGUI.DropShadowLabel(rect, $"({texturaSubida.width}x{texturaSubida.height})"); if (procRecuadros && procRecuadros.Recuadros != null) { var escala = new Vector2(rect.width / textPrimerPasada.width, rect.height / textPrimerPasada.height); foreach (var rec in procRecuadros.Recuadros) { var cvbbox = OpenCvSharp.Rect.BoundingBoxForPoints(rec.quadReducido.Select(p => new Point(p.X * escala.x, p.Y * escala.y)).ToArray()); var bbox = new UnityEngine.Rect(cvbbox.X + rect.x, cvbbox.Y, cvbbox.Width, cvbbox.Height); // EditorGUI.DrawRect(bbox, Color.green); if (recuadroExaminado == rec) { GUI.color = Color.green; } EditorGUI.DropShadowLabel(bbox, $"#{procRecuadros.Recuadros.IndexOf(rec)}"); GUI.color = Color.white; if (curEvent.type == EventType.MouseUp && bbox.Contains(curEvent.mousePosition)) { recuadroExaminado = rec == recuadroExaminado ? null : rec; // if (recuadroExaminado != null) textRecuadro = ActualizarPreview(textRecuadro, rec.matRecuadroNormalizado); if (recuadroExaminado != null) { textRecuadro = ActualizarPreview(textRecuadro, ExtractorDe(rec).matRecuadro); } } } } // rect.x += rect.width; if (textRecuadro && recuadroExaminado != null) { aspectTextura = textRecuadro.width / (float)textRecuadro.height; rect = GUILayoutUtility.GetAspectRect(aspectTextura, GUILayout.MaxWidth(aspectTextura * alturaPreview)); // rect.width = rect.height * textRecuadro.width / textRecuadro.height; EditorGUI.DrawTextureTransparent(rect, textRecuadro); EditorGUI.DropShadowLabel(rect, $"({textRecuadro.width}x{textRecuadro.height})"); } else if (textPrimerPasada) { rect = GUILayoutUtility.GetAspectRect(aspectTextura, GUILayout.MaxWidth(aspectTextura * alturaPreview)); EditorGUI.DrawTextureTransparent(rect, textPrimerPasada); } EditorGUILayout.EndHorizontal(); if (!procRecuadros) { destruime.Add(procRecuadros = ScriptableObject.CreateInstance <ProcesarRecuadros>()); Procesar(); Editor.CreateCachedEditor(procRecuadros, typeof(CustomProcRecuadrosEditor), ref procRecuadrosEditor); } if (extractoresSprites != null && recuadroExaminado != null) { DibujarControlSprites(); SpritesEncontrados(dobleColumna); } else { DibujarControlRecuadros(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(pathOrigen)); if (GUILayout.Button("Save")) { Save(pathOrigen); } EditorGUI.EndDisabledGroup(); if (GUILayout.Button("Save As..")) { var path = EditorUtility.SaveFilePanelInProject("Guardar Extractor De Sprites", "auto_sprites", "asset", "Puedes volver a cambiar parametros y volver a procesar los sprites"); if (!string.IsNullOrEmpty(path)) { Save(pathOrigen = path); } } EditorGUILayout.EndHorizontal(); } }