Cambiando a MVVM para los UserControl
This commit is contained in:
parent
82b6f9cffc
commit
58b429c7bf
|
@ -223,36 +223,24 @@ namespace CtrEditor
|
||||||
|
|
||||||
private void RotateControl(UserControl control, Point currentPosition)
|
private void RotateControl(UserControl control, Point currentPosition)
|
||||||
{
|
{
|
||||||
// Calcular el vector desde el centro de rotación hasta el punto de inicio
|
double deltaX = currentPosition.X - _startPointUserControl.X;
|
||||||
double deltaX = _startPointUserControl.X - (Canvas.GetLeft(control) + control.ActualWidth / 2);
|
double deltaY = currentPosition.Y - _startPointUserControl.Y;
|
||||||
double deltaY = _startPointUserControl.Y - (Canvas.GetTop(control) + control.ActualHeight);
|
double angle = Math.Atan2(deltaY, deltaX) * (180 / Math.PI);
|
||||||
|
|
||||||
// Calcular el vector desde el centro de rotación hasta la posición actual del ratón
|
|
||||||
double deltaXCurrent = currentPosition.X - (Canvas.GetLeft(control) + control.ActualWidth / 2);
|
|
||||||
double deltaYCurrent = currentPosition.Y - (Canvas.GetTop(control) + control.ActualHeight);
|
|
||||||
|
|
||||||
// Calcular los ángulos
|
|
||||||
double initialAngle = Math.Atan2(deltaY, deltaX) * (180 / Math.PI);
|
|
||||||
double currentAngle = Math.Atan2(deltaYCurrent, deltaXCurrent) * (180 / Math.PI);
|
|
||||||
|
|
||||||
// Calcular la diferencia de ángulo y ajustar
|
|
||||||
double angleDelta = currentAngle - initialAngle;
|
|
||||||
|
|
||||||
RotateTransform rotateTransform = control.RenderTransform as RotateTransform;
|
RotateTransform rotateTransform = control.RenderTransform as RotateTransform;
|
||||||
rotateTransform.Angle = angleDelta;
|
rotateTransform.Angle = angle; // - _initialAngleUserControl; // Asegúrate de ajustar esta parte según cómo calcules el ángulo inicial
|
||||||
rotateTransform.CenterX = 0;
|
|
||||||
rotateTransform.CenterY = 0;
|
|
||||||
|
|
||||||
// Actualizar el ángulo mostrado
|
// Actualizar el ángulo mostrado
|
||||||
_angleDisplayTextBlock.Text = $"Ángulo: {angleDelta:F2}°";
|
_angleDisplayTextBlock.Text = $"Ángulo: {angle:F2}°";
|
||||||
PositionAngleDisplay(control);
|
PositionAngleDisplay(control);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PositionAngleDisplay(UserControl control)
|
private void PositionAngleDisplay(UserControl control)
|
||||||
{
|
{
|
||||||
// Posicionar el TextBlock sobre el control
|
// Posicionar el TextBlock sobre el control
|
||||||
Canvas.SetLeft(_angleDisplayTextBlock, Canvas.GetLeft(control) + control.Width / 2 - _angleDisplayTextBlock.ActualWidth / 2);
|
Canvas.SetLeft(_angleDisplayTextBlock, Canvas.GetLeft(control));
|
||||||
Canvas.SetTop(_angleDisplayTextBlock, Canvas.GetTop(control) - _angleDisplayTextBlock.ActualHeight - 5);
|
Canvas.SetTop(_angleDisplayTextBlock, Canvas.GetTop(control));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ResizeControl(UserControl control, Point currentPosition)
|
private void ResizeControl(UserControl control, Point currentPosition)
|
||||||
|
@ -261,13 +249,27 @@ namespace CtrEditor
|
||||||
double widthChange = currentPosition.X - _startPointUserControl.X;
|
double widthChange = currentPosition.X - _startPointUserControl.X;
|
||||||
|
|
||||||
// Actualizar el ancho del control
|
// Actualizar el ancho del control
|
||||||
control.Width = Math.Max(control.ActualWidth + widthChange, control.MinWidth); // Asegurar que no sea menor que el mínimo
|
double newWidth = Math.Max(control.ActualWidth + widthChange, control.MinWidth);
|
||||||
|
control.Width = newWidth; // Asegurar que no sea menor que el mínimo
|
||||||
|
|
||||||
|
// Actualizar el ancho de los elementos internos
|
||||||
|
if (control.Content is Panel panel)
|
||||||
|
{
|
||||||
|
foreach (var child in panel.Children)
|
||||||
|
{
|
||||||
|
if (child is Rectangle rect)
|
||||||
|
{
|
||||||
|
rect.Width = newWidth; // Establece el nuevo ancho
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Actualizar el punto de inicio para el próximo evento de movimiento
|
// Actualizar el punto de inicio para el próximo evento de movimiento
|
||||||
_startPointUserControl = currentPosition;
|
_startPointUserControl = currentPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void UserControl_MouseEnter(object sender, MouseEventArgs e)
|
private void UserControl_MouseEnter(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
// Lógica a ejecutar cuando el mouse entra en el UserControl
|
// Lógica a ejecutar cuando el mouse entra en el UserControl
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
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"
|
xmlns:local="clr-namespace:CtrEditor"
|
||||||
mc:Ignorable="d" >
|
mc:Ignorable="d"
|
||||||
<Rectangle HorizontalAlignment="Left" Height="10" Margin="0,0,0,0" Stroke="Black" VerticalAlignment="Top" Width="100"/>
|
DataContext="{Binding RelativeSource={RelativeSource Self}}">
|
||||||
|
<Canvas>
|
||||||
|
<Rectangle Width="{Binding Datos.Ancho}" Height="{Binding Datos.Alto}" Fill="Gray"/>
|
||||||
|
</Canvas>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,8 @@ namespace CtrEditor.ObjetosSim
|
||||||
public class osTransporteTTop : osBase
|
public class osTransporteTTop : osBase
|
||||||
{
|
{
|
||||||
public double diametro { get; set; }
|
public double diametro { get; set; }
|
||||||
|
public double Ancho { get; set; }
|
||||||
|
public double Alto { get; set; }
|
||||||
// Otros datos y métodos relevantes para la simulación
|
// Otros datos y métodos relevantes para la simulación
|
||||||
|
|
||||||
public new string Nombre => "Transporte TTOP";
|
public new string Nombre => "Transporte TTOP";
|
||||||
|
@ -38,5 +40,6 @@ namespace CtrEditor.ObjetosSim
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
public osTransporteTTop Datos { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue