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
|
||||
public event EventHandler<string> ImageSelected;
|
||||
public event EventHandler<TickSimulacionEventArgs> TickSimulacion;
|
||||
public event Action<UserControl> OnUserControlSelected;
|
||||
|
||||
// Propiedades
|
||||
|
||||
private bool isSimulationRunning;
|
||||
private bool isConnected;
|
||||
|
@ -70,6 +70,9 @@ namespace CtrEditor
|
|||
private ObservableCollection<osBase> _objetosSimulables = new ObservableCollection<osBase>();
|
||||
private float _left;
|
||||
private float _top;
|
||||
private MainWindow mainWindow;
|
||||
|
||||
public MainWindow MainWindow { get => mainWindow; set => mainWindow = value; }
|
||||
|
||||
public float CanvasLeft
|
||||
{
|
||||
|
@ -80,6 +83,7 @@ namespace CtrEditor
|
|||
OnPropertyChanged(nameof(CanvasLeft));
|
||||
}
|
||||
}
|
||||
|
||||
public float CanvasTop
|
||||
{
|
||||
get => _top;
|
||||
|
@ -200,6 +204,9 @@ namespace CtrEditor
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Constructor
|
||||
//
|
||||
|
||||
public MainViewModel()
|
||||
{
|
||||
|
@ -237,21 +244,35 @@ namespace CtrEditor
|
|||
directorioTrabajo = EstadoPersistente.Instance.directorio;
|
||||
}
|
||||
|
||||
// Crear un nuevo Objeto
|
||||
private void ExecuteDoubleClick(object parameter)
|
||||
{
|
||||
if (parameter is TipoSimulable tipoSimulable)
|
||||
{
|
||||
CrearObjetoSimulable(tipoSimulable.Tipo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void CrearUserControl(Type tipoSimulable)
|
||||
public void CrearObjetoSimulable(Type tipoSimulable)
|
||||
{
|
||||
// Crear una nueva instancia del osBase correspondiente
|
||||
osBase? newosBase = UserControlFactory.GetInstanceForType(tipoSimulable);
|
||||
if (newosBase != null)
|
||||
osBase? NuevoOsBase = UserControlFactory.GetInstanceForType(tipoSimulable);
|
||||
|
||||
var CentroCanvas = MainWindow.ObtenerCentroCanvasPixels();
|
||||
|
||||
NuevoOsBase.Left = CentroCanvas.X;
|
||||
NuevoOsBase.Top = CentroCanvas.Y;
|
||||
|
||||
if (NuevoOsBase != null)
|
||||
{
|
||||
if (CrearUsercontrol(newosBase))
|
||||
if (CrearUserControlDesdeObjetoSimulable(NuevoOsBase))
|
||||
// Añadir el nuevo osBase a la colección de objetos simulables
|
||||
ObjetosSimulables.Add(newosBase);
|
||||
ObjetosSimulables.Add(NuevoOsBase);
|
||||
}
|
||||
}
|
||||
|
||||
private bool CrearUsercontrol(osBase osObjeto)
|
||||
// Crear UserControl desde osBase : Nuevo o desde Deserealizacion
|
||||
private bool CrearUserControlDesdeObjetoSimulable(osBase osObjeto)
|
||||
{
|
||||
Type tipoObjeto = osObjeto.GetType();
|
||||
|
||||
|
@ -264,21 +285,13 @@ namespace CtrEditor
|
|||
UserControlFactory.AssignDatos(userControl, osObjeto, simulationManager);
|
||||
osObjeto._mainViewModel = this;
|
||||
|
||||
OnUserControlSelected?.Invoke(userControl);
|
||||
MainWindow.AgregarRegistrarUserControlCanvas(userControl);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void ExecuteDoubleClick(object parameter)
|
||||
{
|
||||
if (parameter is TipoSimulable tipoSimulable)
|
||||
{
|
||||
CrearUserControl(tipoSimulable.Tipo);
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializeTipoSimulableList()
|
||||
{
|
||||
var baseType = typeof(osBase);
|
||||
|
@ -455,7 +468,7 @@ namespace CtrEditor
|
|||
|
||||
// Recorrer la colección de objetos simulables
|
||||
foreach (var objetoSimulable in ObjetosSimulables)
|
||||
CrearUsercontrol(objetoSimulable);
|
||||
CrearUserControlDesdeObjetoSimulable(objetoSimulable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,15 +61,14 @@ namespace CtrEditor
|
|||
{
|
||||
if (DataContext is MainViewModel viewModel)
|
||||
{
|
||||
viewModel.MainWindow = this;
|
||||
viewModel.ImageSelected += ViewModel_ImageSelected;
|
||||
//viewModel.TickSimulacion += MainViewModel_TickSimulacion;
|
||||
viewModel.OnUserControlSelected += AgregarUserControl;
|
||||
viewModel?.LoadInitialData(); // Carga la primera imagen por defecto una vez cargada la ventana principal
|
||||
viewModel.simulationManager.DebugCanvas = ImagenEnTrabajoCanvas;
|
||||
}
|
||||
}
|
||||
|
||||
private (float X, float Y) ObtenerCentroCanvasPixels()
|
||||
public (float X, float Y) ObtenerCentroCanvasPixels()
|
||||
{
|
||||
var scaleTransform = ImagenEnTrabajoCanvas.LayoutTransform as ScaleTransform;
|
||||
float scaleX = (float)(scaleTransform?.ScaleX ?? 1.0);
|
||||
|
@ -90,41 +89,14 @@ namespace CtrEditor
|
|||
return (centerX, centerY);
|
||||
}
|
||||
|
||||
private (float X, float Y) ObtenerCentroCanvasMeters()
|
||||
public (float X, float Y) ObtenerCentroCanvasMeters()
|
||||
{
|
||||
var c = ObtenerCentroCanvasPixels();
|
||||
return (PixelToMeter.Instance.calc.PixelsToMeters(c.X), PixelToMeter.Instance.calc.PixelsToMeters(c.Y));
|
||||
}
|
||||
|
||||
private void AgregarUserControl(UserControl userControl)
|
||||
public void SuscribirEventos(UserControl userControl)
|
||||
{
|
||||
if (userControl is IDataContainer dataContainer)
|
||||
{
|
||||
var NuevoOS = dataContainer.Datos;
|
||||
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;
|
||||
|
||||
|
@ -132,6 +104,13 @@ namespace CtrEditor
|
|||
userControl.MouseLeftButtonDown += UserControl_MouseLeftButtonDown;
|
||||
userControl.MouseLeftButtonUp += UserControl_MouseLeftButtonUp;
|
||||
userControl.MouseMove += UserControl_MouseMove;
|
||||
}
|
||||
|
||||
public void AgregarRegistrarUserControlCanvas(UserControl userControl)
|
||||
{
|
||||
if (userControl is IDataContainer dataContainer)
|
||||
{
|
||||
SuscribirEventos(userControl);
|
||||
|
||||
// Añade el UserControl al Canvas
|
||||
Canvas.SetZIndex(userControl, dataContainer.ZIndex());
|
||||
|
|
|
@ -89,6 +89,12 @@ namespace CtrEditor.ObjetosSim
|
|||
return null;
|
||||
}
|
||||
|
||||
public void ActualizarLeftTop()
|
||||
{
|
||||
Left = Left;
|
||||
Top = Top;
|
||||
}
|
||||
|
||||
public bool LeerBitTag(PLCModel plc, string Tag)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Tag))
|
||||
|
|
|
@ -120,6 +120,7 @@ namespace CtrEditor.ObjetosSim
|
|||
{
|
||||
// El UserControl ya se ha cargado y podemos obtener las coordenadas para
|
||||
// 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
|
||||
// crear el objeto de simulacion
|
||||
ActualizarLeftTop();
|
||||
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
|
||||
// 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
|
||||
// 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
|
||||
// crear el objeto de simulacion
|
||||
ActualizarLeftTop();
|
||||
|
||||
if (_visualRepresentation is ucGuia uc)
|
||||
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
|
||||
// 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
|
||||
// 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
|
||||
// crear el objeto de simulacion
|
||||
ActualizarLeftTop();
|
||||
|
||||
simulationManager.rectangles.Add(TransporteCentral);
|
||||
simulationManager.lines.Add(Guia_Superior);
|
||||
simulationManager.lines.Add(Guia_Inferior);
|
||||
|
|
|
@ -163,6 +163,8 @@ namespace CtrEditor.ObjetosSim
|
|||
{
|
||||
// El UserControl ya se ha cargado y podemos obtener las coordenadas para
|
||||
// crear el objeto de simulacion
|
||||
ActualizarLeftTop();
|
||||
|
||||
if (_visualRepresentation is ucTransporteTTop uc)
|
||||
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
|
||||
// crear el objeto de simulacion
|
||||
ActualizarLeftTop();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue