Terminado la logica de Groups y con un mecanismo antibucle basico. Faltaria controlar que los nombres de los objetos no puedan ser iguales.

This commit is contained in:
Miguel 2024-06-09 17:33:09 +02:00
parent 2187783fe2
commit 506ee16ae1
25 changed files with 122 additions and 120 deletions

View File

@ -125,11 +125,14 @@
<ScrollViewer Grid.Row="1" x:Name="ImagenEnTrabajoScrollViewer" HorizontalScrollBarVisibility="Auto" <ScrollViewer Grid.Row="1" x:Name="ImagenEnTrabajoScrollViewer" HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto" PanningMode="Both"> VerticalScrollBarVisibility="Auto" PanningMode="Both">
<Canvas x:Name="ImagenEnTrabajoCanvas" Margin="400"> <Canvas x:Name="ImagenEnTrabajoCanvas" Margin="0">
<!-- El Margin puede ser ajustado según el espacio adicional que quieras proporcionar --> <!-- El Margin puede ser ajustado según el espacio adicional que quieras proporcionar -->
<Canvas.LayoutTransform> <Canvas.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1" /> <TransformGroup>
</Canvas.LayoutTransform> <ScaleTransform x:Name="CanvasScaleTransform" ScaleX="1" ScaleY="1" />
<TranslateTransform x:Name="CanvasTranslateTransform" />
</TransformGroup>
</Canvas.RenderTransform>
</Canvas> </Canvas>
</ScrollViewer> </ScrollViewer>
</Grid> </Grid>

View File

@ -1,27 +1,13 @@
using System.Globalization; using System.Globalization;
using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using CtrEditor.Siemens;
using static System.Runtime.InteropServices.JavaScript.JSType;
using Binding = System.Windows.Data.Binding;
using Label = System.Windows.Controls.Label;
using MouseEventArgs = System.Windows.Input.MouseEventArgs; using MouseEventArgs = System.Windows.Input.MouseEventArgs;
using TextBox = System.Windows.Controls.TextBox;
using UserControl = System.Windows.Controls.UserControl; using UserControl = System.Windows.Controls.UserControl;
using CheckBox = System.Windows.Controls.CheckBox;
using Orientation = System.Windows.Controls.Orientation;
using ListBox = System.Windows.Controls.ListBox;
using CtrEditor.ObjetosSim; using CtrEditor.ObjetosSim;
using System.Windows.Threading;
namespace CtrEditor namespace CtrEditor
@ -38,6 +24,8 @@ namespace CtrEditor
private bool _isDraggingCanvas = false; private bool _isDraggingCanvas = false;
private Image imagenDeFondo; private Image imagenDeFondo;
private DispatcherTimer _zoomTimer;
// Para los UserControl // Para los UserControl
private Point _startPointUserControl; private Point _startPointUserControl;
private UserControl _currentDraggingControl; private UserControl _currentDraggingControl;
@ -51,6 +39,7 @@ namespace CtrEditor
public MainWindow() public MainWindow()
{ {
InitializeComponent(); InitializeComponent();
this.Loaded += MainWindow_Loaded; this.Loaded += MainWindow_Loaded;
ImagenEnTrabajoScrollViewer.PreviewMouseWheel += ImagenEnTrabajoCanvas_MouseWheel; ImagenEnTrabajoScrollViewer.PreviewMouseWheel += ImagenEnTrabajoCanvas_MouseWheel;
ImagenEnTrabajoCanvas.MouseDown += Canvas_MouseDown_Panning; ImagenEnTrabajoCanvas.MouseDown += Canvas_MouseDown_Panning;
@ -374,44 +363,41 @@ namespace CtrEditor
private void Canvas_MouseMove_Panning(object sender, MouseEventArgs e) private void Canvas_MouseMove_Panning(object sender, MouseEventArgs e)
{ {
if (_isDraggingCanvas && !_isDrawingCanvas) if (_isDraggingCanvas)
{ {
// Calcula el nuevo desplazamiento basado en el movimiento del ratón
var currentPosition = e.GetPosition(ImagenEnTrabajoScrollViewer); var currentPosition = e.GetPosition(ImagenEnTrabajoScrollViewer);
var dx = currentPosition.X - _lastMousePosition.X; var dx = currentPosition.X - _lastMousePosition.X;
var dy = currentPosition.Y - _lastMousePosition.Y; var dy = currentPosition.Y - _lastMousePosition.Y;
// Ajusta el desplazamiento del ScrollViewer // Obtener la transformación actual del Canvas
ImagenEnTrabajoScrollViewer.ScrollToHorizontalOffset(ImagenEnTrabajoScrollViewer.HorizontalOffset - dx); var transform = (TranslateTransform)((TransformGroup)ImagenEnTrabajoCanvas.RenderTransform).Children.First(t => t is TranslateTransform);
ImagenEnTrabajoScrollViewer.ScrollToVerticalOffset(ImagenEnTrabajoScrollViewer.VerticalOffset - dy); transform.X += dx;
transform.Y += dy;
// Actualiza la posición del ratón para el próximo movimiento
_lastMousePosition = currentPosition; _lastMousePosition = currentPosition;
} }
} }
private void ImagenEnTrabajoCanvas_MouseWheel(object sender, MouseWheelEventArgs e) private void ImagenEnTrabajoCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
{ {
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform; var tg = (TransformGroup)ImagenEnTrabajoCanvas.RenderTransform;
double zoomFactor = e.Delta > 0 ? 1.1 : 0.9; var st = (ScaleTransform)tg.Children.First(t => t is ScaleTransform);
Point cursorPosition = e.GetPosition(ImagenEnTrabajoScrollViewer); var tt = (TranslateTransform)tg.Children.First(t => t is TranslateTransform);
// Calcular el punto focal del zoom relativo al contenido del ScrollViewer double zoomFactor = e.Delta > 0 ? 1.1 : 0.9;
var absoluteX = ImagenEnTrabajoScrollViewer.HorizontalOffset + cursorPosition.X; Point cursorPosition = e.GetPosition(ImagenEnTrabajoCanvas);
var absoluteY = ImagenEnTrabajoScrollViewer.VerticalOffset + cursorPosition.Y;
// Calcular el punto focal del zoom relativo al contenido del Canvas
var relativeX = cursorPosition.X * st.ScaleX + tt.X;
var relativeY = cursorPosition.Y * st.ScaleY + tt.Y;
// Aplicar el zoom // Aplicar el zoom
st.ScaleX *= zoomFactor; st.ScaleX *= zoomFactor;
st.ScaleY *= zoomFactor; st.ScaleY *= zoomFactor;
// Calcular el nuevo desplazamiento para que el zoom se centre en la posición del cursor // Ajustar la transformación de traducción para mantener el punto de zoom centrado
ImagenEnTrabajoScrollViewer.UpdateLayout(); // Asegurarse de que el layout del ScrollViewer esté actualizado tt.X = relativeX - cursorPosition.X * st.ScaleX;
var newHorizontalOffset = absoluteX * zoomFactor - cursorPosition.X; tt.Y = relativeY - cursorPosition.Y * st.ScaleY;
var newVerticalOffset = absoluteY * zoomFactor - cursorPosition.Y;
// Aplicar el nuevo desplazamiento
ImagenEnTrabajoScrollViewer.ScrollToHorizontalOffset(newHorizontalOffset);
ImagenEnTrabajoScrollViewer.ScrollToVerticalOffset(newVerticalOffset);
e.Handled = true; // Evita el procesamiento adicional del evento e.Handled = true; // Evita el procesamiento adicional del evento
} }

View File

@ -1,12 +1,8 @@
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media.Animation;
using System.Windows.Media; using System.Windows.Media;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using Newtonsoft.Json;
using CtrEditor.Siemens;
using CtrEditor.Simulacion;
using System.Windows.Input;
namespace CtrEditor.ObjetosSim namespace CtrEditor.ObjetosSim
@ -18,6 +14,10 @@ namespace CtrEditor.ObjetosSim
public partial class osTextPlate : osBase, IosBase public partial class osTextPlate : osBase, IosBase
{ {
[JsonIgnore]
public float offsetY;
[JsonIgnore]
public float offsetX;
public static string NombreClase() public static string NombreClase()
{ {
@ -49,11 +49,11 @@ namespace CtrEditor.ObjetosSim
public float angulo; public float angulo;
public override void TopChanging(float oldValue, float newValue) { public override void TopChanging(float oldValue, float newValue) {
UpdateChildsTop(newValue - oldValue); offsetY = newValue - oldValue;
} }
public override void LeftChanging(float oldValue, float newValue) public override void LeftChanging(float oldValue, float newValue)
{ {
UpdateChildsLeft(newValue - oldValue); offsetX = newValue - oldValue;
} }
public osTextPlate() public osTextPlate()

View File

@ -136,7 +136,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
SimGeometria = simulationManager.AddCircle(Diametro, GetCentro(), Mass); SimGeometria = simulationManager.AddCircle(Diametro, GetCentro(), Mass);
} }
public override void ucUnLoaded() public override void ucUnLoaded()

View File

@ -123,7 +123,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
SimGeometria = simulationManager.AddCircle(Diametro, GetCentro(), Mass); SimGeometria = simulationManager.AddCircle(Diametro, GetCentro(), Mass);
} }
public override void ucUnLoaded() public override void ucUnLoaded()

View File

@ -153,7 +153,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }
} }

View File

@ -154,7 +154,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }
} }

View File

@ -87,7 +87,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }
} }

View File

@ -94,7 +94,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
SimGeometria = simulationManager.AddDescarte(Diametro, GetCentro()); SimGeometria = simulationManager.AddDescarte(Diametro, GetCentro());
} }
public override void ucUnLoaded() public override void ucUnLoaded()

View File

@ -62,7 +62,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
if (_visualRepresentation is ucGuia uc) if (_visualRepresentation is ucGuia uc)
SimGeometria = AddLine(simulationManager, uc.Guia); SimGeometria = AddLine(simulationManager, uc.Guia);

View File

@ -144,7 +144,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor

View File

@ -171,7 +171,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion

View File

@ -282,7 +282,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion

View File

@ -152,7 +152,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor
if (_visualRepresentation is ucTransporteTTop uc) if (_visualRepresentation is ucTransporteTTop uc)

View File

@ -107,7 +107,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
OnVelocidadChanged(Velocidad); OnVelocidadChanged(Velocidad);
} }

View File

@ -17,7 +17,7 @@ using Size = System.Drawing.Size;
using Ookii.Dialogs.Wpf; using Ookii.Dialogs.Wpf;
using Rect = System.Windows.Rect; using Rect = System.Windows.Rect;
using System.ComponentModel; using System.ComponentModel;
using Newtonsoft.Json;
namespace CtrEditor.ObjetosSim.Extraccion_Datos namespace CtrEditor.ObjetosSim.Extraccion_Datos
{ {
@ -28,6 +28,11 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
public partial class osBuscarCoincidencias : osBase, IosBase public partial class osBuscarCoincidencias : osBase, IosBase
{ {
[JsonIgnore]
public float offsetY;
[JsonIgnore]
public float offsetX;
[ObservableProperty] [ObservableProperty]
List<Rect> search_rectangles; List<Rect> search_rectangles;
@ -84,11 +89,11 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
public override void TopChanging(float oldValue, float newValue) public override void TopChanging(float oldValue, float newValue)
{ {
UpdateChildsTop(newValue - oldValue); offsetY = newValue - oldValue;
} }
public override void LeftChanging(float oldValue, float newValue) public override void LeftChanging(float oldValue, float newValue)
{ {
UpdateChildsLeft(newValue - oldValue); offsetX = newValue - oldValue;
} }
[ObservableProperty] [ObservableProperty]

View File

@ -113,7 +113,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }
public override void ucUnLoaded() public override void ucUnLoaded()
{ {

View File

@ -3,9 +3,10 @@ using CtrEditor.Siemens;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media; using System.Windows.Media;
using Newtonsoft.Json;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using Xceed.Wpf.Toolkit.PropertyGrid.Attributes;
using System.ComponentModel;
namespace CtrEditor.ObjetosSim namespace CtrEditor.ObjetosSim
{ {
@ -14,7 +15,7 @@ namespace CtrEditor.ObjetosSim
/// </summary> /// </summary>
public partial class osGearEncoder : osBase, IosBase public partial class osGearEncoder : osBase, IosBase
{ {
private osBase _osMotor = null; private osBase Motor = null;
private Stopwatch Stopwatch = new Stopwatch(); private Stopwatch Stopwatch = new Stopwatch();
private double stopwatch_last = 0; private double stopwatch_last = 0;
@ -96,12 +97,31 @@ namespace CtrEditor.ObjetosSim
public float ancho_Dientes; public float ancho_Dientes;
[ObservableProperty] [ObservableProperty]
public float giros_segundo_a_100; public float giros_segundo_a_100;
[ObservableProperty]
public string motor;
partial void OnMotorChanged(string value) [ObservableProperty]
[property: Description("Link to Motor")]
[property: Category("PLC link:")]
[property: ItemsSource(typeof(osBaseItemsSource<osVMmotorSim>))]
string id_Motor;
partial void OnId_MotorChanged(string value)
{ {
_osMotor = ObtenerLink(Motor, typeof(osVMmotorSim)); if (Motor != null)
Motor.PropertyChanged -= OnMotorPropertyChanged;
if (_mainViewModel != null && value != null && value.Length > 0)
{
Motor = (osVMmotorSim)_mainViewModel.ObjetosSimulables.FirstOrDefault(s => (s is osVMmotorSim && s.Nombre == value), null);
if (Motor != null)
Motor.PropertyChanged += OnMotorPropertyChanged;
}
}
private void OnMotorPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(osVMmotorSim.Nombre))
{
Id_Motor = ((osVMmotorSim)sender).Nombre;
}
} }
public osGearEncoder() public osGearEncoder()
@ -121,9 +141,9 @@ namespace CtrEditor.ObjetosSim
} }
public override void UpdatePLC(PLCModel plc, int elapsedMilliseconds) public override void UpdatePLC(PLCModel plc, int elapsedMilliseconds)
{ {
if (_osMotor != null) if (Motor != null)
{ {
if (_osMotor is osVMmotorSim motor) if (Motor is osVMmotorSim motor)
{ {
VelocidadActual = motor.Velocidad; VelocidadActual = motor.Velocidad;
@ -139,8 +159,7 @@ namespace CtrEditor.ObjetosSim
// Actualizar el ángulo // Actualizar el ángulo
Angulo = (Angulo + incrementoAngulo) % 360; Angulo = (Angulo + incrementoAngulo) % 360;
} }
} else if (Motor.Length>0) }
_osMotor = ObtenerLink(Motor, typeof(osVMmotorSim));
} }
public bool DetectarDiente() public bool DetectarDiente()
@ -190,8 +209,8 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor
} }
} }

View File

@ -69,7 +69,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }

View File

@ -94,7 +94,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }
} }

View File

@ -70,7 +70,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }
} }

View File

@ -38,7 +38,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
//if (_visualRepresentation is ucConsensGeneric uc) //if (_visualRepresentation is ucConsensGeneric uc)
// Tags = UserControlFactory.CargarPropiedadesosDatosTags(Consensos, uc.PanelEdicion, null); // Tags = UserControlFactory.CargarPropiedadesosDatosTags(Consensos, uc.PanelEdicion, null);

View File

@ -119,7 +119,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
} }
} }

View File

@ -121,32 +121,42 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty] [ObservableProperty]
[property: Description("This is a link to a faceplate. It works like an anchor.")] [property: Description("This is a link to a faceplate. It works like an anchor.")]
[property: Category("Group:")] [property: Category("Group:")]
[property: ItemsSource(typeof(osBaseItemsSource<osTextPlate>))]
private string group_Panel; private string group_Panel;
protected void UpdateChildsTop(float offsetY) [JsonIgnore]
private osTextPlate TextPlate;
[JsonIgnore]
private bool isUpdatingFromTextPlate = false;
partial void OnGroup_PanelChanged(string value)
{ {
if (!string.IsNullOrEmpty(Nombre) && _mainViewModel != null) if (TextPlate != null)
TextPlate.PropertyChanged -= OnTextPlatePropertyChanged;
if (_mainViewModel != null && value != null && value.Length > 0)
{ {
foreach (var objetoSimulable in _mainViewModel.ObjetosSimulables) TextPlate = (osTextPlate)_mainViewModel.ObjetosSimulables.FirstOrDefault(s => (s is osTextPlate && s.Nombre == value), null);
{ if (TextPlate != null)
if (objetoSimulable != this && objetoSimulable.Group_Panel == Nombre) TextPlate.PropertyChanged += OnTextPlatePropertyChanged;
{
objetoSimulable.Top += offsetY;
} }
} }
}
} private void OnTextPlatePropertyChanged(object sender, PropertyChangedEventArgs e)
protected void UpdateChildsLeft(float offsetX)
{ {
if (!string.IsNullOrEmpty(Nombre) && _mainViewModel != null) if (!isUpdatingFromTextPlate)
{ {
foreach (var objetoSimulable in _mainViewModel.ObjetosSimulables) isUpdatingFromTextPlate = true;
{
if (objetoSimulable != this && objetoSimulable.Group_Panel == Nombre) if (e.PropertyName == nameof(osTextPlate.Nombre))
{ Group_Panel = ((osTextPlate)sender).Nombre;
objetoSimulable.Left += offsetX;
} if (e.PropertyName == nameof(osTextPlate.Top))
} Top += ((osTextPlate)sender).offsetY;
if (e.PropertyName == nameof(osTextPlate.Left))
Left += ((osTextPlate)sender).offsetX;
isUpdatingFromTextPlate = false;
} }
} }
@ -381,6 +391,7 @@ namespace CtrEditor.ObjetosSim
public virtual void ucLoaded() public virtual void ucLoaded()
{ {
ActualizarLeftTop(); ActualizarLeftTop();
OnGroup_PanelChanged(Group_Panel); // Establece el link y se suscribe a los eventos
} }
/// <summary> /// <summary>
@ -443,28 +454,6 @@ namespace CtrEditor.ObjetosSim
/// </summary> /// </summary>
public virtual void UpdatePLCPrimerCiclo() { } public virtual void UpdatePLCPrimerCiclo() { }
/// <summary>
/// Crea una conexion entre los osBase segun el NameLink sea igual al nombre de algun osBase siempre que se cumpla
/// con el requisito que el osBase encontrado sea de tipo tipoOsBase
/// </summary>
/// <param name="NameLink"></param>
/// <param name="tipoOsBase"></param>
/// <returns></returns>
protected osBase ObtenerLink(string NameLink, Type tipoOsBase)
{
if (!string.IsNullOrEmpty(NameLink) && _mainViewModel != null)
{
foreach (var objetoSimulable in _mainViewModel.ObjetosSimulables)
{
if (tipoOsBase.IsInstanceOfType(objetoSimulable) && objetoSimulable.Nombre == NameLink)
{
return objetoSimulable;
}
}
}
return null;
}
protected Storyboard CrearAnimacionMultiStoryBoardTrasnporte(Rectangle transporte, bool invertirDireccion) protected Storyboard CrearAnimacionMultiStoryBoardTrasnporte(Rectangle transporte, bool invertirDireccion)
{ {
if (_visualRepresentation == null) return null; if (_visualRepresentation == null) return null;

View File

@ -130,7 +130,7 @@ namespace CtrEditor.ObjetosSim
{ {
// El UserControl ya se ha cargado y podemos obtener las coordenadas para // El UserControl ya se ha cargado y podemos obtener las coordenadas para
// crear el objeto de simulacion // crear el objeto de simulacion
ActualizarLeftTop(); base.ucLoaded();
if (_visualRepresentation is ucBasicExample uc) if (_visualRepresentation is ucBasicExample uc)
{ {