# 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 