Creado parametro para invertir direccion de marcha en los transportes.

This commit is contained in:
Miguel 2024-05-30 19:18:33 +02:00
parent 09980689fb
commit c4892b1f36
4 changed files with 100 additions and 41 deletions

View File

@ -4,6 +4,7 @@ using CommunityToolkit.Mvvm.ComponentModel;
using CtrEditor.Convertidores; using CtrEditor.Convertidores;
using CtrEditor.Siemens; using CtrEditor.Siemens;
using CtrEditor.Simulacion; using CtrEditor.Simulacion;
using Newtonsoft.Json.Linq;
namespace CtrEditor.ObjetosSim namespace CtrEditor.ObjetosSim
@ -13,16 +14,12 @@ namespace CtrEditor.ObjetosSim
/// </summary> /// </summary>
public partial class osTransporteCurva : osBase, IosBase public partial class osTransporteCurva : osBase, IosBase
{ {
private float frictionCoefficient;
private float velMax50hz; // en metros por minuto
private float tiempoRampa;
private bool esMarcha;
private float _velocidadActual;
private osBase _osMotor = null; private osBase _osMotor = null;
private simCurve Simulation_TransporteCurva; private simCurve Simulation_TransporteCurva;
private float _velocidadActual;
public static string NombreClase() public static string NombreClase()
{ {
return "Transporte Curva 90"; return "Transporte Curva 90";
@ -34,6 +31,30 @@ namespace CtrEditor.ObjetosSim
set => SetProperty(ref nombre, value); set => SetProperty(ref nombre, value);
} }
[ObservableProperty]
public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
{
SetSpeed();
}
[ObservableProperty]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
{
SetSpeed();
}
void SetSpeed()
{
if (InvertirDireccion)
Simulation_TransporteCurva?.SetSpeed(-VelocidadActual);
else
Simulation_TransporteCurva?.SetSpeed(VelocidadActual);
}
[ObservableProperty] [ObservableProperty]
private float radioExterno; private float radioExterno;
[ObservableProperty] [ObservableProperty]
@ -55,30 +76,23 @@ namespace CtrEditor.ObjetosSim
get => Angulo+Arco_en_grados; get => Angulo+Arco_en_grados;
} }
public float VelocidadActual
{
get => _velocidadActual;
set
{
_velocidadActual = value;
Simulation_TransporteCurva?.SetSpeed(value);
OnPropertyChanged(nameof(VelocidadActual));
}
}
private void ActualizarGeometrias() private void ActualizarGeometrias()
{ {
if (_visualRepresentation is ucTransporteCurva uc) if (_visualRepresentation is ucTransporteCurva uc)
{ {
UpdateCurve(Simulation_TransporteCurva, RadioInterno, RadioExterno, Angulo, Angulo+Arco_en_grados); UpdateCurve(Simulation_TransporteCurva, RadioInterno, RadioExterno, Angulo, Angulo+Arco_en_grados);
Simulation_TransporteCurva.Speed = VelocidadActual; SetSpeed();
} }
} }
public float FrictionCoefficient { get => frictionCoefficient; set => frictionCoefficient = value; } [ObservableProperty]
public float VelMax50hz { get => velMax50hz; set => velMax50hz = value; } public float frictionCoefficient;
public float TiempoRampa { get => tiempoRampa; set => tiempoRampa = value; } [ObservableProperty]
public bool EsMarcha { get => esMarcha; set => esMarcha = value; } public float velMax50hz;
[ObservableProperty]
public float tiempoRampa;
[ObservableProperty]
public bool esMarcha;
public osTransporteCurva() public osTransporteCurva()
{ {

View File

@ -31,14 +31,36 @@ namespace CtrEditor.ObjetosSim
} }
[ObservableProperty] [ObservableProperty]
private float velocidadActual; public float velocidadActual;
partial void OnVelocidadActualChanged(float value) partial void OnVelocidadActualChanged(float value)
{ {
SimGeometria?.SetSpeed(value); SetSpeed();
}
[ObservableProperty]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
{
SetSpeed();
if (_visualRepresentation is ucTransporteGuias uc)
{
CrearAnimacionStoryBoardTrasnporte(uc.Transporte, InvertirDireccion);
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
}
}
void SetSpeed()
{
if (InvertirDireccion)
SimGeometria?.SetSpeed(-VelocidadActual);
else
SimGeometria?.SetSpeed(VelocidadActual);
ActualizarAnimacionStoryBoardTransporte(VelocidadActual); ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
} }
[ObservableProperty] [ObservableProperty]
public string motor; public string motor;
@ -141,7 +163,7 @@ namespace CtrEditor.ObjetosSim
Guia_Superior = AddLine(simulationManager, uc.GuiaSuperior); Guia_Superior = AddLine(simulationManager, uc.GuiaSuperior);
Guia_Inferior = AddLine(simulationManager, uc.GuiaInferior); Guia_Inferior = AddLine(simulationManager, uc.GuiaInferior);
CrearAnimacionStoryBoardTrasnporte(uc.Transporte); CrearAnimacionStoryBoardTrasnporte(uc.Transporte, InvertirDireccion);
} }
Motor = Motor; // Forzar la busqueda Motor = Motor; // Forzar la busqueda
} }

View File

@ -33,22 +33,37 @@ namespace CtrEditor.ObjetosSim
set => SetProperty(ref nombre, value); set => SetProperty(ref nombre, value);
} }
private float velocidadActual; [ObservableProperty]
public float VelocidadActual public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
{ {
get => velocidadActual; SetSpeed();
set }
[ObservableProperty]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
{
SetSpeed();
if (_visualRepresentation is ucTransporteTTop uc)
{ {
if (value != velocidadActual) CrearAnimacionStoryBoardTrasnporte(uc.Transporte, InvertirDireccion);
{ ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
velocidadActual = value;
SimGeometria?.SetSpeed(value);
SetProperty(ref velocidadActual, value);
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
}
} }
} }
void SetSpeed()
{
if (InvertirDireccion)
SimGeometria?.SetSpeed(-VelocidadActual);
else
SimGeometria?.SetSpeed(VelocidadActual);
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
}
[ObservableProperty] [ObservableProperty]
public string motor; public string motor;
@ -78,7 +93,7 @@ namespace CtrEditor.ObjetosSim
if (_visualRepresentation is ucTransporteTTop uc) if (_visualRepresentation is ucTransporteTTop uc)
{ {
UpdateRectangle(SimGeometria, uc.Transporte,Alto,Ancho,Angulo); UpdateRectangle(SimGeometria, uc.Transporte,Alto,Ancho,Angulo);
SimGeometria.Speed = VelocidadActual; SetSpeed();
} }
ActualizarAnimacionStoryBoardTransporte(VelocidadActual); ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
} }
@ -120,7 +135,7 @@ namespace CtrEditor.ObjetosSim
if (_visualRepresentation is ucTransporteTTop uc) if (_visualRepresentation is ucTransporteTTop uc)
{ {
SimGeometria = AddRectangle(simulationManager, uc.Transporte, Alto, Ancho, Angulo); SimGeometria = AddRectangle(simulationManager, uc.Transporte, Alto, Ancho, Angulo);
CrearAnimacionStoryBoardTrasnporte(uc.Transporte); CrearAnimacionStoryBoardTrasnporte(uc.Transporte,InvertirDireccion);
} }
} }
public override void ucUnLoaded() public override void ucUnLoaded()

View File

@ -23,6 +23,7 @@ using System.Windows.Input;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using System.Windows.Media.Animation; using System.Windows.Media.Animation;
using System.Diagnostics; using System.Diagnostics;
using HarfBuzzSharp;
namespace CtrEditor.ObjetosSim namespace CtrEditor.ObjetosSim
{ {
@ -245,16 +246,23 @@ namespace CtrEditor.ObjetosSim
return null; return null;
} }
protected void CrearAnimacionStoryBoardTrasnporte(System.Windows.Shapes.Rectangle transporte) protected void CrearAnimacionStoryBoardTrasnporte(System.Windows.Shapes.Rectangle transporte, bool invertirDireccion)
{ {
if (_visualRepresentation == null) return; if (_visualRepresentation == null) return;
if (transporte == null) return; if (transporte == null) return;
// Detener y eliminar el storyboard existente si hay uno
if (_storyboard != null)
{
_storyboard.Stop();
_storyboard.Children.Clear();
}
_storyboard = new Storyboard(); _storyboard = new Storyboard();
var animation = new DoubleAnimation var animation = new DoubleAnimation
{ {
From = 0, From = invertirDireccion ? 20 : 0,
To = 20, // Total Pixels Brush To = invertirDireccion ? 0 : 20, // Total Pixels Brush
Duration = TimeSpan.FromSeconds(PixelToMeter.Instance.calc.PixelsToMeters(20) * 60), Duration = TimeSpan.FromSeconds(PixelToMeter.Instance.calc.PixelsToMeters(20) * 60),
RepeatBehavior = RepeatBehavior.Forever RepeatBehavior = RepeatBehavior.Forever
}; };