コード例 #1
0
        private void RebuildSurfaceList()
        {
            SurfaceList.Clear();
            int existingSurfaces = Project.Surfaces.Max(x => x.SurfaceID);
            int maxSurface       = existingSurfaces;

            if (ModelsToImport.Any())
            {
                maxSurface = Math.Max(maxSurface, ModelsToImport.Max(x => x.SurfaceID));
            }

            for (int i = 0; i <= maxSurface + 1; i++)
            {
                if (i <= existingSurfaces)
                {
                    SurfaceList.Add(new SurfaceItem(i, $"Surface {i}")
                    {
                        ExistingMeshes = Project.Surfaces[i].GetAllMeshReferences().Count()
                    });
                }
                else
                {
                    SurfaceList.Add(new SurfaceItem(i, $"*Surface {i}"));
                }
            }
        }
コード例 #2
0
        public MainWindow()
            : base(Gtk.WindowType.Toplevel)
        {
            // new Integrator
            _h = 0.01; //delta t
            _maxTime = 500;
            _timer = new TriggeredTimer (100);
            _timer.Elapsed += delegate(object sender, EventArgs e) {
                Gtk.Application.Invoke (delegate {
                    _timeValue = _timeValue + _h*5;
                    slideTime.Value = _timeValue;
                    RepaintAll();
                });
            };
            _settings = new SettingsChimera ();
            AWP awp = _settings.AWP;
            _int = new Integrator (_h, _maxTime, awp);

            _int.AWP.Changed += AwpChanged;
            _playing = false;
            _timeValue = 0;
            _int.EditMode = true;
            Build ();

            _surfaces = new SurfaceList(4, "j");
            Table tbl = _surfaces;

            this.contentColumns.Add (tbl);
            global::Gtk.Box.BoxChild wtbl = ((global::Gtk.Box.BoxChild)(this.contentColumns [tbl]));
            wtbl.Position = 0;

            _fileOpenDialog = new FileChooserDialog ("Anfangswert öffnen", this, FileChooserAction.Open);
            _fileOpenDialog.AddButton(Stock.Cancel, ResponseType.Cancel);
            _fileOpenDialog.AddButton(Stock.Open, ResponseType.Ok);

            _fileOpenDialog.Filter = new FileFilter();
            _fileOpenDialog.Filter.AddPattern("*.awp");

            _fileSaveDialog = new FileChooserDialog ("Anfangswert speichern", this, FileChooserAction.Save);
            _fileSaveDialog.AddButton(Stock.Cancel, ResponseType.Cancel);
            _fileSaveDialog.AddButton(Stock.Save, ResponseType.Ok);

            _fileSaveDialog.Filter = new FileFilter();
            _fileSaveDialog.Filter.AddPattern("*.awp");

            _filePlotDialog = new FileChooserDialog ("Grafiken exportieren", this, FileChooserAction.CreateFolder);
            _filePlotDialog.AddButton(Stock.Cancel, ResponseType.Cancel);
            _filePlotDialog.AddButton("Exportieren", ResponseType.Ok);

            ValueSurfaceItem vsi_real = new ValueSurfaceItem (1500, 500, 500, 100, "x<sub>j</sub>");
            vsi_real.ValueExtractor = new Func<Complex, double> (delegate(Complex z) {
                return z.Real;
            });
            //vsi_real.YLimUp = 1.2;
            //vsi_real.YLimDown = -1.2;
            ValueSurfaceItem vsi_imag = new ValueSurfaceItem (1500, 500, 500, 100, "y<sub>j</sub>");
            vsi_imag.ValueExtractor = new Func<Complex, double> (delegate(Complex z) {
                return z.Imaginary;
            });
            //vsi_imag.YLimUp = 1.2;
            //vsi_imag.YLimDown = -1.2;
            ValueSurfaceItem vsi_magn = new ValueSurfaceItem (1500, 500, 500, 100, "r<sub>j</sub>");
            //vsi_magn.YLimDown = 0;
            vsi_magn.ValueExtractor = new Func<Complex, double> (delegate(Complex z) {
                return z.Magnitude;
            });
            //vsi_magn.YLimUp = 1.2;
            //vsi_magn.YLimDown = -0.2;
            ValueSurfaceItem vsi_phas = new ValueSurfaceItem (1500, 500, 500, 100, "φ<sub>j</sub>");
            vsi_phas.ValueExtractor = new Func<Complex, double> (delegate(Complex z) {
                return z.Phase;
            });
            //vsi_phas.YLimUp = 3.2;
            //vsi_phas.YLimDown = -3.2;

            vsi_real.PointChanged += delegate(object sender, OdePointEventArgs e) {
                modY [e.Index] = new Complex (e.Value.Real, modY [e.Index].Imaginary);
                _int.AWP.Y = modY;
                RepaintAll ();
            };
            vsi_real.RedrawRequired += SurfaceRedrawRequired;
            vsi_imag.PointChanged += delegate(object sender, OdePointEventArgs e) {
                modY [e.Index] = new Complex (modY[e.Index].Real, e.Value.Real);
                _int.AWP.Y = modY;
                RepaintAll ();
            };
            vsi_imag.RedrawRequired += SurfaceRedrawRequired;
            vsi_magn.PointChanged += delegate(object sender, OdePointEventArgs e) {
                modY [e.Index] = Complex.FromPolarCoordinates(Math.Max(0, e.Value.Real), modY[e.Index].Phase);
                _int.AWP.Y = modY;
                RepaintAll ();
            };
            vsi_magn.RedrawRequired += SurfaceRedrawRequired;
            vsi_magn.AxisProperties.ZeroPosition = 0.92;
            vsi_magn.AxisProperties.AddValue(0, "0");
            vsi_phas.PointChanged += delegate(object sender, OdePointEventArgs e) {
                modY [e.Index] = Complex.FromPolarCoordinates(modY[e.Index].Magnitude, e.Value.Real);
                _int.AWP.Y = modY;
                RepaintAll ();
            };
            vsi_phas.RedrawRequired += SurfaceRedrawRequired;
            vsi_phas.AxisProperties = AxisProperties.CreateStatic (vsi_phas, -3.8, 3.8);
            vsi_phas.AxisProperties.MaxCount = 3;
            vsi_phas.AxisProperties.AddValue(Math.PI, "π");
            vsi_phas.AxisProperties.AddValue(0, "0");
            vsi_phas.AxisProperties.AddValue(-Math.PI, "-π");

            _surfaces.Add (vsi_real);
            _surfaces.Add (vsi_imag);
            _surfaces.Add (vsi_magn);
            _surfaces.Add (vsi_phas);

            _portrait = new PhasePortraitSurfaceItem (500, 300);
            _portrait.PointAdded += delegate(object sender, OdePointEventArgs e) {
                Complex[] n = new Complex[modY.Length + 1];
                Array.Copy (modY, n, modY.Length);
                n [modY.Length] = e.Value;

                modY = n;
                _int.AWP.Y = modY;
                numN.Value = n.Length;
                RepaintAll ();
            };
            _portrait.Clear ();
            _portrait.RedrawRequired += SurfaceRedrawRequired;

            this.boxPhase.Add (_portrait);
            global::Gtk.Box.BoxChild wp = ((global::Gtk.Box.BoxChild)(this.boxPhase [_portrait]));
            wp.Position = 0;

            ShowAll ();

            slideTime.SetIncrements (_h, Math.Max (_h, _maxTime / 100));
            slideTime.SetRange (0, _maxTime);

            slideBeta.Digits = 2;
            slideK.Digits = 1;
            slideLambda.Digits = 1;
            slideOmega.Digits = 1;

            slideBeta.Value = _int.AWP.Beta;
            slideK.Value = _int.AWP.K;
            slideLambda.Value = _int.AWP.Lambda;
            slideOmega.Value = _int.AWP.Omega;
            //slideTime.Value = 0;
            numN.Value = _int.AWP.N;
            numP.Value = _int.AWP.P;

            _int.CalculationStarted += HandleCalculationStarted;
            _int.CalculationFinished += (object sender, EventArgs e) => {
                Gtk.Application.Invoke (delegate {
                    progressStatus.Visible = false;
                    lblStatus.Text = "Berechnung abgeschlossen";
                });
            };
            _int.TimeRange += (object sender, TimeRangeEventArgs e) => {
            //	slideTime.SetRange (0, e.Time);
                RepaintAll();
                Gtk.Application.Invoke (delegate {
                    progressStatus.Fraction = e.Time / _maxTime;
                });
            };

            _mode = ProgramMode.Investigation;
            ProgramMode = ProgramMode.Presentation;
            _int.EditMode = false;
        }
コード例 #3
0
 private void UpdateSurfaceComboBox()
 {
     SurfaceColumn.DataSource    = SurfaceList.ToArray();
     SurfaceColumn.DisplayMember = "Name";
     SurfaceColumn.ValueMember   = "ID";
 }