Agregado del TextPlate
This commit is contained in:
parent
1ce0371d18
commit
0410c87e93
|
@ -10,7 +10,11 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
<Optimize>True</Optimize>
|
<Optimize>False</Optimize>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||||
|
<Optimize>False</Optimize>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -40,6 +44,7 @@
|
||||||
<None Remove="Icons\start.png" />
|
<None Remove="Icons\start.png" />
|
||||||
<None Remove="Icons\stop.png" />
|
<None Remove="Icons\stop.png" />
|
||||||
<None Remove="imagenes\filler.png" />
|
<None Remove="imagenes\filler.png" />
|
||||||
|
<None Remove="imagenes\gear.png" />
|
||||||
<None Remove="imagenes\motorNegro.png" />
|
<None Remove="imagenes\motorNegro.png" />
|
||||||
<None Remove="imagenes\motorVerde.png" />
|
<None Remove="imagenes\motorVerde.png" />
|
||||||
<None Remove="motor2.png" />
|
<None Remove="motor2.png" />
|
||||||
|
@ -92,6 +97,7 @@
|
||||||
<Resource Include="Icons\start.png" />
|
<Resource Include="Icons\start.png" />
|
||||||
<Resource Include="Icons\stop.png" />
|
<Resource Include="Icons\stop.png" />
|
||||||
<Resource Include="imagenes\filler.png" />
|
<Resource Include="imagenes\filler.png" />
|
||||||
|
<Resource Include="imagenes\gear.png" />
|
||||||
<Resource Include="imagenes\motorNegro.png" />
|
<Resource Include="imagenes\motorNegro.png" />
|
||||||
<Resource Include="imagenes\motorVerde.png" />
|
<Resource Include="imagenes\motorVerde.png" />
|
||||||
<Resource Include="imagenes\tank.png" />
|
<Resource Include="imagenes\tank.png" />
|
||||||
|
|
|
@ -15,6 +15,7 @@ using System.Diagnostics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using Xceed.Wpf.Toolkit.PropertyGrid;
|
using Xceed.Wpf.Toolkit.PropertyGrid;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
|
||||||
namespace CtrEditor
|
namespace CtrEditor
|
||||||
|
@ -282,7 +283,28 @@ namespace CtrEditor
|
||||||
var NuevoObjetoDuplicado = JsonConvert.DeserializeObject<osBase>(serializedData, settings);
|
var NuevoObjetoDuplicado = JsonConvert.DeserializeObject<osBase>(serializedData, settings);
|
||||||
if (NuevoObjetoDuplicado != null)
|
if (NuevoObjetoDuplicado != null)
|
||||||
{
|
{
|
||||||
NuevoObjetoDuplicado.Nombre += "_Duplicado";
|
string nombre = NuevoObjetoDuplicado.Nombre;
|
||||||
|
|
||||||
|
// Expresión regular para identificar un nombre que termina con _número
|
||||||
|
Regex regex = new Regex(@"_(\d+)$");
|
||||||
|
|
||||||
|
if (regex.IsMatch(nombre))
|
||||||
|
{
|
||||||
|
// Extraer el número actual y sumarle 1
|
||||||
|
var match = regex.Match(nombre);
|
||||||
|
int numeroActual = int.Parse(match.Groups[1].Value);
|
||||||
|
int nuevoNumero = numeroActual + 1;
|
||||||
|
|
||||||
|
// Reemplazar el número en el nombre
|
||||||
|
nombre = regex.Replace(nombre, $"_{nuevoNumero}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Si no termina con _número, añadir _1
|
||||||
|
nombre += "_1";
|
||||||
|
}
|
||||||
|
|
||||||
|
NuevoObjetoDuplicado.Nombre = nombre;
|
||||||
NuevoObjetoDuplicado.Left += 0.5f;
|
NuevoObjetoDuplicado.Left += 0.5f;
|
||||||
NuevoObjetoDuplicado.Top += 0.5f;
|
NuevoObjetoDuplicado.Top += 0.5f;
|
||||||
ObjetosSimulables.Add(NuevoObjetoDuplicado);
|
ObjetosSimulables.Add(NuevoObjetoDuplicado);
|
||||||
|
|
|
@ -168,11 +168,24 @@
|
||||||
<xctk:PropertyGrid Grid.Row="2" Margin="5" x:Name="PanelEdicion" AutoGenerateProperties="False" SelectedObject="{Binding}">
|
<xctk:PropertyGrid Grid.Row="2" Margin="5" x:Name="PanelEdicion" AutoGenerateProperties="False" SelectedObject="{Binding}">
|
||||||
<xctk:PropertyGrid.EditorDefinitions>
|
<xctk:PropertyGrid.EditorDefinitions>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- String -->
|
||||||
|
<xctk:EditorTemplateDefinition>
|
||||||
|
<xctk:EditorTemplateDefinition.TargetProperties>
|
||||||
|
<xctk:TargetPropertyType Type="{x:Type sys:String}" />
|
||||||
|
</xctk:EditorTemplateDefinition.TargetProperties>
|
||||||
|
<xctk:EditorTemplateDefinition.EditingTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<TextBox Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Text="{Binding Value}" />
|
||||||
|
</DataTemplate>
|
||||||
|
</xctk:EditorTemplateDefinition.EditingTemplate>
|
||||||
|
</xctk:EditorTemplateDefinition>
|
||||||
|
|
||||||
<!-- Velocidad -->
|
<!-- Velocidad -->
|
||||||
<xctk:EditorTemplateDefinition TargetProperties="VelocidadActual">
|
<xctk:EditorTemplateDefinition TargetProperties="VelocidadActual">
|
||||||
<xctk:EditorTemplateDefinition.EditingTemplate>
|
<xctk:EditorTemplateDefinition.EditingTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<xctk:SingleUpDown Background="Beige" Text="{Binding Value, Converter={StaticResource floatFormatter}}"/>
|
<xctk:SingleUpDown Increment="0.01" Background="Beige" Text="{Binding Value, Converter={StaticResource floatFormatter}}" FontWeight="Bold"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</xctk:EditorTemplateDefinition.EditingTemplate>
|
</xctk:EditorTemplateDefinition.EditingTemplate>
|
||||||
</xctk:EditorTemplateDefinition>
|
</xctk:EditorTemplateDefinition>
|
||||||
|
@ -184,7 +197,7 @@
|
||||||
</xctk:EditorTemplateDefinition.TargetProperties>
|
</xctk:EditorTemplateDefinition.TargetProperties>
|
||||||
<xctk:EditorTemplateDefinition.EditingTemplate>
|
<xctk:EditorTemplateDefinition.EditingTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<TextBox Text="{Binding Value, Converter={StaticResource floatFormatter}}"/>
|
<xctk:SingleUpDown Increment="0.01" Text="{Binding Value, Converter={StaticResource floatFormatter}}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</xctk:EditorTemplateDefinition.EditingTemplate>
|
</xctk:EditorTemplateDefinition.EditingTemplate>
|
||||||
</xctk:EditorTemplateDefinition>
|
</xctk:EditorTemplateDefinition>
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
<UserControl x:Class="CtrEditor.ObjetosSim.ucTextPlate"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
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:vm="clr-namespace:CtrEditor.ObjetosSim"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
|
||||||
|
<UserControl.DataContext>
|
||||||
|
<vm:osTextPlate Color_Titulo="Black" Alto_Titulo="0.1"/>
|
||||||
|
</UserControl.DataContext>
|
||||||
|
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Viewbox Grid.Row="0" Height="{Binding Alto_Titulo, Converter={StaticResource MeterToPixelConverter}}" >
|
||||||
|
<Label Content="{Binding Titulo}"
|
||||||
|
VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold"
|
||||||
|
Foreground="{Binding Color_Titulo, Converter={StaticResource ColorToBrushConverter}}"/>
|
||||||
|
</Viewbox>
|
||||||
|
<Rectangle Grid.Row="1" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Fill="{Binding Color, Converter={StaticResource ColorToBrushConverter}}" />
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
|
@ -0,0 +1,153 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
namespace CtrEditor.ObjetosSim
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for ucTextPlate.xaml
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
|
||||||
|
public partial class osTextPlate : osBase, IosBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public static string NombreClase()
|
||||||
|
{
|
||||||
|
return "Plate";
|
||||||
|
}
|
||||||
|
private string nombre = NombreClase();
|
||||||
|
public override string Nombre
|
||||||
|
{
|
||||||
|
get => nombre;
|
||||||
|
set => SetProperty(ref nombre, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
Color color;
|
||||||
|
[ObservableProperty]
|
||||||
|
Color color_Titulo;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
string titulo;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float alto_Titulo;
|
||||||
|
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public float ancho;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float alto;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float angulo;
|
||||||
|
|
||||||
|
public override void TopChanging(float oldValue, float newValue) {
|
||||||
|
UpdateChildsTop(newValue - oldValue);
|
||||||
|
}
|
||||||
|
public override void LeftChanging(float oldValue, float newValue) {
|
||||||
|
UpdateChildsLeft(newValue - oldValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void UpdateChildsTop(float offsetY)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(Nombre) && _mainViewModel != null)
|
||||||
|
{
|
||||||
|
foreach (var objetoSimulable in _mainViewModel.ObjetosSimulables)
|
||||||
|
{
|
||||||
|
if (objetoSimulable != this && objetoSimulable.Group_Panel == Nombre)
|
||||||
|
{
|
||||||
|
objetoSimulable.Top += offsetY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
protected void UpdateChildsLeft(float offsetX)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(Nombre) && _mainViewModel != null)
|
||||||
|
{
|
||||||
|
foreach (var objetoSimulable in _mainViewModel.ObjetosSimulables)
|
||||||
|
{
|
||||||
|
if (objetoSimulable != this && objetoSimulable.Group_Panel == Nombre)
|
||||||
|
{
|
||||||
|
objetoSimulable.Left += offsetX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public osTextPlate()
|
||||||
|
{
|
||||||
|
Ancho = 0.5f;
|
||||||
|
Alto = 0.5f;
|
||||||
|
Alto_Titulo = 0.2f;
|
||||||
|
Color = Colors.Gray;
|
||||||
|
Titulo = "Titulo";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ucUnLoaded()
|
||||||
|
{
|
||||||
|
// El UserControl se esta eliminando
|
||||||
|
// eliminar el objeto de simulacion
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class ucTextPlate : UserControl, IDataContainer
|
||||||
|
{
|
||||||
|
public osBase? Datos { get; set; }
|
||||||
|
|
||||||
|
public ucTextPlate()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
this.Loaded += OnLoaded;
|
||||||
|
this.Unloaded += OnUnloaded;
|
||||||
|
}
|
||||||
|
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Datos?.ucLoaded();
|
||||||
|
}
|
||||||
|
private void OnUnloaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Datos?.ucUnLoaded();
|
||||||
|
}
|
||||||
|
public void Resize(float width, float height)
|
||||||
|
{
|
||||||
|
if (Datos is osTextPlate datos)
|
||||||
|
{
|
||||||
|
datos.Ancho = PixelToMeter.Instance.calc.PixelsToMeters(width);
|
||||||
|
datos.Alto = PixelToMeter.Instance.calc.PixelsToMeters(height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void Move(float LeftPixels, float TopPixels)
|
||||||
|
{
|
||||||
|
if (Datos != null)
|
||||||
|
{
|
||||||
|
Datos.Left = PixelToMeter.Instance.calc.PixelsToMeters(LeftPixels);
|
||||||
|
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void Rotate(float Angle)
|
||||||
|
{
|
||||||
|
if (Datos != null)
|
||||||
|
if (Datos is osTextPlate datos)
|
||||||
|
datos.Angulo = Angle;
|
||||||
|
}
|
||||||
|
public void Highlight(bool State) { }
|
||||||
|
public int ZIndex()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<UserControl x:Class="CtrEditor.ObjetosSim.ucBottGenerator"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
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"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
xmlns:vm="clr-namespace:CtrEditor.ObjetosSim">
|
||||||
|
|
||||||
|
|
||||||
|
<UserControl.DataContext>
|
||||||
|
<vm:osFiller/>
|
||||||
|
</UserControl.DataContext>
|
||||||
|
|
||||||
|
<Grid>
|
||||||
|
<Image Source="/imagenes/gear.png"
|
||||||
|
Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Stretch="Uniform">
|
||||||
|
<Image.RenderTransform>
|
||||||
|
<RotateTransform Angle="{Binding Angulo}" />
|
||||||
|
</Image.RenderTransform>
|
||||||
|
</Image>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
|
@ -0,0 +1,208 @@
|
||||||
|
using CtrEditor.Siemens;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace CtrEditor.ObjetosSim
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for ucBottGenerator.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class osBottGenerator : osBase, IosBase
|
||||||
|
{
|
||||||
|
TimerTON_TOFF _TON_TOFF = new TimerTON_TOFF();
|
||||||
|
// Otros datos y métodos relevantes para la simulación
|
||||||
|
|
||||||
|
private float TiempoRestante;
|
||||||
|
private osBotella UltimaBotella;
|
||||||
|
|
||||||
|
public static string NombreClase()
|
||||||
|
{
|
||||||
|
return "BottGenerator";
|
||||||
|
}
|
||||||
|
private string nombre = NombreClase();
|
||||||
|
public override string Nombre
|
||||||
|
{
|
||||||
|
get => nombre;
|
||||||
|
set => SetProperty(ref nombre, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private float offsetLeftSalida;
|
||||||
|
[ObservableProperty]
|
||||||
|
private float offsetTopSalida;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private string tag_consenso;
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool consenso;
|
||||||
|
|
||||||
|
partial void OnConsensoChanged(bool value)
|
||||||
|
{
|
||||||
|
_TON_TOFF.Senal = value;
|
||||||
|
}
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool consenso_NC;
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool consenso_Filtrado;
|
||||||
|
[ObservableProperty]
|
||||||
|
float filtro_consenso_s;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private float botellas_hora;
|
||||||
|
|
||||||
|
partial void OnBotellas_horaChanged(float value)
|
||||||
|
{
|
||||||
|
Botellas_segundo = value / 3600;
|
||||||
|
}
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private float botellas_segundo;
|
||||||
|
|
||||||
|
partial void OnBotellas_segundoChanged(float value)
|
||||||
|
{
|
||||||
|
Botellas_hora = value * 3600;
|
||||||
|
}
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private float velocidad_actual_percentual;
|
||||||
|
[ObservableProperty]
|
||||||
|
private float diametro_botella;
|
||||||
|
[ObservableProperty]
|
||||||
|
private float ancho;
|
||||||
|
[ObservableProperty]
|
||||||
|
private float alto;
|
||||||
|
[ObservableProperty]
|
||||||
|
private float angulo;
|
||||||
|
|
||||||
|
public osBottGenerator()
|
||||||
|
{
|
||||||
|
Ancho = 0.30f;
|
||||||
|
Alto = 0.30f;
|
||||||
|
Angulo = 0;
|
||||||
|
Velocidad_actual_percentual = 0;
|
||||||
|
Diametro_botella = 0.1f;
|
||||||
|
Botellas_hora = 10000;
|
||||||
|
Filtro_consenso_s = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void UpdatePLC(PLCModel plc, int elapsedMilliseconds)
|
||||||
|
{
|
||||||
|
if (Consenso_NC)
|
||||||
|
Consenso = !LeerBitTag(Tag_consenso);
|
||||||
|
else
|
||||||
|
Consenso = LeerBitTag(Tag_consenso);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void UpdateControl(int elapsedMilliseconds)
|
||||||
|
{
|
||||||
|
bool habilitado;
|
||||||
|
|
||||||
|
_TON_TOFF.Tiempo_ON_s = _TON_TOFF.Tiempo_OFF_s = Filtro_consenso_s;
|
||||||
|
|
||||||
|
if (Consenso_Filtrado)
|
||||||
|
habilitado = _TON_TOFF.SenalFiltrada();
|
||||||
|
else
|
||||||
|
habilitado = Consenso;
|
||||||
|
|
||||||
|
if (habilitado && Velocidad_actual_percentual > 0)
|
||||||
|
{
|
||||||
|
TiempoRestante -= elapsedMilliseconds / 1000.0f;
|
||||||
|
if (TiempoRestante <= 0)
|
||||||
|
{
|
||||||
|
TiempoRestante += 3600 / (Botellas_hora * (Velocidad_actual_percentual / 100.0f));
|
||||||
|
|
||||||
|
var X = Left + OffsetLeftSalida;
|
||||||
|
var Y = Top + OffsetTopSalida;
|
||||||
|
|
||||||
|
if (UltimaBotella != null && UltimaBotella.RemoverDesdeSimulacion)
|
||||||
|
UltimaBotella = null;
|
||||||
|
|
||||||
|
if (UltimaBotella == null)
|
||||||
|
{
|
||||||
|
// No hay botellas, se puede crear una nueva directamente
|
||||||
|
var nuevaBotella = _mainViewModel.CrearObjetoSimulable(typeof(osBotella), X, Y);
|
||||||
|
((osBotella)nuevaBotella).Diametro = Diametro_botella;
|
||||||
|
nuevaBotella.AutoCreated = true;
|
||||||
|
UltimaBotella = (osBotella)nuevaBotella;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Calcular la distancia entre el centro de la última botella y la nueva posición
|
||||||
|
float distancia = (float)Math.Sqrt(Math.Pow(UltimaBotella.Left - X, 2) + Math.Pow(UltimaBotella.Top - Y, 2));
|
||||||
|
float distanciaMinima = Diametro_botella / 2; // Asumiendo que el diámetro de la nueva botella es similar
|
||||||
|
|
||||||
|
if (distancia > distanciaMinima)
|
||||||
|
{
|
||||||
|
var nuevaBotella = _mainViewModel.CrearObjetoSimulable(typeof(osBotella), X, Y);
|
||||||
|
((osBotella)nuevaBotella).Diametro = Diametro_botella;
|
||||||
|
nuevaBotella.AutoCreated = true;
|
||||||
|
UltimaBotella = (osBotella)nuevaBotella;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TiempoRestante = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ucLoaded()
|
||||||
|
{
|
||||||
|
// El UserControl ya se ha cargado y podemos obtener las coordenadas para
|
||||||
|
// crear el objeto de simulacion
|
||||||
|
ActualizarLeftTop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class ucBottGenerator : UserControl, IDataContainer
|
||||||
|
{
|
||||||
|
public osBase? Datos { get; set; }
|
||||||
|
|
||||||
|
public ucBottGenerator()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
this.Loaded += OnLoaded;
|
||||||
|
this.Unloaded += OnUnloaded;
|
||||||
|
}
|
||||||
|
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Datos?.ucLoaded();
|
||||||
|
}
|
||||||
|
private void OnUnloaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Datos?.ucUnLoaded();
|
||||||
|
}
|
||||||
|
public void Resize(float width, float height)
|
||||||
|
{
|
||||||
|
if (Datos is osBottGenerator datos)
|
||||||
|
{
|
||||||
|
datos.Ancho = PixelToMeter.Instance.calc.PixelsToMeters(width);
|
||||||
|
datos.Alto = PixelToMeter.Instance.calc.PixelsToMeters(width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void Move(float LeftPixels, float TopPixels)
|
||||||
|
{
|
||||||
|
if (Datos != null)
|
||||||
|
{
|
||||||
|
Datos.Left = PixelToMeter.Instance.calc.PixelsToMeters(LeftPixels);
|
||||||
|
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void Rotate(float Angle)
|
||||||
|
{
|
||||||
|
if (Datos != null)
|
||||||
|
if (Datos is osBottGenerator datos)
|
||||||
|
datos.Angulo = Angle;
|
||||||
|
}
|
||||||
|
public void Highlight(bool State) { }
|
||||||
|
public int ZIndex()
|
||||||
|
{
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -28,18 +28,37 @@
|
||||||
</UserControl.DataContext>
|
</UserControl.DataContext>
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<Canvas>
|
<Canvas RenderTransformOrigin="0,0">
|
||||||
<StackPanel x:Name="RectanglesContainer">
|
<Canvas.RenderTransform>
|
||||||
<StackPanel.RenderTransform>
|
<TransformGroup>
|
||||||
|
<ScaleTransform/>
|
||||||
|
<SkewTransform/>
|
||||||
<RotateTransform Angle="{Binding Angulo}"/>
|
<RotateTransform Angle="{Binding Angulo}"/>
|
||||||
</StackPanel.RenderTransform>
|
<TranslateTransform/>
|
||||||
<Rectangle x:Name="GuiaSuperior" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}" Height="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter}}" Fill="Blue"
|
</TransformGroup>
|
||||||
Margin="{Binding Distance, Converter={StaticResource DistanceToMarginConverter}}"/>
|
</Canvas.RenderTransform>
|
||||||
<Rectangle x:Name="Transporte" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}" Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}"
|
<StackPanel x:Name="RectanglesContainer">
|
||||||
Margin="{Binding Distance, Converter={StaticResource DistanceToMarginConverter}}"
|
<Rectangle x:Name="GuiaSuperior" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
Fill="{StaticResource BeltBrush}"/>
|
Height="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
<Rectangle x:Name="GuiaInferior" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}" Height="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter}}" Fill="Blue"/>
|
Fill="{Binding Color, Converter={StaticResource ColorToBrushConverter}}"
|
||||||
|
Margin="{Binding Distance, Converter={StaticResource DistanceToMarginConverter}}"/>
|
||||||
|
<Rectangle x:Name="Transporte" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Margin="{Binding Distance, Converter={StaticResource DistanceToMarginConverter}}"
|
||||||
|
Fill="{StaticResource BeltBrush}"/>
|
||||||
|
<Rectangle x:Name="GuiaInferior" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Height="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Fill="{Binding Color, Converter={StaticResource ColorToBrushConverter}}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
<Viewbox Canvas.Top="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Stretch="Uniform">
|
||||||
|
<Label Content="{Binding Nombre}" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" FontSize="18" Opacity="0.5"/>
|
||||||
|
</Viewbox>
|
||||||
</Canvas>
|
</Canvas>
|
||||||
|
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CtrEditor.Siemens;
|
using CtrEditor.Siemens;
|
||||||
using CtrEditor.Simulacion;
|
using CtrEditor.Simulacion;
|
||||||
|
@ -60,6 +61,9 @@ namespace CtrEditor.ObjetosSim
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
Color color = Colors.Blue;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public string motor;
|
public string motor;
|
||||||
|
|
||||||
|
@ -110,10 +114,9 @@ namespace CtrEditor.ObjetosSim
|
||||||
UpdateOrCreateLine(Guia_Superior, uc.GuiaSuperior);
|
UpdateOrCreateLine(Guia_Superior, uc.GuiaSuperior);
|
||||||
UpdateOrCreateLine(Guia_Inferior, uc.GuiaInferior) ;
|
UpdateOrCreateLine(Guia_Inferior, uc.GuiaInferior) ;
|
||||||
|
|
||||||
SimGeometria.DistanceGuide2Guide = Alto;
|
SimGeometria.DistanceGuide2Guide = Alto;
|
||||||
SimGeometria.Speed = VelocidadActual;
|
|
||||||
SimGeometria.isBrake = esFreno;
|
SimGeometria.isBrake = esFreno;
|
||||||
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
|
SetSpeed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +126,7 @@ namespace CtrEditor.ObjetosSim
|
||||||
Ancho = 1;
|
Ancho = 1;
|
||||||
Alto = 0.10f;
|
Alto = 0.10f;
|
||||||
AltoGuia = 0.03f;
|
AltoGuia = 0.03f;
|
||||||
Distance = 0.01f;
|
Distance = 0.01f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UpdateGeometryStart()
|
public override void UpdateGeometryStart()
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
|
|
||||||
<UserControl.DataContext>
|
<UserControl.DataContext>
|
||||||
<vm:osTransporteGuiasUnion/>
|
<vm:osTransporteGuiasUnion Color="Red"/>
|
||||||
</UserControl.DataContext>
|
</UserControl.DataContext>
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
|
@ -67,14 +67,13 @@
|
||||||
AnchoCentro="{Binding AnchoCentral, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
AnchoCentro="{Binding AnchoCentral, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
||||||
Altura="{Binding Alto, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
Altura="{Binding Alto, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
||||||
AltoGuia="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
AltoGuia="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
||||||
Canvas.Top="{Binding Distance, Converter={StaticResource MeterToPixelConverter},ConverterParameter=-1}"
|
Canvas.Top="{Binding Distance, Converter={StaticResource MeterToPixelConverter},ConverterParameter=-1}" Color="{Binding Color}"/>
|
||||||
Color="Blue"/>
|
|
||||||
|
|
||||||
<uc:ThreeLinesControl x:Name="GuiaInferior" AnchoRecto="{Binding AnchoRecto, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
<uc:ThreeLinesControl x:Name="GuiaInferior" AnchoRecto="{Binding AnchoRecto, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
||||||
AnchoCentro="{Binding AnchoCentral, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
AnchoCentro="{Binding AnchoCentral, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
||||||
Altura="{Binding Alto, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
Altura="{Binding Alto, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
||||||
AltoGuia="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
AltoGuia="{Binding AltoGuia, Converter={StaticResource MeterToPixelConverter},ConverterParameter=1}"
|
||||||
Color="Blue">
|
Color="{Binding Color}">
|
||||||
|
|
||||||
<Canvas.Top>
|
<Canvas.Top>
|
||||||
<MultiBinding Converter="{StaticResource SumConverter}">
|
<MultiBinding Converter="{StaticResource SumConverter}">
|
||||||
|
|
|
@ -36,7 +36,7 @@ namespace CtrEditor.ObjetosSim
|
||||||
}
|
}
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
string color;
|
Color color;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public string motorA;
|
public string motorA;
|
||||||
|
|
|
@ -9,25 +9,35 @@
|
||||||
|
|
||||||
|
|
||||||
<UserControl.DataContext>
|
<UserControl.DataContext>
|
||||||
<vm:osVMmotorSim ImageSource_oculta="/imagenes/motorNegro.png" />
|
<vm:osVMmotorSim ImageSource_oculta="/imagenes/motorNegro.png"/>
|
||||||
</UserControl.DataContext>
|
</UserControl.DataContext>
|
||||||
|
|
||||||
<Grid>
|
<Grid RenderTransformOrigin="0,0">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RenderTransform>
|
||||||
<RowDefinition Height="Auto" />
|
<TransformGroup>
|
||||||
<RowDefinition Height="*" />
|
<RotateTransform Angle="{Binding Angulo}"/>
|
||||||
</Grid.RowDefinitions>
|
</TransformGroup>
|
||||||
|
</Grid.RenderTransform>
|
||||||
|
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Label Grid.Row="0" Content="{Binding Nombre}"
|
<Image Grid.Column="0" Source="{Binding ImageSource_oculta}"
|
||||||
|
Width="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Height="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Stretch="Uniform"/>
|
||||||
|
|
||||||
|
<Viewbox Grid.Column="1" Stretch="Uniform">
|
||||||
|
<Label Content="{Binding Nombre}"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
Foreground="Black"/>
|
Foreground="Black"
|
||||||
|
Opacity="0.5"/>
|
||||||
<Image Grid.Row="1" Source="{Binding ImageSource_oculta}"
|
</Viewbox>
|
||||||
Width="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
|
||||||
Height="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
|
||||||
Stretch="Uniform"/>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
@ -35,6 +35,9 @@ namespace CtrEditor.ObjetosSim
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public ImageSource imageSource_oculta;
|
public ImageSource imageSource_oculta;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public float angulo;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public float tamano;
|
public float tamano;
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
|
@ -105,6 +108,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();
|
ActualizarLeftTop();
|
||||||
|
OnVelocidadChanged(Velocidad);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,7 +140,11 @@ namespace CtrEditor.ObjetosSim
|
||||||
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Rotate(float Angle) { }
|
public void Rotate(float Angle) {
|
||||||
|
if (Datos != null)
|
||||||
|
if (Datos is osVMmotorSim datos)
|
||||||
|
datos.Angulo = Angle;
|
||||||
|
}
|
||||||
public void Highlight(bool State) { }
|
public void Highlight(bool State) { }
|
||||||
public int ZIndex()
|
public int ZIndex()
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,7 +12,15 @@
|
||||||
<vm:osBoton Color="#FFADE6C0" ColorButton_oculto="#FFC72323"/>
|
<vm:osBoton Color="#FFADE6C0" ColorButton_oculto="#FFC72323"/>
|
||||||
</UserControl.DataContext>
|
</UserControl.DataContext>
|
||||||
|
|
||||||
<Grid>
|
<Canvas RenderTransformOrigin="0.5,0.5">
|
||||||
|
<Canvas.RenderTransform>
|
||||||
|
<TransformGroup>
|
||||||
|
<ScaleTransform/>
|
||||||
|
<SkewTransform/>
|
||||||
|
<RotateTransform Angle="{Binding Angulo}"/>
|
||||||
|
<TranslateTransform/>
|
||||||
|
</TransformGroup>
|
||||||
|
</Canvas.RenderTransform>
|
||||||
<Border x:Name="BackgroundRectangle"
|
<Border x:Name="BackgroundRectangle"
|
||||||
BorderBrush="Black"
|
BorderBrush="Black"
|
||||||
BorderThickness="2"
|
BorderThickness="2"
|
||||||
|
@ -27,10 +35,18 @@
|
||||||
StrokeThickness="2"
|
StrokeThickness="2"
|
||||||
Width="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
Width="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
Height="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
Height="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
|
Canvas.Top="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}, ConverterParameter=0.5}"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
VerticalAlignment="Bottom"
|
VerticalAlignment="Bottom"
|
||||||
MouseLeftButtonDown="Ellipse_MouseLeftButtonDown"
|
MouseLeftButtonDown="Ellipse_MouseLeftButtonDown"
|
||||||
MouseLeftButtonUp="Ellipse_MouseLeftButtonUp">
|
MouseLeftButtonUp="Ellipse_MouseLeftButtonUp">
|
||||||
</Ellipse>
|
</Ellipse>
|
||||||
</Grid>
|
<Viewbox Height="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}, ConverterParameter=0.5}"
|
||||||
|
Width="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}">
|
||||||
|
<Label Content="{Binding Button_Name}"
|
||||||
|
VerticalAlignment="Top" HorizontalAlignment="Center"
|
||||||
|
Foreground="{Binding Color_Titulo, Converter={StaticResource ColorToBrushConverter}}"/>
|
||||||
|
</Viewbox>
|
||||||
|
|
||||||
|
</Canvas>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
|
@ -26,9 +26,15 @@ namespace CtrEditor.ObjetosSim
|
||||||
set => SetProperty(ref nombre, value);
|
set => SetProperty(ref nombre, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
string button_Name;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public bool tipo_NC;
|
public bool tipo_NC;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
Color color_Titulo;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
Color color;
|
Color color;
|
||||||
|
|
||||||
|
@ -41,6 +47,10 @@ namespace CtrEditor.ObjetosSim
|
||||||
private Color colorButton_oculto;
|
private Color colorButton_oculto;
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public float tamano;
|
public float tamano;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public float angulo;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public bool estado;
|
public bool estado;
|
||||||
|
|
||||||
|
@ -75,6 +85,8 @@ namespace CtrEditor.ObjetosSim
|
||||||
Tag = "M50.0";
|
Tag = "M50.0";
|
||||||
// Set initial color
|
// Set initial color
|
||||||
Color = Colors.LightBlue;
|
Color = Colors.LightBlue;
|
||||||
|
color_Titulo = Colors.Black;
|
||||||
|
button_Name = "TAG";
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UpdateGeometryStart()
|
public override void UpdateGeometryStart()
|
||||||
|
@ -163,7 +175,10 @@ namespace CtrEditor.ObjetosSim
|
||||||
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Rotate(float Angle) { }
|
public void Rotate(float Angle) {
|
||||||
|
if (Datos is osBoton osBotonData)
|
||||||
|
osBotonData.Angulo = Angle;
|
||||||
|
}
|
||||||
public void Highlight(bool State) { }
|
public void Highlight(bool State) { }
|
||||||
public int ZIndex()
|
public int ZIndex()
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,27 +16,29 @@
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
<!-- Columna para el Label -->
|
<!-- Columna para el Label -->
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
<!-- Columna para la Image -->
|
<!-- Columna para la Image -->
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
<!-- Columna para el Rectangle -->
|
<!-- Columna para el Rectangle -->
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Grid.RenderTransform>
|
<Grid.RenderTransform>
|
||||||
<RotateTransform Angle="{Binding Angulo}" CenterX="0" CenterY="0"/>
|
<RotateTransform Angle="{Binding Angulo}" CenterX="0" CenterY="0"/>
|
||||||
</Grid.RenderTransform>
|
</Grid.RenderTransform>
|
||||||
|
|
||||||
<!-- Label en la primera columna -->
|
<!-- Label en la primera columna -->
|
||||||
<Label Content="{Binding Nombre}" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="0" Foreground="{Binding Color}" >
|
<Viewbox Grid.Column="0" Stretch="UniformToFill">
|
||||||
|
<Label Content="{Binding Nombre}"
|
||||||
</Label>
|
VerticalAlignment="Center" HorizontalAlignment="Center" Opacity="0.8" FontWeight="Bold" Foreground="{Binding Color}"/>
|
||||||
|
</Viewbox>
|
||||||
|
|
||||||
<Image Source="/Icons/fotocelula.png"
|
<Image Source="/Icons/fotocelula.png"
|
||||||
Width="{Binding Alto, Converter={StaticResource MeterToPixelConverter}, ConverterParameter=3}"
|
Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}, ConverterParameter=0.1}"
|
||||||
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}, ConverterParameter=3}"
|
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}, ConverterParameter=2}"
|
||||||
VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,0,0,0" Grid.Column="1"/>
|
VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,0,0,0" Grid.Column="1"/>
|
||||||
|
|
||||||
<Rectangle x:Name="Photocell" Grid.Column="2" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}" Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}">
|
<Rectangle x:Name="Photocell" Grid.Column="2" Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}, ConverterParameter=0.9}"
|
||||||
|
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}">
|
||||||
<Rectangle.Fill>
|
<Rectangle.Fill>
|
||||||
<VisualBrush x:Name="MovingPattern" TileMode="Tile" Viewport="0,0,3,3" ViewportUnits="Absolute" Viewbox="0,0,3,3" ViewboxUnits="Absolute">
|
<VisualBrush x:Name="MovingPattern" TileMode="Tile" Viewport="0,0,3,3" ViewportUnits="Absolute" Viewbox="0,0,3,3" ViewboxUnits="Absolute">
|
||||||
<VisualBrush.Visual>
|
<VisualBrush.Visual>
|
||||||
|
@ -46,8 +48,8 @@
|
||||||
</VisualBrush.Visual>
|
</VisualBrush.Visual>
|
||||||
</VisualBrush>
|
</VisualBrush>
|
||||||
</Rectangle.Fill>
|
</Rectangle.Fill>
|
||||||
<!-- No se aplica la transformación aquí -->
|
|
||||||
</Rectangle>
|
</Rectangle>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|
||||||
</UserControl>
|
</UserControl>
|
|
@ -92,8 +92,8 @@ namespace CtrEditor.ObjetosSim
|
||||||
// Add properties dynamically based on attributes
|
// Add properties dynamically based on attributes
|
||||||
var properties = TypeDescriptor.GetProperties(selectedObject)
|
var properties = TypeDescriptor.GetProperties(selectedObject)
|
||||||
.Cast<PropertyDescriptor>()
|
.Cast<PropertyDescriptor>()
|
||||||
.Where(prop => !prop.Attributes.OfType<HiddenAttribute>().Any());
|
.Where(prop => !prop.Attributes.OfType<HiddenAttribute>().Any()).OrderBy(prop => prop.Name);
|
||||||
|
|
||||||
foreach (var property in properties)
|
foreach (var property in properties)
|
||||||
{
|
{
|
||||||
var displayNameAttr = property.Attributes.OfType<DisplayNameAttribute>().FirstOrDefault();
|
var displayNameAttr = property.Attributes.OfType<DisplayNameAttribute>().FirstOrDefault();
|
||||||
|
@ -112,8 +112,11 @@ namespace CtrEditor.ObjetosSim
|
||||||
{
|
{
|
||||||
propertyDefinition.DisplayName = property.Name.Replace("_", " ");
|
propertyDefinition.DisplayName = property.Name.Replace("_", " ");
|
||||||
}
|
}
|
||||||
|
if (property.PropertyType == typeof(double) || property.PropertyType == typeof(float) || property.PropertyType == typeof(string) || property.PropertyType == typeof(int) ||
|
||||||
propertyGrid.PropertyDefinitions.Add(propertyDefinition);
|
property.PropertyType == typeof(bool) || property.PropertyType == typeof(Color))
|
||||||
|
{
|
||||||
|
propertyGrid.PropertyDefinitions.Add(propertyDefinition);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace CtrEditor.ObjetosSim.UserControls
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.Loaded += ThreeLinesControl_Loaded;
|
this.Loaded += ThreeLinesControl_Loaded;
|
||||||
Color = Brushes.Gray;
|
//Color = Colors.Gray;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ThreeLinesControl_Loaded(object sender, RoutedEventArgs e)
|
private void ThreeLinesControl_Loaded(object sender, RoutedEventArgs e)
|
||||||
|
@ -31,8 +31,14 @@ namespace CtrEditor.ObjetosSim.UserControls
|
||||||
CreateOrUpdateRectangles();
|
CreateOrUpdateRectangles();
|
||||||
}
|
}
|
||||||
|
|
||||||
[ObservableProperty]
|
public Color Color
|
||||||
private Brush color;
|
{
|
||||||
|
get { return (Color)GetValue(ColorProperty); }
|
||||||
|
set { SetValue(ColorProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty ColorProperty =
|
||||||
|
DependencyProperty.Register("Color", typeof(Color), typeof(ThreeLinesControl), new PropertyMetadata(Colors.Red, OnDimensionsChanged));
|
||||||
|
|
||||||
public double AnchoRecto
|
public double AnchoRecto
|
||||||
{
|
{
|
||||||
|
@ -85,7 +91,7 @@ namespace CtrEditor.ObjetosSim.UserControls
|
||||||
{
|
{
|
||||||
Width = AnchoRecto,
|
Width = AnchoRecto,
|
||||||
Height = AltoGuia,
|
Height = AltoGuia,
|
||||||
Fill = Color
|
Fill = new SolidColorBrush(Color)
|
||||||
};
|
};
|
||||||
Canvas.SetLeft(_liz, 0);
|
Canvas.SetLeft(_liz, 0);
|
||||||
Canvas.SetTop(_liz, -AltoGuia / 2);
|
Canvas.SetTop(_liz, -AltoGuia / 2);
|
||||||
|
@ -96,7 +102,7 @@ namespace CtrEditor.ObjetosSim.UserControls
|
||||||
{
|
{
|
||||||
Width = CalculateLcWidth(),
|
Width = CalculateLcWidth(),
|
||||||
Height = AltoGuia,
|
Height = AltoGuia,
|
||||||
Fill = Color,
|
Fill = new SolidColorBrush(Color),
|
||||||
RenderTransformOrigin = new Point(0, 0.5)
|
RenderTransformOrigin = new Point(0, 0.5)
|
||||||
};
|
};
|
||||||
_lc.RenderTransform = new RotateTransform(GetRotationAngle(AnchoCentro, Altura));
|
_lc.RenderTransform = new RotateTransform(GetRotationAngle(AnchoCentro, Altura));
|
||||||
|
@ -109,7 +115,7 @@ namespace CtrEditor.ObjetosSim.UserControls
|
||||||
{
|
{
|
||||||
Width = AnchoRecto,
|
Width = AnchoRecto,
|
||||||
Height = AltoGuia,
|
Height = AltoGuia,
|
||||||
Fill = Color
|
Fill = new SolidColorBrush(Color)
|
||||||
};
|
};
|
||||||
Canvas.SetLeft(_lde, AnchoRecto + AnchoCentro);
|
Canvas.SetLeft(_lde, AnchoRecto + AnchoCentro);
|
||||||
Canvas.SetTop(_lde, Altura - AltoGuia / 2);
|
Canvas.SetTop(_lde, Altura - AltoGuia / 2);
|
||||||
|
@ -120,12 +126,14 @@ namespace CtrEditor.ObjetosSim.UserControls
|
||||||
// Actualizar Liz
|
// Actualizar Liz
|
||||||
_liz.Width = AnchoRecto;
|
_liz.Width = AnchoRecto;
|
||||||
_liz.Height = AltoGuia;
|
_liz.Height = AltoGuia;
|
||||||
|
_liz.Fill = new SolidColorBrush(Color);
|
||||||
Canvas.SetLeft(_liz, 0);
|
Canvas.SetLeft(_liz, 0);
|
||||||
Canvas.SetTop(_liz, -AltoGuia / 2);
|
Canvas.SetTop(_liz, -AltoGuia / 2);
|
||||||
|
|
||||||
// Actualizar Lc
|
// Actualizar Lc
|
||||||
_lc.Width = CalculateLcWidth();
|
_lc.Width = CalculateLcWidth();
|
||||||
_lc.Height = AltoGuia;
|
_lc.Height = AltoGuia;
|
||||||
|
_lc.Fill = new SolidColorBrush(Color);
|
||||||
_lc.RenderTransform = new RotateTransform(GetRotationAngle(AnchoCentro, Altura));
|
_lc.RenderTransform = new RotateTransform(GetRotationAngle(AnchoCentro, Altura));
|
||||||
Canvas.SetLeft(_lc, AnchoRecto);
|
Canvas.SetLeft(_lc, AnchoRecto);
|
||||||
Canvas.SetTop(_lc, -AltoGuia / 2);
|
Canvas.SetTop(_lc, -AltoGuia / 2);
|
||||||
|
@ -133,6 +141,7 @@ namespace CtrEditor.ObjetosSim.UserControls
|
||||||
// Actualizar Lde
|
// Actualizar Lde
|
||||||
_lde.Width = AnchoRecto;
|
_lde.Width = AnchoRecto;
|
||||||
_lde.Height = AltoGuia;
|
_lde.Height = AltoGuia;
|
||||||
|
_lde.Fill = new SolidColorBrush(Color);
|
||||||
Canvas.SetLeft(_lde, AnchoRecto + AnchoCentro);
|
Canvas.SetLeft(_lde, AnchoRecto + AnchoCentro);
|
||||||
Canvas.SetTop(_lde, Altura - AltoGuia / 2);
|
Canvas.SetTop(_lde, Altura - AltoGuia / 2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,18 +68,33 @@ namespace CtrEditor.ObjetosSim
|
||||||
CanvasSetLeftinMeter(value);
|
CanvasSetLeftinMeter(value);
|
||||||
LeftChanged(value);
|
LeftChanged(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
partial void OnLeftChanging(float oldValue, float newValue)
|
||||||
|
{
|
||||||
|
LeftChanging(oldValue, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void LeftChanged(float value) { }
|
public virtual void LeftChanged(float value) { }
|
||||||
|
public virtual void LeftChanging(float oldValue, float newValue) { }
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private float top;
|
private float top;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private string group_Panel;
|
||||||
|
|
||||||
partial void OnTopChanged(float value)
|
partial void OnTopChanged(float value)
|
||||||
{
|
{
|
||||||
CanvasSetTopinMeter(value);
|
CanvasSetTopinMeter(value);
|
||||||
TopChanged(value);
|
TopChanged(value);
|
||||||
}
|
}
|
||||||
|
partial void OnTopChanging(float oldValue, float newValue)
|
||||||
|
{
|
||||||
|
TopChanging(oldValue, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void TopChanged(float value) { }
|
public virtual void TopChanged(float value) { }
|
||||||
|
public virtual void TopChanging(float oldValue, float newValue) { }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Usado para saber cuando un objeto fue creado manualmente o por algun generador
|
/// Usado para saber cuando un objeto fue creado manualmente o por algun generador
|
||||||
|
@ -176,7 +191,6 @@ namespace CtrEditor.ObjetosSim
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public SimulationManagerFP simulationManager;
|
public SimulationManagerFP simulationManager;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Prepara la clase para ser serializable poniendo a null los objetos que tienen referencias circulares
|
/// Prepara la clase para ser serializable poniendo a null los objetos que tienen referencias circulares
|
||||||
/// Luego se debe llamar a RestaurarDatosNoSerializables para restaurar el estado original
|
/// Luego se debe llamar a RestaurarDatosNoSerializables para restaurar el estado original
|
||||||
|
|
|
@ -1,37 +1,41 @@
|
||||||
<UserControl x:Class="CtrEditor.ObjetosSim.ucBasicExample"
|
<UserControl x:Class="CtrEditor.ObjetosSim.ucBasicExample"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:local="clr-namespace:CtrEditor.ObjetosSim"
|
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
|
||||||
mc:Ignorable="d"
|
xmlns:vm="clr-namespace:CtrEditor.ObjetosSim"
|
||||||
|
mc:Ignorable="d">
|
||||||
>
|
|
||||||
|
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
|
<!-- Define the VisualBrush for the conveyor belt pattern -->
|
||||||
|
<VisualBrush x:Key="BeltBrush" TileMode="Tile" Viewport="0,0,20,10" ViewportUnits="Absolute" Viewbox="0,0,20,10" ViewboxUnits="Absolute">
|
||||||
|
<VisualBrush.Transform>
|
||||||
|
<TransformGroup>
|
||||||
|
<TranslateTransform/>
|
||||||
|
</TransformGroup>
|
||||||
|
</VisualBrush.Transform>
|
||||||
|
<VisualBrush.Visual>
|
||||||
|
<Canvas>
|
||||||
|
<Rectangle Fill="Gray" Width="10" Height="10"/>
|
||||||
|
<Rectangle Fill="DarkGray" Width="10" Height="10" Canvas.Left="10"/>
|
||||||
|
</Canvas>
|
||||||
|
</VisualBrush.Visual>
|
||||||
|
</VisualBrush>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
|
|
||||||
<UserControl.DataContext>
|
<UserControl.DataContext>
|
||||||
<vm:osBasicExample />
|
<vm:osBasicExample Ancho="2"/>
|
||||||
</UserControl.DataContext>
|
</UserControl.DataContext>
|
||||||
|
|
||||||
<Grid>
|
<Canvas>
|
||||||
<Grid.RowDefinitions>
|
<Rectangle x:Name="Transporte"
|
||||||
<RowDefinition Height="Auto" />
|
Width="{Binding Ancho, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
<RowDefinition Height="*" />
|
Height="{Binding Alto, Converter={StaticResource MeterToPixelConverter}}"
|
||||||
</Grid.RowDefinitions>
|
Fill="{StaticResource BeltBrush}">
|
||||||
|
<Rectangle.RenderTransform>
|
||||||
<Label Grid.Row="0" Content="{Binding Nombre}"
|
<RotateTransform Angle="{Binding Angulo}"/>
|
||||||
HorizontalAlignment="Center"
|
</Rectangle.RenderTransform>
|
||||||
VerticalAlignment="Center"
|
</Rectangle>
|
||||||
Background="Transparent"
|
</Canvas>
|
||||||
Foreground="Black"/>
|
</UserControl>
|
||||||
|
|
||||||
<Image Grid.Row="1" Source="{Binding ImageSource_oculta}"
|
|
||||||
Width="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
|
||||||
Height="{Binding Tamano, Converter={StaticResource MeterToPixelConverter}}"
|
|
||||||
Stretch="Uniform"/>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
</UserControl>
|
|
|
@ -1,11 +1,14 @@
|
||||||
|
using System.Windows;
|
||||||
using CtrEditor.Siemens;
|
|
||||||
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 Newtonsoft.Json;
|
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
|
||||||
|
using CtrEditor.Siemens;
|
||||||
|
using CtrEditor.Simulacion;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
|
||||||
namespace CtrEditor.ObjetosSim
|
namespace CtrEditor.ObjetosSim
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -15,80 +18,112 @@ namespace CtrEditor.ObjetosSim
|
||||||
|
|
||||||
public partial class osBasicExample : osBase, IosBase
|
public partial class osBasicExample : osBase, IosBase
|
||||||
{
|
{
|
||||||
|
private osBase _osMotor = null;
|
||||||
|
|
||||||
// Otros datos y métodos relevantes para la simulación
|
private simTransporte SimGeometria;
|
||||||
|
|
||||||
public static string NombreClase()
|
public static string NombreClase()
|
||||||
{
|
{
|
||||||
return "Ejemplo";
|
return "Example";
|
||||||
}
|
}
|
||||||
private string nombre = NombreClase();
|
private string nombre = "Transporte TTOP";
|
||||||
public override string Nombre
|
public override string Nombre
|
||||||
{
|
{
|
||||||
get => nombre;
|
get => nombre;
|
||||||
set => SetProperty(ref nombre, value);
|
set => SetProperty(ref nombre, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public ImageSource imageSource_oculta;
|
public float velocidadActual;
|
||||||
|
|
||||||
[ObservableProperty]
|
partial void OnVelocidadActualChanged(float value)
|
||||||
public float tamano;
|
|
||||||
[ObservableProperty]
|
|
||||||
public float maxRatedHz;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public float tiempoRampa;
|
|
||||||
|
|
||||||
partial void OnTiempoRampaChanged(float value)
|
|
||||||
{
|
{
|
||||||
if (value < 0.1f)
|
SetSpeed();
|
||||||
value = 0.1f;
|
|
||||||
tiempoRampa = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public bool encendido;
|
bool invertirDireccion;
|
||||||
[ObservableProperty]
|
|
||||||
public int pLC_NumeroMotor;
|
|
||||||
[ObservableProperty]
|
|
||||||
public float ratio;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
partial void OnInvertirDireccionChanged(bool value)
|
||||||
public float velocidad;
|
|
||||||
|
|
||||||
partial void OnVelocidadChanged(float value)
|
|
||||||
{
|
{
|
||||||
if (value > 0)
|
SetSpeed();
|
||||||
ImageSource_oculta = ImageFromPath("/imagenes/motorVerde.png");
|
if (_visualRepresentation is ucBasicExample uc)
|
||||||
|
{
|
||||||
|
CrearAnimacionStoryBoardTrasnporte(uc.Transporte, InvertirDireccion);
|
||||||
|
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetSpeed()
|
||||||
|
{
|
||||||
|
if (InvertirDireccion)
|
||||||
|
SimGeometria?.SetSpeed(-VelocidadActual);
|
||||||
else
|
else
|
||||||
ImageSource_oculta = ImageFromPath("/imagenes/motorNegro.png");
|
SimGeometria?.SetSpeed(VelocidadActual);
|
||||||
|
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public string motor;
|
||||||
|
|
||||||
|
partial void OnMotorChanged(string value)
|
||||||
|
{
|
||||||
|
_osMotor = ObtenerLink(Motor, typeof(osVMmotorSim));
|
||||||
|
}
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public float ancho;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float alto;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float angulo;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float frictionCoefficient;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float velMax50hz;
|
||||||
|
[ObservableProperty]
|
||||||
|
public float tiempoRampa;
|
||||||
|
[ObservableProperty]
|
||||||
|
public bool esMarcha;
|
||||||
|
|
||||||
|
|
||||||
|
private void ActualizarGeometrias()
|
||||||
|
{
|
||||||
|
if (_visualRepresentation is ucBasicExample uc)
|
||||||
|
{
|
||||||
|
UpdateRectangle(SimGeometria, uc.Transporte, Alto, Ancho, Angulo);
|
||||||
|
SetSpeed();
|
||||||
|
}
|
||||||
|
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
|
||||||
}
|
}
|
||||||
|
|
||||||
public osBasicExample()
|
public osBasicExample()
|
||||||
{
|
{
|
||||||
Tamano = 0.30f;
|
Ancho = 1;
|
||||||
PLC_NumeroMotor = 31;
|
Alto = 0.10f;
|
||||||
MaxRatedHz = 100;
|
|
||||||
TiempoRampa = 3;
|
|
||||||
ImageSource_oculta = ImageFromPath("/imagenes/motor2.png");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void SimulationStop()
|
||||||
|
{
|
||||||
|
// Se llama al detener la simulacion
|
||||||
|
ActualizarAnimacionStoryBoardTransporte(VelocidadActual);
|
||||||
|
}
|
||||||
public override void UpdateGeometryStart()
|
public override void UpdateGeometryStart()
|
||||||
{
|
{
|
||||||
// Se llama antes de la simulacion
|
// Se llama antes de la simulacion
|
||||||
|
ActualizarGeometrias();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void UpdatePLC(PLCModel plc, int elapsedMilliseconds)
|
public override void UpdatePLC(PLCModel plc, int elapsedMilliseconds)
|
||||||
{
|
{
|
||||||
|
if (_osMotor != null)
|
||||||
}
|
{
|
||||||
|
if (_osMotor is osVMmotorSim motor)
|
||||||
public override void UpdateControl(int elapsedMilliseconds)
|
VelocidadActual = motor.Velocidad;
|
||||||
{
|
}
|
||||||
// Calculamos la velocidad
|
else if (Motor.Length > 0)
|
||||||
|
_osMotor = ObtenerLink(Motor, typeof(osVMmotorSim));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ucLoaded()
|
public override void ucLoaded()
|
||||||
|
@ -97,7 +132,19 @@ namespace CtrEditor.ObjetosSim
|
||||||
// crear el objeto de simulacion
|
// crear el objeto de simulacion
|
||||||
ActualizarLeftTop();
|
ActualizarLeftTop();
|
||||||
|
|
||||||
|
if (_visualRepresentation is ucBasicExample uc)
|
||||||
|
{
|
||||||
|
SimGeometria = AddRectangle(simulationManager, uc.Transporte, Alto, Ancho, Angulo);
|
||||||
|
CrearAnimacionStoryBoardTrasnporte(uc.Transporte, InvertirDireccion);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
public override void ucUnLoaded()
|
||||||
|
{
|
||||||
|
// El UserControl se esta eliminando
|
||||||
|
// eliminar el objeto de simulacion
|
||||||
|
simulationManager.Remove(SimGeometria);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public partial class ucBasicExample : UserControl, IDataContainer
|
public partial class ucBasicExample : UserControl, IDataContainer
|
||||||
|
@ -118,7 +165,11 @@ namespace CtrEditor.ObjetosSim
|
||||||
{
|
{
|
||||||
Datos?.ucUnLoaded();
|
Datos?.ucUnLoaded();
|
||||||
}
|
}
|
||||||
public void Resize(float width, float height) { }
|
public void Resize(float width, float height)
|
||||||
|
{
|
||||||
|
if (Datos is osBasicExample datos)
|
||||||
|
datos.Ancho = PixelToMeter.Instance.calc.PixelsToMeters(width);
|
||||||
|
}
|
||||||
public void Move(float LeftPixels, float TopPixels)
|
public void Move(float LeftPixels, float TopPixels)
|
||||||
{
|
{
|
||||||
if (Datos != null)
|
if (Datos != null)
|
||||||
|
@ -127,11 +178,20 @@ namespace CtrEditor.ObjetosSim
|
||||||
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Rotate(float Angle) { }
|
public void Rotate(float Angle)
|
||||||
|
{
|
||||||
|
if (Datos != null)
|
||||||
|
if (Datos is osBasicExample datos)
|
||||||
|
datos.Angulo = Angle;
|
||||||
|
}
|
||||||
public void Highlight(bool State) { }
|
public void Highlight(bool State) { }
|
||||||
public int ZIndex()
|
public int ZIndex()
|
||||||
{
|
{
|
||||||
return 10;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -385,14 +385,14 @@ namespace CtrEditor
|
||||||
{
|
{
|
||||||
if (value is double floatValue)
|
if (value is double floatValue)
|
||||||
{
|
{
|
||||||
return floatValue.ToString("0.00", culture); // Formatear a dos decimales
|
return floatValue.ToString("0.00", culture).Replace('.', ','); // Formatear a dos decimales
|
||||||
}
|
}
|
||||||
return value; // Devolver el valor original si no es un float
|
return value; // Devolver el valor original si no es un float
|
||||||
}
|
}
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
if (value is string stringValue && double.TryParse(stringValue, NumberStyles.Float, culture, out double result))
|
if (value is string stringValue && double.TryParse(stringValue.Replace(',', '.'), NumberStyles.Float, culture, out double result))
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
Loading…
Reference in New Issue