From 2187783fe29ae19b23c88346ca63d0ef819c7395 Mon Sep 17 00:00:00 2001 From: Miguel Date: Sun, 9 Jun 2024 10:55:21 +0200 Subject: [PATCH] Actualizados todos los objetos Transporte con la nueva logica --- .../Estaticos/ucTransporteCurva.xaml.cs | 45 ++++++++--- .../Estaticos/ucTransporteGuias.xaml.cs | 48 ++++++++---- .../Estaticos/ucTransporteGuiasUnion.xaml.cs | 75 ++++++++++++++----- ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs | 10 +-- 4 files changed, 123 insertions(+), 55 deletions(-) diff --git a/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs b/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs index 8c5d3b9..36051ab 100644 --- a/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs +++ b/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs @@ -1,11 +1,10 @@ -using System.Windows; +using System.ComponentModel; +using System.Windows; using System.Windows.Controls; using CommunityToolkit.Mvvm.ComponentModel; - using CtrEditor.Siemens; using CtrEditor.Simulacion; -using Newtonsoft.Json.Linq; - +using Xceed.Wpf.Toolkit.PropertyGrid.Attributes; namespace CtrEditor.ObjetosSim { @@ -14,7 +13,7 @@ namespace CtrEditor.ObjetosSim /// public partial class osTransporteCurva : osBase, IosBase { - private osBase _osMotor = null; + private osBase Motor = null; private simCurve Simulation_TransporteCurva; @@ -59,8 +58,32 @@ namespace CtrEditor.ObjetosSim private float radioExterno; [ObservableProperty] private float radioInterno; - [ObservableProperty] - private string motor; + + [ObservableProperty] + [property: Description("Link to Motor")] + [property: Category("PLC link:")] + [property: ItemsSource(typeof(osBaseItemsSource))] + string id_Motor; + + partial void OnId_MotorChanged(string value) + { + 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; + } + } [ObservableProperty] [NotifyPropertyChangedFor(nameof(AnguloFinal))] @@ -110,13 +133,11 @@ namespace CtrEditor.ObjetosSim } 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; } - else - _osMotor = ObtenerLink(Motor, typeof(osVMmotorSim)); } public override void ucLoaded() @@ -125,6 +146,8 @@ namespace CtrEditor.ObjetosSim // crear el objeto de simulacion ActualizarLeftTop(); + OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor + if (_visualRepresentation is ucTransporteCurva uc) Simulation_TransporteCurva = AddCurve(RadioInterno,RadioExterno, Angulo, Angulo + Arco_en_grados); diff --git a/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs b/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs index 0649551..012a35d 100644 --- a/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs +++ b/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs @@ -1,9 +1,11 @@ -using System.Windows; +using System.ComponentModel; +using System.Windows; using System.Windows.Controls; using System.Windows.Media; using CommunityToolkit.Mvvm.ComponentModel; using CtrEditor.Siemens; using CtrEditor.Simulacion; +using Xceed.Wpf.Toolkit.PropertyGrid.Attributes; namespace CtrEditor.ObjetosSim { @@ -12,7 +14,7 @@ namespace CtrEditor.ObjetosSim /// public partial class osTransporteGuias : osBase, IosBase { - private osBase _osMotor = null; + private osBase Motor = null; private simTransporte? SimGeometria; private simGuia? Guia_Superior; @@ -24,6 +26,7 @@ namespace CtrEditor.ObjetosSim return "Transporte Guias"; } private string nombre = NombreClase(); + public override string Nombre { get => nombre; @@ -65,11 +68,29 @@ namespace CtrEditor.ObjetosSim Color color = Colors.Blue; [ObservableProperty] - public string motor; + [property: Description("Link to Motor")] + [property: Category("PLC link:")] + [property: ItemsSource(typeof(osBaseItemsSource))] + string id_Motor; - partial void OnMotorChanged(string value) + 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; + } } [ObservableProperty] @@ -112,9 +133,9 @@ namespace CtrEditor.ObjetosSim { UpdateRectangle(SimGeometria, uc.Transporte, Alto, Ancho, Angulo); UpdateOrCreateLine(Guia_Superior, uc.GuiaSuperior); - UpdateOrCreateLine(Guia_Inferior, uc.GuiaInferior) ; + UpdateOrCreateLine(Guia_Inferior, uc.GuiaInferior); - SimGeometria.DistanceGuide2Guide = Alto; + SimGeometria.DistanceGuide2Guide = Alto; SimGeometria.isBrake = esFreno; SetSpeed(); } @@ -126,7 +147,7 @@ namespace CtrEditor.ObjetosSim Ancho = 1; Alto = 0.10f; AltoGuia = 0.03f; - Distance = 0.01f; + Distance = 0.01f; } public override void UpdateGeometryStart() @@ -141,12 +162,9 @@ namespace CtrEditor.ObjetosSim } public override void UpdatePLC(PLCModel plc, int elapsedMilliseconds) { - if (_osMotor != null) - { - if (_osMotor is osVMmotorSim motor) - VelocidadActual = motor.Velocidad; - } else if (Motor.Length > 0) - _osMotor = ObtenerLink(Motor, typeof(osVMmotorSim)); + if (Motor != null) + if (Motor is osVMmotorSim id_motor) + VelocidadActual = id_motor.Velocidad; } public override void ucLoaded() @@ -167,7 +185,7 @@ namespace CtrEditor.ObjetosSim CrearAnimacionStoryBoardTrasnporte(uc.Transporte, InvertirDireccion); } - Motor = Motor; // Forzar la busqueda + OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor } public override void ucUnLoaded() { diff --git a/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs b/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs index a1b317e..4af90ca 100644 --- a/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs +++ b/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs @@ -1,4 +1,5 @@ -using System.Windows; +using System.ComponentModel; +using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Animation; @@ -6,7 +7,7 @@ using System.Windows.Shapes; using CommunityToolkit.Mvvm.ComponentModel; using CtrEditor.Siemens; using CtrEditor.Simulacion; -using SkiaSharp; +using Xceed.Wpf.Toolkit.PropertyGrid.Attributes; namespace CtrEditor.ObjetosSim { @@ -29,6 +30,7 @@ namespace CtrEditor.ObjetosSim return "Transporte Guias Union"; } private string nombre = NombreClase(); + public override string Nombre { get => nombre; @@ -39,13 +41,59 @@ namespace CtrEditor.ObjetosSim Color color; [ObservableProperty] - public string motorA; + [property: Description("Link to Motor A")] + [property: Category("PLC link:")] + [property: ItemsSource(typeof(osBaseItemsSource))] + string id_MotorA; - partial void OnMotorAChanged(string value) + partial void OnId_MotorAChanged(string value) { - _osMotorA = ObtenerLink(MotorA, typeof(osVMmotorSim)); + if (_osMotorA != null) + _osMotorA.PropertyChanged -= OnMotorPropertyChangedA; + if (_mainViewModel != null && value != null && value.Length > 0) + { + _osMotorA = (osVMmotorSim)_mainViewModel.ObjetosSimulables.FirstOrDefault(s => (s is osVMmotorSim && s.Nombre == value), null); + if (_osMotorA != null) + _osMotorA.PropertyChanged += OnMotorPropertyChangedA; + } } + private void OnMotorPropertyChangedA(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == nameof(osVMmotorSim.Nombre)) + { + Id_MotorA = ((osVMmotorSim)sender).Nombre; + } + } + + + [ObservableProperty] + [property: Description("Link to Motor B")] + [property: Category("PLC link:")] + [property: ItemsSource(typeof(osBaseItemsSource))] + string id_MotorB; + + partial void OnId_MotorBChanged(string value) + { + if (_osMotorB != null) + _osMotorB.PropertyChanged -= OnMotorPropertyChangedB; + if (_mainViewModel != null && value != null && value.Length > 0) + { + _osMotorB = (osVMmotorSim)_mainViewModel.ObjetosSimulables.FirstOrDefault(s => (s is osVMmotorSim && s.Nombre == value), null); + if (_osMotorB != null) + _osMotorB.PropertyChanged += OnMotorPropertyChangedB; + } + } + + private void OnMotorPropertyChangedB(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == nameof(osVMmotorSim.Nombre)) + { + Id_MotorB = ((osVMmotorSim)sender).Nombre; + } + } + + [ObservableProperty] public float velocidadActualA; @@ -73,15 +121,6 @@ namespace CtrEditor.ObjetosSim } - - [ObservableProperty] - public string motorB; - - partial void OnMotorBChanged(string value) - { - _osMotorB = ObtenerLink(MotorB, typeof(osVMmotorSim)); - } - [ObservableProperty] public float velocidadActualB; @@ -231,17 +270,12 @@ namespace CtrEditor.ObjetosSim if (_osMotorA is osVMmotorSim motor) VelocidadActualA = motor.Velocidad; } - else if (MotorA.Length > 0) - _osMotorA = ObtenerLink(MotorA, typeof(osVMmotorSim)); if (_osMotorB != null) { if (_osMotorB is osVMmotorSim motor) VelocidadActualB = motor.Velocidad; } - else if (MotorB.Length > 0) - _osMotorB = ObtenerLink(MotorB, typeof(osVMmotorSim)); - } public override void ucLoaded() @@ -277,7 +311,8 @@ namespace CtrEditor.ObjetosSim TransportsVelocidad.Add(uc.TransporteB, new FloatReference(() => VelocidadActualB, value => VelocidadActualB = value)); } - OnMotorAChanged(MotorA); + OnId_MotorAChanged(Id_MotorA); // Link Id_Motor = Motor + OnId_MotorBChanged(Id_MotorB); // Link Id_Motor = Motor } diff --git a/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs b/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs index d41ec16..afa7e86 100644 --- a/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs +++ b/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs @@ -1,18 +1,10 @@ using System.Windows; using System.Windows.Controls; -using System.Windows.Media.Animation; -using System.Windows.Media; using CommunityToolkit.Mvvm.ComponentModel; - using CtrEditor.Siemens; using CtrEditor.Simulacion; -using System.Windows.Input; -using Newtonsoft.Json; -using System.Collections.Generic; using Xceed.Wpf.Toolkit.PropertyGrid.Attributes; - using System.ComponentModel; -using System.Xml.Linq; namespace CtrEditor.ObjetosSim { @@ -161,7 +153,7 @@ namespace CtrEditor.ObjetosSim // El UserControl ya se ha cargado y podemos obtener las coordenadas para // crear el objeto de simulacion ActualizarLeftTop(); - OnId_MotorChanged(Id_Motor); + OnId_MotorChanged(Id_Motor); // Link Id_Motor = Motor if (_visualRepresentation is ucTransporteTTop uc) {