Probado - Reducido parametros de ROI

This commit is contained in:
Miguel 2024-04-15 13:38:56 +02:00
parent a86a84bd9f
commit 24313ada54
6 changed files with 150 additions and 159 deletions

View File

@ -38,5 +38,24 @@ namespace ROIEditor
{
return Path.Combine(strDirectorioTrabajo, "roieditor.db");
}
public string PNG_Folther_Path()
{
return strDirectorioTrabajo;
}
public string Json_Extension_Path()
{
string jsonPath = Path.ChangeExtension(NombreImagenEditando, ".json");
var imagePath = Path.Combine(strDirectorioTrabajo, jsonPath);
return imagePath;
}
public string PNG_Extension_Path()
{
string jsonPath = Path.ChangeExtension(NombreImagenEditando, ".png");
var imagePath = Path.Combine(PNG_Folther_Path(), jsonPath);
return imagePath;
}
}
}

98
ItemPersistente.cs Normal file
View File

@ -0,0 +1,98 @@
using System.Text.Json;
using Microsoft.Data.Sqlite;
namespace ROIEditor
{
public class ItemPersistente<T> where T : new()
{
private readonly string connectionString;
private readonly string tableName;
private T data; // Ahora 'data' es un objeto de tipo T
public string Clave;
public ItemPersistente(string dbPath, string tableName)
{
connectionString = $"Data Source={dbPath}";
this.tableName = tableName;
InitializeDatabase();
data = new T(); // Inicializa 'data' con el constructor por defecto de T
}
private void InitializeDatabase()
{
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = $@"
CREATE TABLE IF NOT EXISTS {tableName} (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Clave TEXT UNIQUE,
SerializedData TEXT
)";
command.ExecuteNonQuery();
}
}
public void Save() { Save(Clave); }
public void Save(string clave)
{
if (clave == null) return;
Clave = clave;
string serializedData = JsonSerializer.Serialize(data);
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = $@"
INSERT INTO {tableName} (Clave, SerializedData)
VALUES ($Clave, $SerializedData)
ON CONFLICT(Clave) DO UPDATE SET
SerializedData = excluded.SerializedData";
command.Parameters.AddWithValue("$Clave", clave);
command.Parameters.AddWithValue("$SerializedData", serializedData);
command.ExecuteNonQuery();
}
}
public bool Load() { return Load(Clave); }
public bool Load(string clave)
{
if (clave == null) return false;
Clave = clave;
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = $"SELECT SerializedData FROM {tableName} WHERE Clave = $Clave";
command.Parameters.AddWithValue("$Clave", clave);
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
string serializedData = reader.GetString(0);
data = JsonSerializer.Deserialize<T>(serializedData);
return true;
}
data = new();
return false;
}
}
}
public T Get()
{
return data;
}
public void Set(T newData)
{
data = newData;
}
}
}

View File

@ -1,12 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json;
using Microsoft.Data.Sqlite;
using System.ComponentModel;
namespace ROIEditor
{
@ -130,97 +123,6 @@ namespace ROIEditor
}
}
public class ItemPersistente<T> where T : new()
{
private readonly string connectionString;
private readonly string tableName;
private T data; // Ahora 'data' es un objeto de tipo T
public string Clave;
public ItemPersistente(string dbPath, string tableName)
{
connectionString = $"Data Source={dbPath}";
this.tableName = tableName;
InitializeDatabase();
data = new T(); // Inicializa 'data' con el constructor por defecto de T
}
private void InitializeDatabase()
{
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = $@"
CREATE TABLE IF NOT EXISTS {tableName} (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Clave TEXT UNIQUE,
SerializedData TEXT
)";
command.ExecuteNonQuery();
}
}
public void Save() { Save(Clave); }
public void Save(string clave)
{
if (clave == null) return;
Clave = clave;
string serializedData = JsonSerializer.Serialize(data);
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = $@"
INSERT INTO {tableName} (Clave, SerializedData)
VALUES ($Clave, $SerializedData)
ON CONFLICT(Clave) DO UPDATE SET
SerializedData = excluded.SerializedData";
command.Parameters.AddWithValue("$Clave", clave);
command.Parameters.AddWithValue("$SerializedData", serializedData);
command.ExecuteNonQuery();
}
}
public bool Load() { return Load(Clave); }
public bool Load(string clave)
{
if (clave == null) return false;
Clave = clave;
using (var connection = new SqliteConnection(connectionString))
{
connection.Open();
var command = connection.CreateCommand();
command.CommandText = $"SELECT SerializedData FROM {tableName} WHERE Clave = $Clave";
command.Parameters.AddWithValue("$Clave", clave);
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
string serializedData = reader.GetString(0);
data = JsonSerializer.Deserialize<T>(serializedData);
return true;
}
data = new();
return false;
}
}
}
public T Get()
{
return data;
}
public void Set(T newData)
{
data = newData;
}
}
}

View File

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ROIEditor"
mc:Ignorable="d"
Title="Editor de ROI" Height="1000" Width="1600">
Title="Editor de ROI" Height="1000" Width="1600" HorizontalAlignment="Center" VerticalAlignment="Center">
<Window.Resources>
<Style x:Key="TextBoxPlaceholderStyle" TargetType="TextBox">
<Setter Property="Template">
@ -43,12 +43,13 @@
<RowDefinition Height="1*"/>
<!-- Esta fila ocupará 2/3 del espacio disponible -->
</Grid.RowDefinitions>
<ListBox x:Name="ListaFunciones" Grid.Row="0" Margin="0,0,0,5">
<!-- Aquí irán los elementos de la lista de funciones -->
</ListBox>
<ListBox x:Name="ListaImagenes" Grid.Row="1" Margin="0,5,0,0">
<ListBox x:Name="ListaImagenes" Grid.Row="0" Margin="0,5,0,0">
<!-- Aquí irán los elementos de la lista de imágenes -->
</ListBox>
<ListBox x:Name="ListaFunciones" Grid.Row="1" Margin="0,0,0,5">
<!-- Aquí irán los elementos de la lista de funciones -->
</ListBox>
</Grid>
@ -77,26 +78,18 @@
<Label Content="DX, DY:"/>
<TextBox x:Name="ROI_dxdy" Margin="0,0,0,5"/>
<!-- Nombre -->
<Label Content="Nombre:"/>
<TextBox x:Name="ROI_nombre" Margin="0,0,0,5"/>
<Label Content="Imagen:"/>
<ComboBox x:Name="ROI_imagen" Margin="0,0,0,5"/>
<CheckBox x:Name="AllImages" Content="Aplicar a Todas"/>
<!-- Código Numérico -->
<Label Content="Código Numérico:"/>
<TextBox x:Name="ROI_num" Margin="0,0,0,5"/>
<!-- Descripción -->
<Label Content="Descripción:"/>
<TextBox x:Name="ROI_descripcion" Margin="0,0,0,5"/>
<!-- Campo de texto 1 -->
<Label Content="Campo de texto 1:"/>
<TextBox x:Name="ROI_text1" Margin="0,0,0,5"/>
<!-- Campo de texto 2 -->
<Label Content="Campo de texto 2:"/>
<TextBox x:Name="ROI_text2" Margin="0,0,0,5"/>
<!-- Campo de texto 3 -->
<Label Content="Campo de texto 3:"/>
<TextBox x:Name="ROI_text3" Margin="0,0,0,5"/>
<!-- Botones -->
<Button x:Name="Guardar_ROI" Content="Guardar" Margin="0,0,0,5"/>
<Button x:Name="Borrar_ROI" Content="Borrar ROI"/>
</StackPanel>
</Grid>

View File

@ -62,13 +62,8 @@ namespace ROIEditor
// Suscripción a los eventos LostFocus
ROI_xy.LostFocus += GuardarCambiosRoi;
ROI_dxdy.LostFocus += GuardarCambiosRoi;
ROI_nombre.LostFocus += GuardarCambiosRoi;
ROI_num.LostFocus += GuardarCambiosRoi;
ROI_dxdy.LostFocus += GuardarCambiosRoi;
ROI_descripcion.LostFocus += GuardarCambiosRoi;
ROI_text1.LostFocus += GuardarCambiosRoi;
ROI_text2.LostFocus += GuardarCambiosRoi;
ROI_text3.LostFocus += GuardarCambiosRoi;
// Se carga el ultimo estado
Estado = EstadoTrabajo.CargarEstado();
@ -157,12 +152,16 @@ namespace ROIEditor
{
ROI_xy.Text = $"{selectedRoi.X}, {selectedRoi.Y}";
ROI_dxdy.Text = $"{selectedRoi.Width}, {selectedRoi.Height}";
ROI_nombre.Text = selectedRoi.Nombre;
ROI_num.Text = selectedRoi.CodigoNumerico.ToString();
ROI_descripcion.Text = selectedRoi.Descripcion;
ROI_text1.Text = selectedRoi.CampoTexto1;
ROI_text2.Text = selectedRoi.CampoTexto2;
ROI_text3.Text = selectedRoi.CampoTexto3;
for (int i = 0; i < ROI_imagen.Items.Count; i++)
{
if ((string)ROI_imagen.Items[i] == Estado.NombreImagenEditando)
{
ROI_imagen.SelectedIndex = i; // Selecciona el ítem que coincide con el último editado
break;
}
}
}
private void ActualizarDatosROI(Roi selectedRoi)
@ -177,12 +176,7 @@ namespace ROIEditor
selectedRoi.Y = int.Parse(xy[1].Trim());
selectedRoi.Width = int.Parse(dxdy[0].Trim());
selectedRoi.Height = int.Parse(dxdy[1].Trim());
selectedRoi.Nombre = ROI_nombre.Text;
selectedRoi.CodigoNumerico = int.TryParse(ROI_num.Text, out int codigo) ? codigo : 0;
selectedRoi.Descripcion = ROI_descripcion.Text;
selectedRoi.CampoTexto1 = ROI_text1.Text;
selectedRoi.CampoTexto2 = ROI_text2.Text;
selectedRoi.CampoTexto3 = ROI_text3.Text;
// Aquí podrías llamar a un método que realice el guardado específico, si es necesario
// Por ejemplo, actualizar la visualización del ROI o guardar en un archivo JSON
@ -209,15 +203,20 @@ namespace ROIEditor
private void CargarImagenes()
{
// Asumiendo que las imágenes están en una carpeta "Imagenes" dentro del directorio de salida de tu aplicación
string folderPath = Path.Combine(Directory.GetCurrentDirectory(), "Plantillas");
string folderPath = Estado.PNG_Folther_Path();
if (Directory.Exists(folderPath))
{
var archivosImagen = Directory.GetFiles(folderPath, "*.png"); // Asumiendo que buscas archivos .png
ListaImagenes.Items.Clear();
ROI_imagen.Items.Clear();
foreach (var archivo in archivosImagen)
{
// Aquí simplemente añadimos el nombre del archivo a la lista, pero podrías querer añadir un objeto más complejo
ListaImagenes.Items.Add(Path.GetFileName(archivo));
ROI_imagen.Items.Add(Path.GetFileName(archivo));
}
}
else
@ -423,18 +422,7 @@ namespace ROIEditor
Canvas.SetTop(imagenDeFondo, 0);
}
public string PathPlantillasJson()
{
string jsonPath = Path.ChangeExtension(Estado.NombreImagenEditando, ".json");
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Plantillas", jsonPath);
return imagePath;
}
public string PathPlantillasPNG()
{
string jsonPath = Path.ChangeExtension(Estado.NombreImagenEditando, ".png");
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Plantillas", jsonPath);
return imagePath;
}
private void ListaImagenes_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
@ -448,8 +436,7 @@ namespace ROIEditor
ListaDeROIs.Load(Estado.NombreImagenEditando);
ActualizarListaROIsEnUI();
var imagePath = PathPlantillasPNG();
CargarImagenEnTrabajo(imagePath);
CargarImagenEnTrabajo(Estado.PNG_Extension_Path());
CargarEstadoImagen();
}

12
ROI.cs
View File

@ -21,13 +21,9 @@ namespace ROIEditor
public int Y { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public string Nombre { get; set; }
public string NombreImagen { get; set; }
public int CodigoNumerico { get; set; }
public string Descripcion { get; set; }
public string CampoTexto1 { get; set; }
public string CampoTexto2 { get; set; }
public string CampoTexto3 { get; set; }
// Constructor sin parámetros para facilitar la deserialización
public Roi() { }
@ -40,13 +36,9 @@ namespace ROIEditor
Y = y;
Width = width;
Height = height;
Nombre = nombre;
NombreImagen = nombreImagen;
CodigoNumerico = codigoNumerico;
Descripcion = descripcion;
CampoTexto1 = campoTexto1;
CampoTexto2 = campoTexto2;
CampoTexto3 = campoTexto3;
}
public Roi(string nombreImagen, int x, int y, int width, int height)
{