diff --git a/Documentation/BibliotecaObjetos.md b/Documentation/BibliotecaObjetos.md new file mode 100644 index 0000000..a3b9a94 --- /dev/null +++ b/Documentation/BibliotecaObjetos.md @@ -0,0 +1,110 @@ +# Biblioteca de Objetos Simulables + +## Descripción + +La biblioteca de objetos simulables es una nueva funcionalidad que permite gestionar y organizar objetos simulables en bibliotecas independientes del proyecto actual. Esto facilita la reutilización de objetos entre diferentes proyectos. + +## Características Principales + +### 1. Gestión de Directorios de Biblioteca +- **Agregar directorios**: Permite agregar nuevos directorios que contendrán bibliotecas de objetos +- **Eliminar directorios**: Permite remover directorios de la lista de bibliotecas +- **Persistencia global**: Los directorios se mantienen independientemente del proyecto actual + +### 2. Bibliotecas de Objetos +- **Proyecto actual**: El proyecto actual siempre aparece como una biblioteca +- **Archivos JSON**: Cada archivo JSON en los directorios de biblioteca se muestra como una biblioteca independiente +- **Visualización jerárquica**: Los objetos se organizan por tipo en un TreeView + +### 3. Sistema de Filtros +- **Filtros por tipo**: Permite mostrar/ocultar tipos específicos de objetos +- **Filtros por etiquetas**: Filtrado por etiquetas usando # (ej: #motor #bomba) +- **Filtros especiales**: + - Cloned (objetos clonados) + - Auto Created (objetos creados automáticamente) + - Enable On All Pages (objetos globales) + - Show On This Page (objetos visibles en página actual) + +### 4. Operaciones de Objetos +- **Copiar (Ctrl+C)**: Copia objetos seleccionados al portapapeles interno +- **Pegar (Ctrl+V)**: Pega objetos del portapapeles a la biblioteca seleccionada +- **Eliminar**: Elimina objetos de bibliotecas (no disponible para proyecto actual) +- **Visualizar propiedades**: PropertyGrid de solo lectura para inspeccionar objetos + +### 5. Gestión de Bibliotecas +- **Crear nueva biblioteca**: Crea un archivo JSON vacío como nueva biblioteca +- **Cargar automáticamente**: Las bibliotecas se cargan automáticamente al seleccionar directorios + +## Cómo Usar + +### Acceso +1. Haga clic en el botón **"Biblioteca"** en la barra de herramientas principal (al lado de "Assing Pages") +2. Se abrirá la ventana modal de gestión de bibliotecas + +### Configurar Directorios de Biblioteca +1. En la columna izquierda "Directorios de Biblioteca", haga clic en **"Agregar"** +2. Seleccione la carpeta que contendrá sus bibliotecas de objetos +3. El directorio se agregará a la lista y se guardará automáticamente + +### Navegar Bibliotecas +1. Seleccione un directorio de la lista en la columna izquierda +2. En la columna central aparecerán todas las bibliotecas (archivos JSON) encontradas +3. Seleccione una biblioteca para ver sus objetos organizados por tipo + +### Filtrar Objetos +1. Use la sección "Filtros" para mostrar/ocultar tipos específicos +2. Use el campo de búsqueda para filtrar por etiquetas (ej: `#motor #conveyor`) +3. Active los filtros especiales según sea necesario + +### Copiar/Pegar Objetos +1. **Para copiar**: Seleccione un objeto y presione Ctrl+C o haga clic en "Copiar" +2. **Para pegar**: Seleccione la biblioteca destino y presione Ctrl+V o haga clic en "Pegar" +3. Los objetos se copiarán con nuevos IDs únicos + +### Crear Nueva Biblioteca +1. Seleccione un directorio de biblioteca +2. Haga clic en **"Nueva Biblioteca"** +3. Elija nombre y ubicación para el archivo JSON +4. Se creará una biblioteca vacía lista para usar + +## Casos de Uso + +### Biblioteca de Componentes Estándar +- Cree una biblioteca con motores, sensores y actuadores estándar +- Reutilice estos componentes en múltiples proyectos +- Mantenga configuraciones consistentes entre proyectos + +### Plantillas de Sistemas +- Guarde sistemas completos (ej: línea de ensamblaje básica) +- Use como punto de partida para nuevos proyectos +- Facilite la estandarización de diseños + +### Backup y Versioning +- Mantenga copias de objetos importantes en bibliotecas externas +- Cree versiones de componentes con diferentes configuraciones +- Facilite la colaboración entre equipos + +## Estructura de Archivos + +Las bibliotecas se almacenan como archivos JSON con la misma estructura que los archivos de proyecto: + +```json +{ + "ObjetosSimulables": [...], + "UnitConverter": {...}, + "PLC_ConnectionData": {...} +} +``` + +## Notas Técnicas + +- Los directorios de biblioteca se almacenan en `EstadoPersistente.Instance.LibraryDirectories` +- Los objetos se serializan usando Newtonsoft.Json con `TypeNameHandling.All` +- La funcionalidad es independiente del directorio de trabajo actual +- Los filtros utilizan el mismo sistema que la aplicación principal (`osVisFilter`) + +## Limitaciones + +- No se pueden editar objetos directamente en las bibliotecas (solo copia/pegar) +- La eliminación solo está disponible para bibliotecas externas (no proyecto actual) +- Los archivos JSON deben tener estructura válida de SimulationData \ No newline at end of file diff --git a/MainViewModel.cs b/MainViewModel.cs index 679c6f6..fbc4c90 100644 --- a/MainViewModel.cs +++ b/MainViewModel.cs @@ -24,6 +24,7 @@ using System.Text.RegularExpressions; using System.Collections.Specialized; using CtrEditor.Serialization; // Add this line using CtrEditor.Controls; // Add this using directive +using CtrEditor.PopUps; // Add this using directive namespace CtrEditor { @@ -105,6 +106,7 @@ namespace CtrEditor public ICommand TBMultiPageExtractTagsCommand { get; } public ICommand TBMultiPageAnalizeCommand { get; } public ICommand TBMultiPageMatrixCommand { get; } + public ICommand TBLibraryManagerCommand { get; } public ICommand TBTogglePLCConnectionCommand => new RelayCommand(() => @@ -380,6 +382,7 @@ namespace CtrEditor TBAssingPagesCommand = new RelayCommand(AssingPagesCommand); TBMultiPageAnalizeCommand = new RelayCommand(MultiPageAnalizeCommand); TBMultiPageMatrixCommand = new RelayCommand(MultiPageMatrixCommand); + TBLibraryManagerCommand = new RelayCommand(ShowLibraryManager); stopwatch_Sim = new Stopwatch(); stopwatch_Sim.Start(); @@ -1158,6 +1161,15 @@ namespace CtrEditor { OnPropertyChanged(nameof(SelectedItemOsList)); } + + private void ShowLibraryManager() + { + var libraryWindow = new PopUps.LibraryWindow(); + var libraryViewModel = new PopUps.LibraryWindowViewModel(this); + libraryWindow.DataContext = libraryViewModel; + libraryWindow.Owner = MainWindow; + libraryWindow.ShowDialog(); + } } public class SimulationData diff --git a/MainWindow.xaml b/MainWindow.xaml index e90630e..cc4fa6d 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -251,6 +251,12 @@ + diff --git a/PopUps/LibraryWindow.xaml b/PopUps/LibraryWindow.xaml new file mode 100644 index 0000000..8ba4467 --- /dev/null +++ b/PopUps/LibraryWindow.xaml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +