public void Setup(Canvas simCanvas, ParticleSim particleSim, StackPanel optionBar) { this.simCanvas = simCanvas; this.optionBar = optionBar; // Register events with tools simCanvas.MouseLeftButtonDown += SimCanvas_MouseLeftButtonDown; simCanvas.MouseMove += SimCanvas_MouseMove; simCanvas.MouseLeftButtonUp += SimCanvas_MouseLeftButtonUp; // Track buttons in dictionary toolButtons.Add(ToolType.Particle, ParticleButton); toolButtons.Add(ToolType.Ruler, RulerButton); toolButtons.Add(ToolType.Select, SelectButton); toolButtons.Add(ToolType.LinearForce, LinearForceButton); // Initialize tools RegisterTools( new ParticleToolLogic(simCanvas, particleSim), new LinearForceLogic(simCanvas, particleSim), new RulerLogic(simCanvas), new SelectLogic(simCanvas, particleSim) ); // Select tool to begin with SelectTool(ToolType.Particle); }
public ParticleToolLogic(Canvas simCanvas, ParticleSim particleSim) { this.simCanvas = simCanvas; this.particleSim = particleSim; OptionBar = new ParticleToolOptions(); (OptionBar as ParticleToolOptions).SpawnButtonClick += SpawnParticleButton_Clicked; ToolType = ToolType.Particle; velPreview = new Line() { Stroke = new SolidColorBrush(Colors.Red), StrokeThickness = 2, Visibility = Visibility.Hidden, StrokeStartLineCap = PenLineCap.Triangle, X1 = 0, Y1 = 0, X2 = 0, Y2 = 0 }; particlePreview = new Ellipse(); simCanvas.Children.Add(velPreview); simCanvas.Children.Add(particlePreview); }
public SelectLogic(Canvas simCanvas, ParticleSim particleSim) { this.simCanvas = simCanvas; this.particleSim = particleSim; OptionBar = new SelectOptions(); ToolType = ToolType.Select; // Set up marquee select simCanvas.Children.Add(selectPreview); Panel.SetZIndex(selectPreview, 901); // Setup selection window selectionWindow = new SelectionWindow(); selectionWindow.Activated += SelectionWindowActivated; Application.Current.MainWindow.Closing += (s, e) => { selectionWindow.Show(); selectionWindow.Close(); }; (OptionBar as SelectOptions).ViewSelectionButton.Click += (s, e) => { if (selectionWindow.IsVisible) { selectionWindow.Hide(); } else { selectionWindow.Show(); } }; particleSim.BodySpawned += (s, e) => UpdateSelectionViewer(); selectionWindow.SelectedItemView.SelectionChanged += (s, e) => { while (selectionWindow.PropertiesPanel.Children.Count != 0) { selectionWindow.PropertiesPanel.Children.RemoveAt(0); } int selectedIndex = (s as ListView).SelectedIndex; if (selectedIndex == -1) { return; } Bodies.Rigidbody body = selectedBodies[selectedIndex]; AddDataEntry(new Dictionary <string, object>() { { "Radius", body.radius }, { "Charge", body.Charge } }); }; }
public void Setup(ParticleSim particleSim, ParticleSimulator simGUI) { this.particleSim = particleSim; RegisterCommands( new Tuple <Button, ICommand>(DeleteAllButton, new DeleteAll(particleSim)), new Tuple <Button, ICommand>(PauseButton, new Pause(simGUI)), new Tuple <Button, ICommand>(PlayButton, new Play(simGUI)) ); }
public LinearForceLogic(Canvas simCanvas, ParticleSim particleSim) { this.simCanvas = simCanvas; this.particleSim = particleSim; ToolType = ToolType.LinearForce; OptionBar = new LinearForceOptions(); (OptionBar as LinearForceOptions).SpawnButton.Click += SpawnButton_Click; Panel.SetZIndex(forcePreviewLine, 900); simCanvas.Children.Add(forcePreviewLine); }
public ParticleSimulator() { InitializeComponent(); Application.Current.MainWindow.Closing += OnClosing; // Initialize simulation particleSim = new ParticleSim(SimCanvas); // Setup toolbar + commandbar UserToolBar.Setup(SimCanvas, particleSim, ToolOptionBar); CommandBar.Setup(particleSim, this); TopBarDockPanel.PreviewMouseWheel += (s, e) => { if (e.Delta < 0) { OptionBarScrollViewer.LineRight(); } else { OptionBarScrollViewer.LineLeft(); } e.Handled = true; }; // Setup settings window settingsWindow = new SettingsWindow(this, particleSim); settingsWindow.Activated += SettingsWindowActivated; SettingsButton.Click += (s, e) => { if (settingsWindow.IsVisible) { settingsWindow.Hide(); } else { settingsWindow.Show(); } }; // Capture render loop to use as main simulation loop CompositionTarget.Rendering += (s, e) => MainLoop(); }
public SettingsWindow(ParticleSimulator pSimPage, ParticleSim particleSim) { this.pSimPage = pSimPage; this.particleSim = particleSim; InitializeComponent(); // Register events Closing += OnClosing; TrailsToggleButton.Click += (s, e) => { bool trailsOn = TrailsToggleButton.IsChecked ?? false; particleSim.ParticleTrailsOn = trailsOn; TrailsToggleButton.Content = (trailsOn) ? "On" : "Off"; TrailLengthSlider.IsEnabled = trailsOn; }; TrailLengthSlider.ValueChanged += (s, e) => { int newLength = (int)e.NewValue; TrailLengthLabel.Content = newLength; particleSim.TrailLength = newLength; }; ParticleCollToggleButton.Click += (s, e) => { bool collisionsOn = ParticleCollToggleButton.IsChecked ?? true; particleSim.CollisionsOn = collisionsOn; ParticleCollToggleButton.Content = (collisionsOn) ? "On" : "Off"; }; ElecMagStateComboBox.SelectionChanged += (s, e) => { particleSim.ElectroMagneticState = (ElectroMagneticState)ElecMagStateComboBox.SelectedIndex; }; // Time interval events RealTimeCheckBox.Checked += (s, e) => TimeStepUpDown.IsEnabled = false; RealTimeCheckBox.Unchecked += (s, e) => TimeStepUpDown.IsEnabled = true; }
public DeleteAll(ParticleSim particleSim) { this.particleSim = particleSim; }