From de4193dee37d45b6ee31c4c1ad99e19e6a5b46d6 Mon Sep 17 00:00:00 2001 From: Miguel Date: Thu, 4 Sep 2025 18:25:31 +0200 Subject: [PATCH] Add unit test for hydraulic component type assignability - Created a new test class TestItemsSource in test_osBaseItemsSource.cs. - Implemented TestTypeAssignability method to verify that osHydPipe, osHydDischargeTank, and osHydPump correctly implement the IHydraulicComponent interface. - Added console output to display results of type checks and comparisons. --- CtrEditor.csproj | 5 + ObjetosSim/HydraulicComponents/osHydPipe.cs | 104 +++++++++--- ObjetosSim/HydraulicComponents/osHydPump.cs | 75 +++++++-- ObjetosSim/HydraulicComponents/ucHydPump.xaml | 92 +++-------- .../HydraulicComponents/ucHydPump.xaml.cs | 154 +----------------- ObjetosSim/osBase.cs | 25 ++- imagenes/pump_run.png | Bin 0 -> 20232 bytes imagenes/pump_stop.png | Bin 0 -> 20232 bytes test_osBaseItemsSource.cs | 32 ++++ 9 files changed, 233 insertions(+), 254 deletions(-) create mode 100644 imagenes/pump_run.png create mode 100644 imagenes/pump_stop.png create mode 100644 test_osBaseItemsSource.cs diff --git a/CtrEditor.csproj b/CtrEditor.csproj index b8c6be5..3608e46 100644 --- a/CtrEditor.csproj +++ b/CtrEditor.csproj @@ -74,6 +74,9 @@ + + + @@ -150,6 +153,8 @@ + + diff --git a/ObjetosSim/HydraulicComponents/osHydPipe.cs b/ObjetosSim/HydraulicComponents/osHydPipe.cs index 053339a..92a3917 100644 --- a/ObjetosSim/HydraulicComponents/osHydPipe.cs +++ b/ObjetosSim/HydraulicComponents/osHydPipe.cs @@ -169,21 +169,80 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents // Solo crear elemento si ambos componentes están conectados if (!string.IsNullOrEmpty(Id_ComponenteA) && !string.IsNullOrEmpty(Id_ComponenteB)) { - // Crear el elemento Pipe según la documentación - var pipeElement = new Pipe(Length, Diameter, Roughness); + // Obtener los nombres de nodos correctos para cada componente + string fromNodeName = GetNodeNameForComponent(Id_ComponenteA, true); // true = es el nodo origen + string toNodeName = GetNodeNameForComponent(Id_ComponenteB, false); // false = es el nodo destino - elements.Add(new HydraulicElementDefinition( - name: $"{Nombre}_Pipe", - fromNode: Id_ComponenteA, // Usar el nombre del componente A como nodo origen - toNode: Id_ComponenteB, // Usar el nombre del componente B como nodo destino - element: pipeElement, - description: $"Tubería {Nombre} - L:{Length:F2}m, D:{Diameter*1000:F0}mm ({Id_ComponenteA} → {Id_ComponenteB})" - )); + if (!string.IsNullOrEmpty(fromNodeName) && !string.IsNullOrEmpty(toNodeName)) + { + // Crear el elemento Pipe según la documentación + var pipeElement = new Pipe(Length, Diameter, Roughness); + + elements.Add(new HydraulicElementDefinition( + name: $"{Nombre}_Pipe", + fromNode: fromNodeName, + toNode: toNodeName, + element: pipeElement, + description: $"Tubería {Nombre} - L:{Length:F2}m, D:{Diameter*1000:F0}mm ({fromNodeName} → {toNodeName})" + )); + } } return elements; } + /// + /// Obtiene el nombre del nodo correcto para un componente dado + /// + /// Nombre del componente + /// True si es el nodo origen de la tubería, False si es destino + /// Nombre del nodo o string vacío si no se encuentra + private string GetNodeNameForComponent(string componentName, bool isSource) + { + if (string.IsNullOrEmpty(componentName) || _mainViewModel == null) + return ""; + + // Buscar el componente hidráulico + var component = _mainViewModel.ObjetosSimulables + .FirstOrDefault(s => s is IHydraulicComponent comp && + ((osBase)comp).Nombre == componentName) as IHydraulicComponent; + + if (component == null) + return ""; + + // Obtener los nodos que crea este componente + var nodes = component.GetHydraulicNodes(); + if (nodes == null || !nodes.Any()) + return ""; + + // Determinar qué nodo usar según el tipo de componente + var componentType = component.GetType(); + + // Para tanques: siempre usar su único nodo + if (componentType.Name.Contains("Tank")) + { + return nodes.FirstOrDefault()?.Name ?? ""; + } + + // Para bombas: usar nodo de entrada o salida según corresponda + if (componentType.Name.Contains("Pump")) + { + if (isSource) + { + // Si la tubería sale desde este componente, usar el nodo de salida de la bomba + return nodes.FirstOrDefault(n => n.Name.EndsWith("_Out"))?.Name ?? ""; + } + else + { + // Si la tubería llega a este componente, usar el nodo de entrada de la bomba + return nodes.FirstOrDefault(n => n.Name.EndsWith("_In"))?.Name ?? ""; + } + } + + // Para otros tipos de componentes, usar el primer nodo disponible + return nodes.FirstOrDefault()?.Name ?? ""; + } + public void UpdateHydraulicProperties() { // Actualizar propiedades antes de la simulación si es necesario @@ -195,18 +254,25 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents // Solo procesar si ambos componentes están conectados if (!string.IsNullOrEmpty(Id_ComponenteA) && !string.IsNullOrEmpty(Id_ComponenteB)) { - string branchKey = $"{Id_ComponenteA}->{Id_ComponenteB}"; + // Obtener los nombres de nodos correctos + string fromNodeName = GetNodeNameForComponent(Id_ComponenteA, true); + string toNodeName = GetNodeNameForComponent(Id_ComponenteB, false); - if (flows.TryGetValue(branchKey, out double flow)) + if (!string.IsNullOrEmpty(fromNodeName) && !string.IsNullOrEmpty(toNodeName)) { - CurrentFlow = flow; - } - - // Calcular pérdida de presión entre nodos - if (pressures.TryGetValue(Id_ComponenteA, out double pressureA) && - pressures.TryGetValue(Id_ComponenteB, out double pressureB)) - { - PressureDrop = pressureA - pressureB; + string branchKey = $"{fromNodeName}->{toNodeName}"; + + if (flows.TryGetValue(branchKey, out double flow)) + { + CurrentFlow = flow; + } + + // Calcular pérdida de presión entre nodos + if (pressures.TryGetValue(fromNodeName, out double pressureA) && + pressures.TryGetValue(toNodeName, out double pressureB)) + { + PressureDrop = pressureA - pressureB; + } } } } diff --git a/ObjetosSim/HydraulicComponents/osHydPump.cs b/ObjetosSim/HydraulicComponents/osHydPump.cs index ca836c0..1397547 100644 --- a/ObjetosSim/HydraulicComponents/osHydPump.cs +++ b/ObjetosSim/HydraulicComponents/osHydPump.cs @@ -18,8 +18,33 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents /// public partial class osHydPump : osBase, IHydraulicPump, IosBase { - #region Properties + public static string NombreCategoria() => "Hidraulico"; + public static string NombreClase() + { + return "Bomba Hidráulica"; + } + + #region Properties + + [ObservableProperty] + [property: JsonIgnore] + [property: Category("Apariencia")] + [property: Description("Imagen visual")] + [property: Name("Imagen")] + public ImageSource imageSource_oculta; + + [ObservableProperty] + [property: Category("🎨 Apariencia")] + [property: Description("Tamaño visual de la bomba")] + [property: Name("Tamaño")] + public float tamano; + + public override void OnResize(float Delta_Width, float Delta_Height) + { + Tamano += Delta_Width + Delta_Height; + } + private double _pumpHead = 50.0; // metros private double _maxFlow = 0.01; // m³/s (36 m³/h) private double _speedRatio = 1.0; @@ -103,9 +128,20 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents get => _isRunning; set { - SetProperty(ref _isRunning, value); + if (SetProperty(ref _isRunning, value)) + { + UpdatePumpImage(); + } } } + + private void UpdatePumpImage() + { + if (IsRunning) + ImageSource_oculta = ImageFromPath("/imagenes/pump_run.png"); + else + ImageSource_oculta = ImageFromPath("/imagenes/pump_stop.png"); + } [Category("🔧 Bomba Hidráulica")] [DisplayName("Dirección")] @@ -175,15 +211,11 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents // Los objetos hidráulicos no necesitan actualizar geometría física } - public override void OnResize(float Delta_Width, float Delta_Height) - { - Ancho += Delta_Width; - Alto += Delta_Height; - } - public osHydPump() { Nombre = "Bomba Hidráulica"; + Tamano = 0.30f; + ImageSource_oculta = ImageFromPath("/imagenes/pump_stop.png"); } public override void UpdateGeometryStart() @@ -211,6 +243,7 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents { // Los objetos hidráulicos no necesitan geometría física base.ucLoaded(); + UpdatePumpImage(); } public override void ucUnLoaded() @@ -242,11 +275,17 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents if (HasHydraulicComponents) { + // Calcular velocidad efectiva basada en el estado de la bomba + double effectiveSpeed = IsRunning ? SpeedRatio : 0.0; + + // Asegurar que la velocidad esté en rango válido + effectiveSpeed = Math.Max(0.0, Math.Min(1.0, effectiveSpeed)); + // Crear bomba con parámetros actuales var pump = new PumpHQ( h0: PumpHead, q0: MaxFlow, - speedRel: IsRunning ? SpeedRatio : 0.0, // Si no está funcionando, velocidad = 0 + speedRel: effectiveSpeed, direction: PumpDirection ); @@ -259,6 +298,8 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents ); elements.Add(pumpElement); + + Debug.WriteLine($"Bomba {Nombre}: Creando elemento hidráulico - H0={PumpHead}m, Q0={MaxFlow}m³/s, Velocidad={effectiveSpeed:F2}, Dirección={PumpDirection}"); } return elements; @@ -288,16 +329,25 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents if (flows.ContainsKey(pumpBranchName)) { CurrentFlow = flows[pumpBranchName]; + Debug.WriteLine($"Bomba {Nombre}: Aplicando caudal={CurrentFlow:F6} m³/s ({CurrentFlowLMin:F2} L/min)"); } if (pressures.ContainsKey(inletNodeName)) { CurrentPressure = pressures[inletNodeName]; + Debug.WriteLine($"Bomba {Nombre}: Presión entrada={CurrentPressure:F2} Pa ({CurrentPressureBar:F2} bar)"); } else if (pressures.ContainsKey(outletNodeName)) { CurrentPressure = pressures[outletNodeName]; + Debug.WriteLine($"Bomba {Nombre}: Presión salida={CurrentPressure:F2} Pa ({CurrentPressureBar:F2} bar)"); } + + // Disparar PropertyChanged para actualizar el UI + OnPropertyChanged(nameof(CurrentFlow)); + OnPropertyChanged(nameof(CurrentFlowLMin)); + OnPropertyChanged(nameof(CurrentPressure)); + OnPropertyChanged(nameof(CurrentPressureBar)); } #endregion @@ -345,13 +395,6 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents } #endregion - - #region Static Interface Implementation - - public static string NombreClase() => "Bomba Hidráulica"; - public static string NombreCategoria() => "Componentes Hidráulicos"; - - #endregion } /// diff --git a/ObjetosSim/HydraulicComponents/ucHydPump.xaml b/ObjetosSim/HydraulicComponents/ucHydPump.xaml index 2ae0cbd..50d1115 100644 --- a/ObjetosSim/HydraulicComponents/ucHydPump.xaml +++ b/ObjetosSim/HydraulicComponents/ucHydPump.xaml @@ -3,77 +3,39 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:i="http://schemas.microsoft.com/xaml/behaviors" + xmlns:local="clr-namespace:CtrEditor.ObjetosSim" xmlns:vm="clr-namespace:CtrEditor.ObjetosSim.HydraulicComponents" mc:Ignorable="d"> - + - - + + - - - - + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/ObjetosSim/HydraulicComponents/ucHydPump.xaml.cs b/ObjetosSim/HydraulicComponents/ucHydPump.xaml.cs index 6ba1a86..39ef95f 100644 --- a/ObjetosSim/HydraulicComponents/ucHydPump.xaml.cs +++ b/ObjetosSim/HydraulicComponents/ucHydPump.xaml.cs @@ -3,7 +3,6 @@ using System.Diagnostics; using System.Windows; using System.Windows.Controls; using System.Windows.Media; -using System.Windows.Media.Animation; using CtrEditor.ObjetosSim; using CtrEditor.FuncionesBase; @@ -17,7 +16,6 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents public osBase? Datos { get; set; } public int zIndex_fromFrames { get; set; } = 0; - private Storyboard? _rotationAnimation; private bool _isHighlighted = false; public ucHydPump() @@ -25,13 +23,11 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents InitializeComponent(); this.Loaded += OnLoaded; this.Unloaded += OnUnloaded; - DataContextChanged += OnDataContextChanged; } private void OnLoaded(object sender, RoutedEventArgs e) { Datos?.ucLoaded(); - UpdateVisualState(); } private void OnUnloaded(object sender, RoutedEventArgs e) @@ -39,155 +35,12 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents Datos?.ucUnLoaded(); } - private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) - { - if (DataContext is osHydPump pump) - { - Datos = pump; - pump.PropertyChanged += OnPumpPropertyChanged; - UpdateVisualState(); - } - } - - private void OnPumpPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) - { - if (e.PropertyName == nameof(osHydPump.IsRunning) || - e.PropertyName == nameof(osHydPump.SpeedRatio) || - e.PropertyName == nameof(osHydPump.PumpDirection) || - e.PropertyName == nameof(osHydPump.CurrentFlow) || - e.PropertyName == nameof(osHydPump.CurrentPressure)) - { - UpdateVisualState(); - } - } - - /// - /// Actualiza el estado visual de la bomba - /// - private void UpdateVisualState() - { - if (Datos is not osHydPump pump) return; - - try - { - Dispatcher.BeginInvoke(() => - { - UpdateStatusLED(pump); - UpdateRotationAnimation(pump); - UpdateDirectionArrow(pump); - UpdateStatusInfo(pump); - }); - } - catch (Exception ex) - { - Debug.WriteLine($"Error updating pump visual state: {ex.Message}"); - } - } - - /// - /// Actualiza el LED de estado - /// - private void UpdateStatusLED(osHydPump pump) - { - if (pump.IsRunning && pump.SpeedRatio > 0) - { - StatusLED.Fill = new SolidColorBrush(Colors.LimeGreen); - } - else - { - StatusLED.Fill = new SolidColorBrush(Colors.Red); - } - } - - /// - /// Actualiza la animación de rotación - /// - private void UpdateRotationAnimation(osHydPump pump) - { - _rotationAnimation?.Stop(); - - if (pump.IsRunning && pump.SpeedRatio > 0) - { - // Crear animación de rotación - var rotateTransform = new RotateTransform(); - PumpBackground.RenderTransform = rotateTransform; - PumpBackground.RenderTransformOrigin = new Point(0.5, 0.5); - - var animation = new DoubleAnimation - { - From = 0, - To = 360, - Duration = TimeSpan.FromSeconds(2.0 / pump.SpeedRatio), // Más rápido con mayor velocidad - RepeatBehavior = RepeatBehavior.Forever - }; - - _rotationAnimation = new Storyboard(); - Storyboard.SetTarget(animation, rotateTransform); - Storyboard.SetTargetProperty(animation, new PropertyPath(RotateTransform.AngleProperty)); - _rotationAnimation.Children.Add(animation); - _rotationAnimation.Begin(); - } - else - { - PumpBackground.RenderTransform = null; - } - } - - /// - /// Actualiza la flecha de dirección - /// - private void UpdateDirectionArrow(osHydPump pump) - { - if (pump.PumpDirection == -1) - { - // Cambiar el color de la flecha para indicar dirección inversa - DirectionArrow.Fill = new SolidColorBrush(Colors.Orange); - } - else - { - DirectionArrow.Fill = new SolidColorBrush(Colors.DarkBlue); - } - } - - /// - /// Actualiza la información de estado - /// - private void UpdateStatusInfo(osHydPump pump) - { - // La información de estado se mostrará a través de la etiqueta principal - // El StatusLED ya está configurado para mostrar el estado IsRunning - } - #region IDataContainer Implementation public void Highlight(bool state) { _isHighlighted = state; - - if (state) - { - PumpBackground.Stroke = new SolidColorBrush(Colors.Yellow); - PumpBackground.StrokeThickness = 3; - } - else - { - PumpBackground.Stroke = new SolidColorBrush(Colors.DarkSlateGray); - PumpBackground.StrokeThickness = 2; - } - } - - #endregion - - protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e) - { - base.OnMouseEnter(e); - // No hay elementos adicionales para mostrar en la implementación actual - } - - protected override void OnMouseLeave(System.Windows.Input.MouseEventArgs e) - { - base.OnMouseLeave(e); - // No hay elementos adicionales para ocultar en la implementación actual + // Aquí se podría agregar lógica de resaltado si fuera necesario } public ZIndexEnum ZIndex_Base() @@ -195,9 +48,6 @@ namespace CtrEditor.ObjetosSim.HydraulicComponents return ZIndexEnum.Estaticos; } - ~ucHydPump() - { - _rotationAnimation?.Stop(); - } + #endregion } } diff --git a/ObjetosSim/osBase.cs b/ObjetosSim/osBase.cs index 44d88c0..ba4b314 100644 --- a/ObjetosSim/osBase.cs +++ b/ObjetosSim/osBase.cs @@ -1919,9 +1919,30 @@ namespace CtrEditor.ObjetosSim items.Add(""); foreach (var obj in objetosSimulables) { - if (obj.GetType() == typeof(T)) + try { - items.Add(obj.Nombre); + // Verificar si el tipo T es una interfaz + if (typeof(T).IsInterface) + { + // Para interfaces, verificar si el objeto implementa la interfaz + if (typeof(T).IsAssignableFrom(obj.GetType())) + { + items.Add(obj.Nombre); + } + } + else + { + // Para clases concretas, usar comparación directa de tipos + if (obj.GetType() == typeof(T)) + { + items.Add(obj.Nombre); + } + } + } + catch (Exception ex) + { + // Log the exception but continue processing other objects + System.Diagnostics.Debug.WriteLine($"Error checking type compatibility for {obj?.GetType()?.Name}: {ex.Message}"); } } diff --git a/imagenes/pump_run.png b/imagenes/pump_run.png new file mode 100644 index 0000000000000000000000000000000000000000..46bb0837c9fdaa7104474a891d5876d3915aa00b GIT binary patch literal 20232 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