Se añadió un nuevo manager para la visualización 3D en MainWindow y se conectó con el simulation manager. Además, se implementaron métodos para manejar cambios de posición en ucTransporteCurvaGuias, actualizando la geometría en BEPU y sincronizando con la visualización 3D. Se mejoró la creación de guías desde dos puntos y se corrigieron errores en la actualización de curvas.
This commit is contained in:
parent
fbac81ec45
commit
3773da0ee3
|
@ -1,4 +1,5 @@
|
||||||
using CtrEditor.ObjetosSim;
|
using CtrEditor.ObjetosSim;
|
||||||
|
using CtrEditor.Simulacion;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
@ -45,6 +46,9 @@ namespace CtrEditor
|
||||||
|
|
||||||
private dataDebug dataDebug = new dataDebug();
|
private dataDebug dataDebug = new dataDebug();
|
||||||
|
|
||||||
|
// Manager para la visualización 3D
|
||||||
|
private BEPUVisualization3DManager _visualization3DManager;
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
@ -91,10 +95,18 @@ namespace CtrEditor
|
||||||
viewModel.MainWindow = this;
|
viewModel.MainWindow = this;
|
||||||
viewModel.ImageSelected += ViewModel_ImageSelected;
|
viewModel.ImageSelected += ViewModel_ImageSelected;
|
||||||
viewModel?.LoadInitialData();
|
viewModel?.LoadInitialData();
|
||||||
|
|
||||||
viewModel.MainCanvas = ImagenEnTrabajoCanvas;
|
viewModel.MainCanvas = ImagenEnTrabajoCanvas;
|
||||||
|
|
||||||
// Inicializar ObjectHierarchyView
|
// Inicializar ObjectHierarchyView
|
||||||
ObjectHierarchy.Initialize(viewModel);
|
ObjectHierarchy.Initialize(viewModel);
|
||||||
|
|
||||||
|
// Inicializar el manager de visualización 3D
|
||||||
|
_visualization3DManager = new BEPUVisualization3DManager(Debug3DViewport, viewModel.simulationManager);
|
||||||
|
viewModel.Visualization3DManager = _visualization3DManager;
|
||||||
|
|
||||||
|
// Conectar el manager 3D con el simulation manager (orden correcto de inicialización)
|
||||||
|
viewModel.simulationManager.Visualization3DManager = _visualization3DManager;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -240,9 +240,42 @@ namespace CtrEditor.ObjetosSim
|
||||||
|
|
||||||
partial void OnArco_en_gradosChanged(float value)
|
partial void OnArco_en_gradosChanged(float value)
|
||||||
{
|
{
|
||||||
|
OnPropertyChanged(nameof(AnguloFinal));
|
||||||
ActualizarGeometrias();
|
ActualizarGeometrias();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ✅ NUEVO: Manejar cambios de posición usando métodos virtuales de osBase
|
||||||
|
public override void LeftChanging(float oldValue, float newValue)
|
||||||
|
{
|
||||||
|
base.LeftChanging(oldValue, newValue);
|
||||||
|
ActualizarPosicionBEPU();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void TopChanging(float oldValue, float newValue)
|
||||||
|
{
|
||||||
|
base.TopChanging(oldValue, newValue);
|
||||||
|
ActualizarPosicionBEPU();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ✅ NUEVO: Actualizar posición en BEPU cuando cambia la posición del objeto
|
||||||
|
/// </summary>
|
||||||
|
private void ActualizarPosicionBEPU()
|
||||||
|
{
|
||||||
|
if (Simulation_TransporteCurvaGuias != null)
|
||||||
|
{
|
||||||
|
// Recrear la curva con nueva posición usando el mismo patrón que ucTransporteCurva
|
||||||
|
var topLeft = new Vector2(Left, Top);
|
||||||
|
Simulation_TransporteCurvaGuias.Create(RadioInterno, RadioExterno, Angulo, Angulo + Arco_en_grados, topLeft, 0);
|
||||||
|
|
||||||
|
// Recrear las guías en la nueva posición
|
||||||
|
ActualizarGuiasCurvas();
|
||||||
|
|
||||||
|
// Sincronizar con la visualización 3D tras la actualización
|
||||||
|
simulationManager?.Visualization3DManager?.SynchronizeWorld();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Hidden]
|
[Hidden]
|
||||||
public float AnguloFinal
|
public float AnguloFinal
|
||||||
{
|
{
|
||||||
|
@ -253,7 +286,7 @@ namespace CtrEditor.ObjetosSim
|
||||||
{
|
{
|
||||||
if (_visualRepresentation is ucTransporteCurvaGuias uc)
|
if (_visualRepresentation is ucTransporteCurvaGuias uc)
|
||||||
{
|
{
|
||||||
UpdateCurve(Simulation_TransporteCurvaGuias, RadioInterno, RadioExterno, Angulo, Angulo + Arco_en_grados);
|
Simulation_TransporteCurvaGuias?.UpdateCurve(RadioInterno, RadioExterno, Angulo, Angulo + Arco_en_grados);
|
||||||
ActualizarGuiasCurvas();
|
ActualizarGuiasCurvas();
|
||||||
SetSpeed();
|
SetSpeed();
|
||||||
}
|
}
|
||||||
|
@ -325,8 +358,9 @@ namespace CtrEditor.ObjetosSim
|
||||||
punto1 += centro;
|
punto1 += centro;
|
||||||
punto2 += centro;
|
punto2 += centro;
|
||||||
|
|
||||||
simGuia guiaSegmento = simulationManager.AddLine(punto1, punto2);
|
simGuia guiaSegmento = CrearGuiaDesdeDosPuntos(punto1, punto2);
|
||||||
GuiasSuperiores.Add(guiaSegmento);
|
if (guiaSegmento != null)
|
||||||
|
GuiasSuperiores.Add(guiaSegmento);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crear segmentos para guía inferior (interna)
|
// Crear segmentos para guía inferior (interna)
|
||||||
|
@ -349,8 +383,37 @@ namespace CtrEditor.ObjetosSim
|
||||||
punto1 += centro;
|
punto1 += centro;
|
||||||
punto2 += centro;
|
punto2 += centro;
|
||||||
|
|
||||||
simGuia guiaSegmento = simulationManager.AddLine(punto1, punto2);
|
simGuia guiaSegmento = CrearGuiaDesdeDosPuntos(punto1, punto2);
|
||||||
GuiasInferiores.Add(guiaSegmento);
|
if (guiaSegmento != null)
|
||||||
|
GuiasInferiores.Add(guiaSegmento);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Método helper para crear una guía desde dos puntos
|
||||||
|
/// Convierte dos puntos Vector2 a los parámetros requeridos por AddLine
|
||||||
|
/// </summary>
|
||||||
|
private simGuia CrearGuiaDesdeDosPuntos(Vector2 punto1, Vector2 punto2)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Calcular la longitud entre los dos puntos
|
||||||
|
var direccion = punto2 - punto1;
|
||||||
|
float longitud = direccion.Length();
|
||||||
|
|
||||||
|
if (longitud < 0.001f) // Evitar líneas de longitud cero
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Calcular el ángulo de la línea
|
||||||
|
float angulo = (float)Math.Atan2(direccion.Y, direccion.X) * 180f / (float)Math.PI;
|
||||||
|
|
||||||
|
// Usar punto1 como topLeft y la longitud como width
|
||||||
|
return simulationManager.AddLine(longitud, GrosorGuias, punto1, angulo);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"Error creando guía desde dos puntos: {ex.Message}");
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,6 +480,9 @@ namespace CtrEditor.ObjetosSim
|
||||||
// Ensure radioInterno is always less than radioExterno
|
// Ensure radioInterno is always less than radioExterno
|
||||||
if (RadioInterno >= RadioExterno)
|
if (RadioInterno >= RadioExterno)
|
||||||
RadioInterno = RadioExterno * 0.75f;
|
RadioInterno = RadioExterno * 0.75f;
|
||||||
|
|
||||||
|
// ✅ NUEVO: Actualizar geometrías en BEPU después del redimensionamiento
|
||||||
|
ActualizarGeometrias();
|
||||||
}
|
}
|
||||||
|
|
||||||
public osTransporteCurvaGuias()
|
public osTransporteCurvaGuias()
|
||||||
|
@ -466,7 +532,9 @@ namespace CtrEditor.ObjetosSim
|
||||||
|
|
||||||
if (_visualRepresentation is ucTransporteCurvaGuias uc)
|
if (_visualRepresentation is ucTransporteCurvaGuias uc)
|
||||||
{
|
{
|
||||||
Simulation_TransporteCurvaGuias = AddCurve(RadioInterno, RadioExterno, Angulo, Angulo + Arco_en_grados);
|
// ✅ CORRIGIDO: Usar simulationManager?.AddCurve con todos los parámetros requeridos
|
||||||
|
var topLeft = new Vector2(Left, Top);
|
||||||
|
Simulation_TransporteCurvaGuias = simulationManager?.AddCurve(RadioInterno, RadioExterno, Angulo, Angulo + Arco_en_grados, topLeft, 0);
|
||||||
CrearGuiasCurvas(); // Crear las guías curvas
|
CrearGuiasCurvas(); // Crear las guías curvas
|
||||||
CrearAnimacionStoryBoardTrasnporteCircular(uc.Transporte.TransportePath, InvertirDireccion, Angulo);
|
CrearAnimacionStoryBoardTrasnporteCircular(uc.Transporte.TransportePath, InvertirDireccion, Angulo);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue