diff --git a/MainViewModel.cs b/MainViewModel.cs
index b713f44..4d9c303 100644
--- a/MainViewModel.cs
+++ b/MainViewModel.cs
@@ -1236,34 +1236,49 @@ namespace CtrEditor
OnPropertyChanged(nameof(SelectedItemOsList));
}
+ // Diccionario para manejar la ventana de configuración de escala
+ private PopUps.ScaleConfigWindow? _scaleConfigWindow;
+
// Método para configurar la escala desde el menú contextual
public void ConfigureScale()
{
- var currentScale = PixelToMeter.Instance.calc.Scale;
- var scaleWindow = new PopUps.ScaleConfigWindow(currentScale);
- scaleWindow.Owner = MainWindow;
-
- if (scaleWindow.ShowDialog() == true)
+ // Verificar si ya existe una ventana de configuración de escala
+ if (_scaleConfigWindow != null && _scaleConfigWindow.IsVisible)
{
- var newScale = scaleWindow.NewScale;
-
- // Detener simulaciones antes de cambiar la escala
- StopSimulation();
- StopFluidSimulation();
- DisconnectPLC();
-
- // Actualizar la escala en el UnitConverter
- PixelToMeter.Instance.calc.SetScale(newScale);
-
- // Forzar redibujo completo del canvas y todos los objetos
- ForceCanvasRedraw();
-
- // Marcar como cambios no guardados ya que esto afecta la configuración de la imagen
- HasUnsavedChanges = true;
-
- // Limpiar historial de undo después de cambiar la escala
- MainWindow?.ClearUndoHistory();
+ _scaleConfigWindow.Activate();
+ return;
}
+
+ var currentScale = PixelToMeter.Instance.calc.Scale;
+ _scaleConfigWindow = new PopUps.ScaleConfigWindow(currentScale, this);
+ _scaleConfigWindow.Owner = MainWindow;
+
+ // Manejar el cierre de la ventana
+ _scaleConfigWindow.Closed += (s, e) => _scaleConfigWindow = null;
+
+ // Mostrar como modeless (no modal)
+ _scaleConfigWindow.Show();
+ }
+
+ // Método público para aplicar la escala desde la ventana modeless
+ public void ApplyScale(float newScale)
+ {
+ // Detener simulaciones antes de cambiar la escala
+ StopSimulation();
+ StopFluidSimulation();
+ DisconnectPLC();
+
+ // Actualizar la escala en el UnitConverter
+ PixelToMeter.Instance.calc.SetScale(newScale);
+
+ // Forzar redibujo completo del canvas y todos los objetos
+ ForceCanvasRedraw();
+
+ // Marcar como cambios no guardados ya que esto afecta la configuración de la imagen
+ HasUnsavedChanges = true;
+
+ // Limpiar historial de undo después de cambiar la escala
+ MainWindow?.ClearUndoHistory();
}
// Método para forzar el redibujo completo del canvas
diff --git a/ObjetosSim/osBase.cs b/ObjetosSim/osBase.cs
index 0a00369..9970345 100644
--- a/ObjetosSim/osBase.cs
+++ b/ObjetosSim/osBase.cs
@@ -1202,10 +1202,8 @@ namespace CtrEditor.ObjetosSim
public void ForceUpdatePositionBindings()
{
// Para Left y Top, actualizar directamente el Canvas ya que tienen lógica especial en OnChanged
- OnPropertyChanged(nameof(Left));
- OnPropertyChanged(nameof(Top));
- // CanvasSetLeftinMeter(Left);
- // CanvasSetTopinMeter(Top);
+ CanvasSetLeftinMeter(Left);
+ CanvasSetTopinMeter(Top);
// Para Ancho y Alto, disparar PropertyChanged para que los bindings se actualicen
OnPropertyChanged(nameof(Ancho));
diff --git a/PopUps/ScaleConfigWindow.xaml b/PopUps/ScaleConfigWindow.xaml
index b00a33f..df486dc 100644
--- a/PopUps/ScaleConfigWindow.xaml
+++ b/PopUps/ScaleConfigWindow.xaml
@@ -80,6 +80,8 @@
+
+
@@ -88,6 +90,11 @@
+