Actualizado logica de ImagenEstado
This commit is contained in:
parent
10ceff7c70
commit
6c7140b73e
|
@ -1,113 +0,0 @@
|
||||||
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 Microsoft.Data.Sqlite;
|
|
||||||
using System.ComponentModel;
|
|
||||||
|
|
||||||
namespace ROIEditor
|
|
||||||
{
|
|
||||||
|
|
||||||
public class DatabaseManager<T>
|
|
||||||
{
|
|
||||||
private readonly string connectionString;
|
|
||||||
private readonly string tableName;
|
|
||||||
private List<T> data = new List<T>();
|
|
||||||
|
|
||||||
public void Add(T item)
|
|
||||||
{
|
|
||||||
data.Add(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Clear()
|
|
||||||
{
|
|
||||||
data.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<T> GetList()
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Count => data.Count;
|
|
||||||
|
|
||||||
public DatabaseManager(string dbPath, string tableName)
|
|
||||||
{
|
|
||||||
connectionString = $"Data Source={dbPath}";
|
|
||||||
this.tableName = tableName;
|
|
||||||
InitializeDatabase();
|
|
||||||
}
|
|
||||||
|
|
||||||
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,
|
|
||||||
SerializeData TEXT
|
|
||||||
)";
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SaveData(string clave)
|
|
||||||
{
|
|
||||||
|
|
||||||
using (var connection = new SqliteConnection(connectionString))
|
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
var deleteCommand = connection.CreateCommand();
|
|
||||||
deleteCommand.CommandText = @"DELETE FROM Roi WHERE Clave = $Clave";
|
|
||||||
deleteCommand.Parameters.AddWithValue("$Clave", clave);
|
|
||||||
deleteCommand.ExecuteNonQuery();
|
|
||||||
|
|
||||||
foreach (var elemento in data)
|
|
||||||
{
|
|
||||||
string serializedData = JsonSerializer.Serialize(elemento);
|
|
||||||
|
|
||||||
var command = connection.CreateCommand();
|
|
||||||
command.CommandText = $"INSERT INTO {tableName} (Clave, SerializeData) VALUES ($Clave, $SerializedData)";
|
|
||||||
command.Parameters.AddWithValue("$Clave", clave);
|
|
||||||
command.Parameters.AddWithValue("$SerializedData", serializedData);
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<T> LoadData(string clave)
|
|
||||||
{
|
|
||||||
var dataList = new List<T>();
|
|
||||||
|
|
||||||
using (var connection = new SqliteConnection(connectionString))
|
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
var command = connection.CreateCommand();
|
|
||||||
command.CommandText = $"SELECT SerializeData FROM {tableName} WHERE Clave = $Clave";
|
|
||||||
command.Parameters.AddWithValue("$Clave", clave);
|
|
||||||
|
|
||||||
using (var reader = command.ExecuteReader())
|
|
||||||
{
|
|
||||||
while (reader.Read())
|
|
||||||
{
|
|
||||||
string serializedData = reader.GetString(0);
|
|
||||||
List<T> data = JsonSerializer.Deserialize<List<T>>(serializedData);
|
|
||||||
dataList.AddRange(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dataList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,198 @@
|
||||||
|
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 Microsoft.Data.Sqlite;
|
||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace ROIEditor
|
||||||
|
{
|
||||||
|
|
||||||
|
public class DatabaseManagerList<T>
|
||||||
|
{
|
||||||
|
private readonly string connectionString;
|
||||||
|
private readonly string tableName;
|
||||||
|
private List<T> data = new();
|
||||||
|
|
||||||
|
public void Add(T item)
|
||||||
|
{
|
||||||
|
data.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
data.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> GetList()
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int IndexOf(T item)
|
||||||
|
{
|
||||||
|
return data.IndexOf(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int Count => data.Count;
|
||||||
|
|
||||||
|
public DatabaseManagerList(string dbPath, string tableName)
|
||||||
|
{
|
||||||
|
connectionString = $"Data Source={dbPath}";
|
||||||
|
this.tableName = tableName;
|
||||||
|
InitializeDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
SerializeData TEXT
|
||||||
|
)";
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveData(string clave)
|
||||||
|
{
|
||||||
|
|
||||||
|
using (var connection = new SqliteConnection(connectionString))
|
||||||
|
{
|
||||||
|
connection.Open();
|
||||||
|
|
||||||
|
var deleteCommand = connection.CreateCommand();
|
||||||
|
deleteCommand.CommandText = $"DELETE FROM {tableName} WHERE Clave = $Clave";
|
||||||
|
deleteCommand.Parameters.AddWithValue("$Clave", clave);
|
||||||
|
deleteCommand.ExecuteNonQuery();
|
||||||
|
|
||||||
|
foreach (var elemento in data)
|
||||||
|
{
|
||||||
|
string serializedData = JsonSerializer.Serialize(elemento);
|
||||||
|
|
||||||
|
var command = connection.CreateCommand();
|
||||||
|
command.CommandText = $"INSERT INTO {tableName} (Clave, SerializeData) VALUES ($Clave, $SerializedData)";
|
||||||
|
command.Parameters.AddWithValue("$Clave", clave);
|
||||||
|
command.Parameters.AddWithValue("$SerializedData", serializedData);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadData(string clave)
|
||||||
|
{
|
||||||
|
data.Clear();
|
||||||
|
|
||||||
|
using (var connection = new SqliteConnection(connectionString))
|
||||||
|
{
|
||||||
|
connection.Open();
|
||||||
|
|
||||||
|
var command = connection.CreateCommand();
|
||||||
|
command.CommandText = $"SELECT SerializeData FROM {tableName} WHERE Clave = $Clave";
|
||||||
|
command.Parameters.AddWithValue("$Clave", clave);
|
||||||
|
|
||||||
|
using (var reader = command.ExecuteReader())
|
||||||
|
{
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
string serializedData = reader.GetString(0);
|
||||||
|
data.Add( JsonSerializer.Deserialize<T>(serializedData) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DatabaseManagerItem<T> where T : new()
|
||||||
|
{
|
||||||
|
private readonly string connectionString;
|
||||||
|
private readonly string tableName;
|
||||||
|
private T data; // Ahora 'data' es un objeto de tipo T
|
||||||
|
|
||||||
|
public DatabaseManagerItem(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(string 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(string 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -22,9 +22,7 @@ namespace ROIEditor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MainWindow : Window
|
public partial class MainWindow : Window
|
||||||
{
|
{
|
||||||
|
|
||||||
private ImagenEstado EstadoImagenActual = new ImagenEstado();
|
|
||||||
|
|
||||||
private Point? clickPosition = null;
|
private Point? clickPosition = null;
|
||||||
private bool _isDrawing = false;
|
private bool _isDrawing = false;
|
||||||
private Point _startPosition;
|
private Point _startPosition;
|
||||||
|
@ -32,8 +30,9 @@ namespace ROIEditor
|
||||||
private Image imagenDeFondo;
|
private Image imagenDeFondo;
|
||||||
private bool _isDragging = false;
|
private bool _isDragging = false;
|
||||||
private Point _lastMousePosition;
|
private Point _lastMousePosition;
|
||||||
public dbROIs ListaDeROIs = new dbROIs();
|
private string NombreImagenEditando;
|
||||||
|
private DatabaseManagerList<Roi> ListaDeROIs = new DatabaseManagerList<Roi>("roiseditor.db","ROIs");
|
||||||
|
private DatabaseManagerItem<ImagenEstado> EstadoImagenActual = new DatabaseManagerItem<ImagenEstado>("imagenes.db","estados");
|
||||||
|
|
||||||
// Constructor de MainWindow
|
// Constructor de MainWindow
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
|
@ -235,7 +234,7 @@ namespace ROIEditor
|
||||||
var height = Math.Abs(endPosition.Y - _startPosition.Y);
|
var height = Math.Abs(endPosition.Y - _startPosition.Y);
|
||||||
|
|
||||||
// Crea el nuevo objeto Roi con la información recopilada
|
// Crea el nuevo objeto Roi con la información recopilada
|
||||||
Roi newRoi = new Roi(EstadoImagenActual.NombreImagen, (int)x, (int)y, (int)width, (int)height);
|
Roi newRoi = new Roi(EstadoImagenActual.Get().NombreImagen, (int)x, (int)y, (int)width, (int)height);
|
||||||
|
|
||||||
// Agrega el nuevo Roi a la lista de ROIs
|
// Agrega el nuevo Roi a la lista de ROIs
|
||||||
ListaDeROIs.Add(newRoi);
|
ListaDeROIs.Add(newRoi);
|
||||||
|
@ -256,9 +255,9 @@ namespace ROIEditor
|
||||||
// Aquí actualizas los controles de la interfaz de usuario que muestran los ROIs
|
// Aquí actualizas los controles de la interfaz de usuario que muestran los ROIs
|
||||||
// Por ejemplo, si tienes una ListBox para los ROIs, actualízala así:
|
// Por ejemplo, si tienes una ListBox para los ROIs, actualízala así:
|
||||||
ListaROIs.ItemsSource = null;
|
ListaROIs.ItemsSource = null;
|
||||||
if (ListaDeROIs.Count() > 0)
|
if (ListaDeROIs.Count > 0)
|
||||||
{
|
{
|
||||||
ListaROIs.ItemsSource = ListaDeROIs.rois;
|
ListaROIs.ItemsSource = ListaDeROIs.GetList();
|
||||||
}
|
}
|
||||||
DibujarROIsEnCanvas();
|
DibujarROIsEnCanvas();
|
||||||
}
|
}
|
||||||
|
@ -361,20 +360,19 @@ namespace ROIEditor
|
||||||
{
|
{
|
||||||
if (ListaImagenes.SelectedItem != null)
|
if (ListaImagenes.SelectedItem != null)
|
||||||
{
|
{
|
||||||
if (EstadoImagenActual.NombreImagen != null)
|
if (NombreImagenEditando != null)
|
||||||
{
|
{
|
||||||
SalvarEstadoImagen();
|
SalvarEstadoImagen();
|
||||||
}
|
}
|
||||||
if (ListaDeROIs.Count()>0)
|
if (ListaDeROIs.Count>0)
|
||||||
{
|
{
|
||||||
ListaDeROIs.GuardarRois();
|
ListaDeROIs.SaveData(NombreImagenEditando);
|
||||||
}
|
}
|
||||||
EstadoImagenActual = new ImagenEstado();
|
NombreImagenEditando = ListaImagenes.SelectedItem.ToString();
|
||||||
EstadoImagenActual.NombreImagen = ListaImagenes.SelectedItem.ToString();
|
|
||||||
ListaDeROIs = new dbROIs(EstadoImagenActual.NombreImagen);
|
|
||||||
|
|
||||||
|
|
||||||
var imagePath = EstadoImagenActual.PathPlantillasPNG();
|
ListaDeROIs.LoadData(EstadoImagenActual.Get().NombreImagen);
|
||||||
|
|
||||||
|
var imagePath = EstadoImagenActual.Get().PathPlantillasPNG();
|
||||||
CargarImagenEnTrabajo(imagePath);
|
CargarImagenEnTrabajo(imagePath);
|
||||||
|
|
||||||
CargarEstadoImagen();
|
CargarEstadoImagen();
|
||||||
|
@ -383,50 +381,44 @@ namespace ROIEditor
|
||||||
|
|
||||||
private void CargarEstadoImagen()
|
private void CargarEstadoImagen()
|
||||||
{
|
{
|
||||||
string jsonPath = EstadoImagenActual.PathPlantillasJson();
|
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform;
|
||||||
|
if (EstadoImagenActual.Load(NombreImagenEditando))
|
||||||
if (File.Exists(jsonPath))
|
|
||||||
{
|
{
|
||||||
string json = File.ReadAllText(jsonPath);
|
var EACargado = EstadoImagenActual.Get();
|
||||||
EstadoImagenActual = JsonConvert.DeserializeObject<ImagenEstado>(json);
|
|
||||||
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform;
|
|
||||||
|
|
||||||
st.ScaleX= EstadoImagenActual.ZoomScaleX ;
|
st.ScaleX = EACargado.ZoomScaleX;
|
||||||
st.ScaleY = EstadoImagenActual.ZoomScaleY;
|
st.ScaleY = EACargado.ZoomScaleY;
|
||||||
|
|
||||||
// Aplicar el nuevo desplazamiento
|
// Aplicar el nuevo desplazamiento
|
||||||
ImagenEnTrabajoScrollViewer.ScrollToHorizontalOffset(EstadoImagenActual.HorizontalOffset);
|
ImagenEnTrabajoScrollViewer.ScrollToHorizontalOffset(EACargado.HorizontalOffset);
|
||||||
ImagenEnTrabajoScrollViewer.ScrollToVerticalOffset(EstadoImagenActual.VerticalOffset);
|
ImagenEnTrabajoScrollViewer.ScrollToVerticalOffset(EACargado.VerticalOffset);
|
||||||
|
|
||||||
DibujarROIsEnCanvas();
|
DibujarROIsEnCanvas();
|
||||||
} else
|
|
||||||
{
|
|
||||||
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform;
|
|
||||||
EstadoImagenActual.ZoomScaleX = st.ScaleX;
|
|
||||||
EstadoImagenActual.ZoomScaleY = st.ScaleY;
|
|
||||||
EstadoImagenActual.HorizontalOffset = EstadoImagenActual.HorizontalOffset;
|
|
||||||
EstadoImagenActual.VerticalOffset = EstadoImagenActual.VerticalOffset;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var EANuevo = EstadoImagenActual.Get();
|
||||||
|
EANuevo.NombreImagen = ListaImagenes.SelectedItem.ToString();
|
||||||
|
EANuevo.ZoomScaleX = st.ScaleX;
|
||||||
|
EANuevo.ZoomScaleY = st.ScaleY;
|
||||||
|
EANuevo.HorizontalOffset = EANuevo.HorizontalOffset;
|
||||||
|
EANuevo.VerticalOffset = EANuevo.VerticalOffset;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SalvarEstadoImagen()
|
private void SalvarEstadoImagen()
|
||||||
{
|
{
|
||||||
|
|
||||||
// Cambia la extensión del archivo de imagen a .json
|
var ea = EstadoImagenActual.Get();
|
||||||
string jsonPath = EstadoImagenActual.PathPlantillasJson();
|
|
||||||
|
|
||||||
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform;
|
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform;
|
||||||
EstadoImagenActual.ZoomScaleX = st.ScaleX;
|
ea.ZoomScaleX = st.ScaleX;
|
||||||
EstadoImagenActual.ZoomScaleY = st.ScaleY;
|
ea.ZoomScaleY = st.ScaleY;
|
||||||
EstadoImagenActual.HorizontalOffset = ImagenEnTrabajoScrollViewer.HorizontalOffset;
|
ea.HorizontalOffset = ImagenEnTrabajoScrollViewer.HorizontalOffset;
|
||||||
EstadoImagenActual.VerticalOffset = ImagenEnTrabajoScrollViewer.VerticalOffset;
|
ea.VerticalOffset = ImagenEnTrabajoScrollViewer.VerticalOffset;
|
||||||
|
|
||||||
// Serializa el estado de la imagen a JSON
|
|
||||||
string json = JsonConvert.SerializeObject(EstadoImagenActual, Formatting.Indented);
|
|
||||||
|
|
||||||
// Escribe el JSON en un archivo
|
|
||||||
File.WriteAllText(jsonPath, json);
|
|
||||||
|
|
||||||
|
EstadoImagenActual.Save(NombreImagenEditando);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -442,7 +434,7 @@ namespace ROIEditor
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dibuja los ROIs
|
// Dibuja los ROIs
|
||||||
foreach (var roi in ListaDeROIs.rois)
|
foreach (var roi in ListaDeROIs.GetList())
|
||||||
{
|
{
|
||||||
Rectangle rect = roi.DibujarRoiEnCanvas(ImagenEnTrabajoCanvas);
|
Rectangle rect = roi.DibujarRoiEnCanvas(ImagenEnTrabajoCanvas);
|
||||||
// Eventos
|
// Eventos
|
||||||
|
@ -473,7 +465,7 @@ namespace ROIEditor
|
||||||
{
|
{
|
||||||
if (sender is Rectangle rect && rect.Tag is Roi roi)
|
if (sender is Rectangle rect && rect.Tag is Roi roi)
|
||||||
{
|
{
|
||||||
int index = ListaDeROIs.rois.IndexOf(roi);
|
int index = ListaDeROIs.IndexOf(roi);
|
||||||
if (index != -1)
|
if (index != -1)
|
||||||
{
|
{
|
||||||
ListaROIs.SelectedIndex = index; // Selecciona el ROI en la lista
|
ListaROIs.SelectedIndex = index; // Selecciona el ROI en la lista
|
||||||
|
|
150
ROI.cs
150
ROI.cs
|
@ -14,155 +14,7 @@ using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||||
|
|
||||||
namespace ROIEditor
|
namespace ROIEditor
|
||||||
{
|
{
|
||||||
|
|
||||||
public class dbROIs
|
|
||||||
{
|
|
||||||
public List<Roi> rois { get; set; }
|
|
||||||
const string dbPath = "Data Source=roiseditor.db";
|
|
||||||
public string NombreImagen;
|
|
||||||
|
|
||||||
public void Add(Roi r)
|
|
||||||
{
|
|
||||||
rois.Add(r);
|
|
||||||
}
|
|
||||||
public int Count() { return rois.Count; }
|
|
||||||
|
|
||||||
public dbROIs()
|
|
||||||
{
|
|
||||||
rois = new List<Roi>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public dbROIs(string nombreImagen)
|
|
||||||
{
|
|
||||||
NombreImagen = nombreImagen;
|
|
||||||
rois = new List<Roi>();
|
|
||||||
CrearBaseDeDatosSiNoExiste();
|
|
||||||
CargarROIs();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CrearBaseDeDatosSiNoExiste()
|
|
||||||
{
|
|
||||||
using (var connection = new SqliteConnection(dbPath))
|
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
var command = connection.CreateCommand();
|
|
||||||
command.CommandText =
|
|
||||||
@"
|
|
||||||
CREATE TABLE IF NOT EXISTS Roi (
|
|
||||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
X INTEGER NOT NULL,
|
|
||||||
Y INTEGER NOT NULL,
|
|
||||||
Width INTEGER NOT NULL,
|
|
||||||
Height INTEGER NOT NULL,
|
|
||||||
Nombre TEXT,
|
|
||||||
NombreImagen TEXT,
|
|
||||||
CodigoNumerico INTEGER,
|
|
||||||
Descripcion TEXT,
|
|
||||||
CampoTexto1 TEXT,
|
|
||||||
CampoTexto2 TEXT,
|
|
||||||
CampoTexto3 TEXT
|
|
||||||
);
|
|
||||||
";
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void CargarROIs()
|
|
||||||
{
|
|
||||||
rois.Clear();
|
|
||||||
using (var connection = new SqliteConnection(dbPath))
|
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
var command = connection.CreateCommand();
|
|
||||||
command.CommandText = @"SELECT * FROM Roi WHERE NombreImagen = $NombreImagen";
|
|
||||||
command.Parameters.AddWithValue("$NombreImagen", NombreImagen);
|
|
||||||
|
|
||||||
using (var reader = command.ExecuteReader())
|
|
||||||
{
|
|
||||||
while (reader.Read())
|
|
||||||
{
|
|
||||||
rois.Add(new Roi
|
|
||||||
{
|
|
||||||
X = reader.GetInt32(reader.GetOrdinal("X")),
|
|
||||||
Y = reader.GetInt32(reader.GetOrdinal("Y")),
|
|
||||||
Width = reader.GetInt32(reader.GetOrdinal("Width")),
|
|
||||||
Height = reader.GetInt32(reader.GetOrdinal("Height")),
|
|
||||||
Nombre = reader.IsDBNull(reader.GetOrdinal("Nombre")) ? null : reader.GetString(reader.GetOrdinal("Nombre")),
|
|
||||||
NombreImagen = reader.GetString(reader.GetOrdinal("NombreImagen")),
|
|
||||||
CodigoNumerico = reader.GetInt32(reader.GetOrdinal("CodigoNumerico")),
|
|
||||||
Descripcion = reader.IsDBNull(reader.GetOrdinal("Descripcion")) ? null : reader.GetString(reader.GetOrdinal("Descripcion")),
|
|
||||||
CampoTexto1 = reader.IsDBNull(reader.GetOrdinal("CampoTexto1")) ? null : reader.GetString(reader.GetOrdinal("CampoTexto1")),
|
|
||||||
CampoTexto2 = reader.IsDBNull(reader.GetOrdinal("CampoTexto2")) ? null : reader.GetString(reader.GetOrdinal("CampoTexto2")),
|
|
||||||
CampoTexto3 = reader.IsDBNull(reader.GetOrdinal("CampoTexto3")) ? null : reader.GetString(reader.GetOrdinal("CampoTexto3")),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void GuardarRois()
|
|
||||||
{
|
|
||||||
using (var connection = new SqliteConnection(dbPath))
|
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
var deleteCommand = connection.CreateCommand();
|
|
||||||
deleteCommand.CommandText = @"DELETE FROM Roi WHERE NombreImagen = $NombreImagen";
|
|
||||||
deleteCommand.Parameters.AddWithValue("$NombreImagen", NombreImagen);
|
|
||||||
deleteCommand.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
using (var connection = new SqliteConnection(dbPath))
|
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
foreach (var roi in rois)
|
|
||||||
{
|
|
||||||
var insertCommand = connection.CreateCommand();
|
|
||||||
insertCommand.CommandText =
|
|
||||||
@"INSERT INTO Roi (X, Y, Width, Height, Nombre, NombreImagen, CodigoNumerico, Descripcion, CampoTexto1, CampoTexto2, CampoTexto3)
|
|
||||||
VALUES ($X, $Y, $Width, $Height, $Nombre, $NombreImagen, $CodigoNumerico, $Descripcion, $CampoTexto1, $CampoTexto2, $CampoTexto3)";
|
|
||||||
|
|
||||||
insertCommand.Parameters.AddWithValue("$X", roi.X);
|
|
||||||
insertCommand.Parameters.AddWithValue("$Y", roi.Y);
|
|
||||||
insertCommand.Parameters.AddWithValue("$Width", roi.Width);
|
|
||||||
insertCommand.Parameters.AddWithValue("$Height", roi.Height);
|
|
||||||
insertCommand.Parameters.AddWithValue("$Nombre", roi.Nombre ?? (object)DBNull.Value);
|
|
||||||
insertCommand.Parameters.AddWithValue("$NombreImagen", roi.NombreImagen);
|
|
||||||
insertCommand.Parameters.AddWithValue("$CodigoNumerico", roi.CodigoNumerico);
|
|
||||||
insertCommand.Parameters.AddWithValue("$Descripcion", roi.Descripcion ?? (object)DBNull.Value);
|
|
||||||
insertCommand.Parameters.AddWithValue("$CampoTexto1", roi.CampoTexto1 ?? (object)DBNull.Value);
|
|
||||||
insertCommand.Parameters.AddWithValue("$CampoTexto2", roi.CampoTexto2 ?? (object)DBNull.Value);
|
|
||||||
insertCommand.Parameters.AddWithValue("$CampoTexto3", roi.CampoTexto3 ?? (object)DBNull.Value);
|
|
||||||
|
|
||||||
insertCommand.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void EliminarRoi( string nombre)
|
|
||||||
{
|
|
||||||
using (var connection = new SqliteConnection(dbPath))
|
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
var command = connection.CreateCommand();
|
|
||||||
command.CommandText = @"DELETE FROM Roi WHERE NombreImagen = $NombreImagen AND Nombre = $Nombre";
|
|
||||||
command.Parameters.AddWithValue("$NombreImagen", NombreImagen);
|
|
||||||
command.Parameters.AddWithValue("$Nombre", nombre);
|
|
||||||
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class Roi
|
public class Roi
|
||||||
{
|
{
|
||||||
public int X { get; set; }
|
public int X { get; set; }
|
||||||
|
|
Loading…
Reference in New Issue