230 lines
9.0 KiB
C#
230 lines
9.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
using System.Windows.Shapes;
|
|
using Microsoft.Data.Sqlite;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using static System.Runtime.InteropServices.JavaScript.JSType;
|
|
|
|
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 int X { get; set; }
|
|
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() { }
|
|
|
|
// Puedes agregar un constructor con parámetros si lo necesitas,
|
|
// para facilitar la creación de instancias de Roi con información específica.
|
|
public Roi(string nombreImagen, int x, int y, int width, int height, string nombre, int codigoNumerico, string descripcion, string campoTexto1, string campoTexto2, string campoTexto3)
|
|
{
|
|
X = x;
|
|
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)
|
|
{
|
|
X = x;
|
|
Y = y;
|
|
Width = width;
|
|
Height = height;
|
|
NombreImagen = nombreImagen;
|
|
}
|
|
|
|
|
|
public Rectangle DibujarRoiEnCanvas(System.Windows.Controls.Canvas ImagenEnTrabajoCanvas)
|
|
{
|
|
Rectangle rect = new Rectangle
|
|
{
|
|
Stroke = Brushes.Red,
|
|
StrokeThickness = 2, // Grosor normal
|
|
Width = Width, // No ajustar aquí por el zoom; ajustar al aplicar el zoom si es necesario
|
|
Height = Height, // No ajustar aquí por el zoom; ajustar al aplicar el zoom si es necesario
|
|
Fill = Brushes.Transparent, // Permite la detección de eventos MouseEnter en todo el rectángulo
|
|
Tag = this // Almacena el Roi en el Tag para identificarlo después
|
|
};
|
|
|
|
Canvas.SetLeft(rect, X);
|
|
Canvas.SetTop(rect, Y);
|
|
ImagenEnTrabajoCanvas.Children.Add(rect); // Asegúrate de que esto se refiere al Canvas, no al ScrollViewer
|
|
|
|
return rect;
|
|
}
|
|
}
|
|
|
|
}
|