4.4 KiB
4.4 KiB
Sistema de Persistencia de Configuración del Entorno de Trabajo
Resumen
Se ha implementado un sistema completo para guardar y restaurar la configuración del entorno de trabajo para cada imagen, incluyendo la posición del GridSplitter, el estado del canvas (zoom, posición, offset) y el estado de Is3DUpdateEnabled
.
Archivos Creados/Modificados
1. Nuevo Archivo: Models/WorkspaceConfiguration.cs
- Propósito: Contiene la configuración del entorno de trabajo
- Propiedades principales:
GridSplitterPosition
: Altura del GridSplitter que separa vista 2D y 3DCanvasCenterX/Y
: Posición central del canvas en píxelesZoomLevel
: Nivel de zoom actual del canvasCanvasOffsetX/Y
: Offset de transformación del canvasIs3DUpdateEnabled
: Estado de las actualizaciones 3DHorizontalScrollOffset/VerticalScrollOffset
: Posición del scroll
2. Modificado: MainViewModel.cs
- Agregado: Propiedad
WorkspaceConfig
para manejar la configuración - Nuevos métodos:
CaptureWorkspaceState()
: Captura el estado actual desde la UIRestoreWorkspaceState()
: Restaura el estado a la UIInitializeDefaultWorkspaceConfig()
: Inicializa configuración por defecto
3. Modificado: SimulationData
(en MainViewModel.cs)
- Agregado: Propiedad
WorkspaceConfig
para persistir la configuración junto con cada imagen
4. Modificado: Serialization/StateSerializer.cs
- Modificado
SaveState()
: Ahora captura automáticamente el estado del workspace antes de guardar - Modificado
LoadCurrentPageState()
: Carga y restaura la configuración del workspace
5. Modificado: MainWindow.xaml
- Agregado: Nombres a los elementos Grid para poder accederlos desde código:
x:Name="MainGrid"
al Grid principalx:Name="MiddleColumnGrid"
al Grid de la segunda columna
Funcionamiento
Guardado Automático
- Cuando se guarda el estado de una imagen (
SaveState()
), el sistema automáticamente:- Captura la posición actual del GridSplitter
- Captura el estado actual del canvas (zoom, posición, scroll)
- Captura el estado de
Is3DUpdateEnabled
- Guarda toda esta información junto con los datos de la imagen
Carga Automática
- Cuando se carga una imagen (
LoadState()
), el sistema:- Carga la configuración del workspace guardada para esa imagen
- Restaura automáticamente todos los valores a la UI
- Si no hay configuración guardada, usa valores por defecto
Persistencia por Imagen
- Cada imagen tiene su propia configuración independiente
- La configuración se guarda en el mismo archivo JSON que los objetos simulables
- Compatible con versiones anteriores (si no hay configuración, usa valores por defecto)
Características Técnicas
Manejo de Errores
- Todos los métodos de captura y restauración tienen manejo de excepciones
- Los errores se registran en Debug pero no interrumpen el proceso de guardado/carga
Compatibilidad
- Compatible con archivos existentes (retro-compatibilidad)
- Si un archivo no tiene configuración del workspace, se crea una por defecto
Uso del Dispatcher
- La restauración del estado usa
Dispatcher.BeginInvoke()
para asegurar que la UI esté lista - Prioridad
Background
para no bloquear la interfaz
Beneficios
- Consistencia: Cada imagen mantiene su configuración visual específica
- Productividad: Los usuarios no necesitan reconfigurar la vista cada vez que cambian de imagen
- Flexibilidad: Diferentes imágenes pueden tener diferentes configuraciones de trabajo
- Transparencia: El sistema funciona automáticamente sin intervención del usuario
- Robustez: Manejo de errores y compatibilidad con versiones anteriores
Uso
El sistema es completamente automático. Los usuarios simplemente trabajan normalmente y:
- Al cambiar de imagen, la configuración se guarda automáticamente
- Al seleccionar una imagen, su configuración se restaura automáticamente
- El estado de
Is3DUpdateEnabled
se mantiene independiente para cada imagen - La posición del GridSplitter se recuerda para cada imagen
Notas de Implementación
- Se usa
TransformGroup
,ScaleTransform
yTranslateTransform
para manejar el canvas - El GridSplitter se maneja a través de las
RowDefinitions
del Grid de la segunda columna - La configuración se serializa junto con los datos de simulación en formato JSON
- Se mantiene la estructura existente del sistema de serialización