CtrEditor/Documentation/WorkspaceConfigurationSyste...

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 3D
    • CanvasCenterX/Y: Posición central del canvas en píxeles
    • ZoomLevel: Nivel de zoom actual del canvas
    • CanvasOffsetX/Y: Offset de transformación del canvas
    • Is3DUpdateEnabled: Estado de las actualizaciones 3D
    • HorizontalScrollOffset/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 UI
    • RestoreWorkspaceState(): Restaura el estado a la UI
    • InitializeDefaultWorkspaceConfig(): 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 principal
    • x:Name="MiddleColumnGrid" al Grid de la segunda columna

Funcionamiento

Guardado Automático

  1. 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

  1. 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

  1. Consistencia: Cada imagen mantiene su configuración visual específica
  2. Productividad: Los usuarios no necesitan reconfigurar la vista cada vez que cambian de imagen
  3. Flexibilidad: Diferentes imágenes pueden tener diferentes configuraciones de trabajo
  4. Transparencia: El sistema funciona automáticamente sin intervención del usuario
  5. 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 y TranslateTransform 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