Utilizando MainWindow desde MainViewModel
This commit is contained in:
parent
664d325de8
commit
ebe7986142
|
@ -59,8 +59,8 @@ namespace CtrEditor
|
||||||
// Evento que se dispara cuando se selecciona una nueva imagen
|
// Evento que se dispara cuando se selecciona una nueva imagen
|
||||||
public event EventHandler<string> ImageSelected;
|
public event EventHandler<string> ImageSelected;
|
||||||
public event EventHandler<TickSimulacionEventArgs> TickSimulacion;
|
public event EventHandler<TickSimulacionEventArgs> TickSimulacion;
|
||||||
public event Action<UserControl> OnUserControlSelected;
|
|
||||||
|
|
||||||
|
// Propiedades
|
||||||
|
|
||||||
private bool isSimulationRunning;
|
private bool isSimulationRunning;
|
||||||
private bool isConnected;
|
private bool isConnected;
|
||||||
|
@ -70,6 +70,9 @@ namespace CtrEditor
|
||||||
private ObservableCollection<osBase> _objetosSimulables = new ObservableCollection<osBase>();
|
private ObservableCollection<osBase> _objetosSimulables = new ObservableCollection<osBase>();
|
||||||
private float _left;
|
private float _left;
|
||||||
private float _top;
|
private float _top;
|
||||||
|
private MainWindow mainWindow;
|
||||||
|
|
||||||
|
public MainWindow MainWindow { get => mainWindow; set => mainWindow = value; }
|
||||||
|
|
||||||
public float CanvasLeft
|
public float CanvasLeft
|
||||||
{
|
{
|
||||||
|
@ -80,6 +83,7 @@ namespace CtrEditor
|
||||||
OnPropertyChanged(nameof(CanvasLeft));
|
OnPropertyChanged(nameof(CanvasLeft));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public float CanvasTop
|
public float CanvasTop
|
||||||
{
|
{
|
||||||
get => _top;
|
get => _top;
|
||||||
|
@ -200,6 +204,9 @@ namespace CtrEditor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructor
|
||||||
|
//
|
||||||
|
|
||||||
public MainViewModel()
|
public MainViewModel()
|
||||||
{
|
{
|
||||||
|
@ -237,21 +244,35 @@ namespace CtrEditor
|
||||||
directorioTrabajo = EstadoPersistente.Instance.directorio;
|
directorioTrabajo = EstadoPersistente.Instance.directorio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Crear un nuevo Objeto
|
||||||
|
private void ExecuteDoubleClick(object parameter)
|
||||||
public void CrearUserControl(Type tipoSimulable)
|
|
||||||
{
|
{
|
||||||
// Crear una nueva instancia del osBase correspondiente
|
if (parameter is TipoSimulable tipoSimulable)
|
||||||
osBase? newosBase = UserControlFactory.GetInstanceForType(tipoSimulable);
|
|
||||||
if (newosBase != null)
|
|
||||||
{
|
{
|
||||||
if (CrearUsercontrol(newosBase))
|
CrearObjetoSimulable(tipoSimulable.Tipo);
|
||||||
// Añadir el nuevo osBase a la colección de objetos simulables
|
|
||||||
ObjetosSimulables.Add(newosBase);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CrearUsercontrol(osBase osObjeto)
|
public void CrearObjetoSimulable(Type tipoSimulable)
|
||||||
|
{
|
||||||
|
// Crear una nueva instancia del osBase correspondiente
|
||||||
|
osBase? NuevoOsBase = UserControlFactory.GetInstanceForType(tipoSimulable);
|
||||||
|
|
||||||
|
var CentroCanvas = MainWindow.ObtenerCentroCanvasPixels();
|
||||||
|
|
||||||
|
NuevoOsBase.Left = CentroCanvas.X;
|
||||||
|
NuevoOsBase.Top = CentroCanvas.Y;
|
||||||
|
|
||||||
|
if (NuevoOsBase != null)
|
||||||
|
{
|
||||||
|
if (CrearUserControlDesdeObjetoSimulable(NuevoOsBase))
|
||||||
|
// Añadir el nuevo osBase a la colección de objetos simulables
|
||||||
|
ObjetosSimulables.Add(NuevoOsBase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crear UserControl desde osBase : Nuevo o desde Deserealizacion
|
||||||
|
private bool CrearUserControlDesdeObjetoSimulable(osBase osObjeto)
|
||||||
{
|
{
|
||||||
Type tipoObjeto = osObjeto.GetType();
|
Type tipoObjeto = osObjeto.GetType();
|
||||||
|
|
||||||
|
@ -264,21 +285,13 @@ namespace CtrEditor
|
||||||
UserControlFactory.AssignDatos(userControl, osObjeto, simulationManager);
|
UserControlFactory.AssignDatos(userControl, osObjeto, simulationManager);
|
||||||
osObjeto._mainViewModel = this;
|
osObjeto._mainViewModel = this;
|
||||||
|
|
||||||
OnUserControlSelected?.Invoke(userControl);
|
MainWindow.AgregarRegistrarUserControlCanvas(userControl);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ExecuteDoubleClick(object parameter)
|
|
||||||
{
|
|
||||||
if (parameter is TipoSimulable tipoSimulable)
|
|
||||||
{
|
|
||||||
CrearUserControl(tipoSimulable.Tipo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InitializeTipoSimulableList()
|
private void InitializeTipoSimulableList()
|
||||||
{
|
{
|
||||||
var baseType = typeof(osBase);
|
var baseType = typeof(osBase);
|
||||||
|
@ -455,7 +468,7 @@ namespace CtrEditor
|
||||||
|
|
||||||
// Recorrer la colección de objetos simulables
|
// Recorrer la colección de objetos simulables
|
||||||
foreach (var objetoSimulable in ObjetosSimulables)
|
foreach (var objetoSimulable in ObjetosSimulables)
|
||||||
CrearUsercontrol(objetoSimulable);
|
CrearUserControlDesdeObjetoSimulable(objetoSimulable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,15 +61,14 @@ namespace CtrEditor
|
||||||
{
|
{
|
||||||
if (DataContext is MainViewModel viewModel)
|
if (DataContext is MainViewModel viewModel)
|
||||||
{
|
{
|
||||||
viewModel.ImageSelected += ViewModel_ImageSelected;
|
viewModel.MainWindow = this;
|
||||||
//viewModel.TickSimulacion += MainViewModel_TickSimulacion;
|
viewModel.ImageSelected += ViewModel_ImageSelected;
|
||||||
viewModel.OnUserControlSelected += AgregarUserControl;
|
|
||||||
viewModel?.LoadInitialData(); // Carga la primera imagen por defecto una vez cargada la ventana principal
|
viewModel?.LoadInitialData(); // Carga la primera imagen por defecto una vez cargada la ventana principal
|
||||||
viewModel.simulationManager.DebugCanvas = ImagenEnTrabajoCanvas;
|
viewModel.simulationManager.DebugCanvas = ImagenEnTrabajoCanvas;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private (float X, float Y) ObtenerCentroCanvasPixels()
|
public (float X, float Y) ObtenerCentroCanvasPixels()
|
||||||
{
|
{
|
||||||
var scaleTransform = ImagenEnTrabajoCanvas.LayoutTransform as ScaleTransform;
|
var scaleTransform = ImagenEnTrabajoCanvas.LayoutTransform as ScaleTransform;
|
||||||
float scaleX = (float)(scaleTransform?.ScaleX ?? 1.0);
|
float scaleX = (float)(scaleTransform?.ScaleX ?? 1.0);
|
||||||
|
@ -90,48 +89,28 @@ namespace CtrEditor
|
||||||
return (centerX, centerY);
|
return (centerX, centerY);
|
||||||
}
|
}
|
||||||
|
|
||||||
private (float X, float Y) ObtenerCentroCanvasMeters()
|
public (float X, float Y) ObtenerCentroCanvasMeters()
|
||||||
{
|
{
|
||||||
var c = ObtenerCentroCanvasPixels();
|
var c = ObtenerCentroCanvasPixels();
|
||||||
return (PixelToMeter.Instance.calc.PixelsToMeters(c.X), PixelToMeter.Instance.calc.PixelsToMeters(c.Y));
|
return (PixelToMeter.Instance.calc.PixelsToMeters(c.X), PixelToMeter.Instance.calc.PixelsToMeters(c.Y));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AgregarUserControl(UserControl userControl)
|
public void SuscribirEventos(UserControl userControl)
|
||||||
|
{
|
||||||
|
userControl.MouseEnter += UserControl_MouseEnter;
|
||||||
|
userControl.MouseLeave += UserControl_MouseLeave;
|
||||||
|
|
||||||
|
// Suscribir a eventos de mouse para panning
|
||||||
|
userControl.MouseLeftButtonDown += UserControl_MouseLeftButtonDown;
|
||||||
|
userControl.MouseLeftButtonUp += UserControl_MouseLeftButtonUp;
|
||||||
|
userControl.MouseMove += UserControl_MouseMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AgregarRegistrarUserControlCanvas(UserControl userControl)
|
||||||
{
|
{
|
||||||
if (userControl is IDataContainer dataContainer)
|
if (userControl is IDataContainer dataContainer)
|
||||||
{
|
{
|
||||||
var NuevoOS = dataContainer.Datos;
|
SuscribirEventos(userControl);
|
||||||
if (!NuevoOS.Inicializado) // Aun no fue inicializado
|
|
||||||
{
|
|
||||||
Random rnd = new Random();
|
|
||||||
|
|
||||||
var centro = ObtenerCentroCanvasPixels();
|
|
||||||
|
|
||||||
// Ajusta la posición del UserControl para que esté centrado en el área visible
|
|
||||||
double leftPixels = centro.X - (userControl.ActualWidth / 2);
|
|
||||||
double topPixels = centro.Y - (userControl.ActualHeight / 2);
|
|
||||||
|
|
||||||
// Establece la posición del UserControl
|
|
||||||
NuevoOS.Left = PixelToMeter.Instance.calc.PixelsToMeters((float)leftPixels + (float)(rnd.NextDouble() - 0.5) );
|
|
||||||
NuevoOS.Top = PixelToMeter.Instance.calc.PixelsToMeters((float)topPixels + (float)(rnd.NextDouble() - 0.5) );
|
|
||||||
|
|
||||||
NuevoOS.Inicializado = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Fuerza a Establecer la posición del UserControl
|
|
||||||
NuevoOS.Left = NuevoOS.Left;
|
|
||||||
NuevoOS.Top = NuevoOS.Top;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Suscribirse a eventos de mouse para marcar el Control
|
|
||||||
userControl.MouseEnter += UserControl_MouseEnter;
|
|
||||||
userControl.MouseLeave += UserControl_MouseLeave;
|
|
||||||
|
|
||||||
// Suscribir a eventos de mouse para panning
|
|
||||||
userControl.MouseLeftButtonDown += UserControl_MouseLeftButtonDown;
|
|
||||||
userControl.MouseLeftButtonUp += UserControl_MouseLeftButtonUp;
|
|
||||||
userControl.MouseMove += UserControl_MouseMove;
|
|
||||||
|
|
||||||
// Añade el UserControl al Canvas
|
// Añade el UserControl al Canvas
|
||||||
Canvas.SetZIndex(userControl, dataContainer.ZIndex());
|
Canvas.SetZIndex(userControl, dataContainer.ZIndex());
|
||||||
|
|
|
@ -89,6 +89,12 @@ namespace CtrEditor.ObjetosSim
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ActualizarLeftTop()
|
||||||
|
{
|
||||||
|
Left = Left;
|
||||||
|
Top = Top;
|
||||||
|
}
|
||||||
|
|
||||||
public bool LeerBitTag(PLCModel plc, string Tag)
|
public bool LeerBitTag(PLCModel plc, string Tag)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(Tag))
|
if (!string.IsNullOrEmpty(Tag))
|
||||||
|
|
|
@ -120,6 +120,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,6 +150,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();
|
||||||
Simulacion_Botella = simulationManager.AddCircle(Diametro, _centro, Mass);
|
Simulacion_Botella = simulationManager.AddCircle(Diametro, _centro, Mass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,6 +193,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,6 +126,8 @@ 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();
|
||||||
|
|
||||||
if (_visualRepresentation is ucGuia uc)
|
if (_visualRepresentation is ucGuia uc)
|
||||||
Simulation_Guia = AddLine(simulationManager, uc.Guia);
|
Simulation_Guia = AddLine(simulationManager, uc.Guia);
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,6 +169,8 @@ 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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -287,6 +287,8 @@ 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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,6 +211,8 @@ 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();
|
||||||
|
|
||||||
simulationManager.rectangles.Add(TransporteCentral);
|
simulationManager.rectangles.Add(TransporteCentral);
|
||||||
simulationManager.lines.Add(Guia_Superior);
|
simulationManager.lines.Add(Guia_Superior);
|
||||||
simulationManager.lines.Add(Guia_Inferior);
|
simulationManager.lines.Add(Guia_Inferior);
|
||||||
|
|
|
@ -163,6 +163,8 @@ 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();
|
||||||
|
|
||||||
if (_visualRepresentation is ucTransporteTTop uc)
|
if (_visualRepresentation is ucTransporteTTop uc)
|
||||||
Simulation_Transporte = AddRectangle(simulationManager, uc.Transporte, Alto, Ancho, Angulo);
|
Simulation_Transporte = AddRectangle(simulationManager, uc.Transporte, Alto, Ancho, Angulo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,6 +198,8 @@ 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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue