Exemple #1
0
        private void OnPaintCanvas(object sender, SKPaintSurfaceEventArgs e)
        {
            Painter painter = new SKPainter(e.Surface.Canvas);

            KScoreHandler.Draw(painter, 0, 0, e.Info.Width, e.Info.Height, forcePacked: false); // forcePacked is no longer used since we added a button to switch packing also on iOS/Android
            data.DisplayTouchLocation(painter);
        }
        private static NSScoreView scoreControl = null;  // The only NSScoreView, same as "this", but accessible from static methods

        private void OnLoad()
        {
            this.WantsLayer = true;
            this.LayerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.OnSetNeedsDisplay;
            scoreControl = this;
            KScoreHandler.Register(scoreControl);
            Tracking();
        }
        // Implement this to draw on the canvas.
        public override void DrawRect(CGRect dirtyRect)
        {
            base.DrawRect(dirtyRect);
            var context = NSGraphicsContext.CurrentContext.CGContext;

            CG.FlipCoordinateSystem(context);
            KScoreHandler.Draw(new CGPainter(context), 0, 0, (int)dirtyRect.Width, (int)dirtyRect.Height);
        }
Exemple #4
0
 public /* Interface KGuiControl */ void GuiScoreUpdate()
 {
     if (!this.InvokeRequired)
     {
         KScoreHandler.DoInvalidate();
     }
     else
     {
         this.Invoke((Action) delegate { GuiScoreUpdate(); });
     }
 }
Exemple #5
0
        public ScoreView()
        {
            // register this as KTouchable so that touch callbacks can be attached through interface KTouchable:
            KScoreHandler.Register(this);

            this.BackgroundColor = Color.Transparent;
            this.PaintSurface   += OnPaintCanvas;

            /* Attact Touch effect from KTouch.OnTouchEffectAction */
            TouchEffect touchEffect = new TouchEffect();

            touchEffect.TouchAction += KTouchServer.OnTouchEffectAction;
            touchEffect.Capture      = true; // "This has the effect of delivering all subsequent events to the same event handler"
            this.Effects.Add(touchEffect);

            /* Initialize Interface KTouchClient with a locally-sourced KTouchClientData closure */
            this.data = new KTouchClientData(
                invalidateSurface: () => { this.InvalidateSurface(); },
                setManualPinchPan: (Swipe pinchPan) => { KScoreHandler.SetManualPinchPan(pinchPan); }
                );
        }
Exemple #6
0
        private void SettingsMenu()
        {
            guiControls.menuSettings.SetImage("icons8_settings_384_W_48x48");
            guiControls.menuSettings.autoClose = true;

            var header = guiControls.menuSettings.NewMenuSection(level: -2); header.SetText("Settings");
            var score  = guiControls.menuSettings.NewMenuSection(level: 2); score.SetText("Reaction score");
            var mozart = guiControls.menuSettings.NewMenuItemButton(); mozart.SetText("Mozart");
            var bach   = guiControls.menuSettings.NewMenuItemButton(); bach.SetText("Bach"); bach.Selected(true);

            // var influence = guiControls.menuSettings.NewMenuItemButton(); influence.SetText("influence"); // now unused in Settings
            // var binpacking = guiControls.menuSettings.NewMenuItemButton(); binpacking.SetText("[pack]"); // now unused in Settings
            mozart.OnClick((object s, EventArgs e) => {
                bach.Selected(false);
                scoreStyle = "Mozart";
                mozart.Selected(true);
                KScoreHandler.ScoreUpdate();
            });
            bach.OnClick((object s, EventArgs e) => {
                mozart.Selected(false);
                scoreStyle = "Bach";
                bach.Selected(true);
                KScoreHandler.ScoreUpdate();
            });
            //influence.OnClick((object s, EventArgs e) => {
            //    if (influence.IsSelected()) {
            //        KScoreHandler.showInfluences = false;
            //        influence.Selected(false);
            //    } else {
            //        KScoreHandler.showInfluences = true;
            //        influence.Selected(true);
            //    }
            //    KScoreHandler.ScoreUpdate();
            //});
            //binpacking.OnClick((object s, EventArgs e) => {
            //    if (binpacking.IsSelected()) {
            //        packReactions = false;
            //        binpacking.Selected(false);
            //    } else {
            //        packReactions = true;
            //        binpacking.Selected(true);
            //    }
            //    KScoreHandler.ScoreUpdate();
            //});
            var solvers = guiControls.menuSettings.NewMenuSection(level: 2); solvers.SetText("ODE Solvers");
            var rk547m  = guiControls.menuSettings.NewMenuItemButton(); rk547m.SetText("RK547M"); rk547m.Selected(true);
            var gearBDF = guiControls.menuSettings.NewMenuItemButton(); gearBDF.SetText("GearBDF");

            rk547m.OnClick((object s, EventArgs e) => {
                gearBDF.Selected(false);
                solver = "RK547M";
                rk547m.Selected(true);
            });
            gearBDF.OnClick((object s, EventArgs e) => {
                rk547m.Selected(false);
                solver = "GearBDF";
                gearBDF.Selected(true);
            });
            var lna   = guiControls.menuSettings.NewMenuSection(level: 2); lna.SetText("LNA");
            var drift = guiControls.menuSettings.NewMenuItemButton(); drift.SetText("Precompute drift");

            drift.OnClick((object s, EventArgs e) => {
                if (drift.IsSelected())
                {
                    precomputeLNA = false;
                    drift.Selected(false);
                }
                else
                {
                    precomputeLNA = true;
                    drift.Selected(true);
                }
            });
            var directories = guiControls.menuSettings.NewMenuSection(level: 2); directories.SetText("Set directories");
            var forModels   = guiControls.menuSettings.NewMenuItemButton(); forModels.SetText("For model files");

            forModels.OnClick((object s, EventArgs e) => {
                guiControls.SetDirectory();
            });
            var privacy   = guiControls.menuSettings.NewMenuSection(level: 2); privacy.SetText("Privacy policy");
            var policyURL = guiControls.menuSettings.NewMenuItemButton(); policyURL.SetText("Copy url to clipboard");

            policyURL.OnClick((object s, EventArgs e) => {
                guiControls.PrivacyPolicyToClipboard();
            });
            var version = guiControls.menuSettings.NewMenuSection(level: 4); version.SetText("Version " + Gui.KaemikaVersion); // version.SetText("Version 6.02214076e23");

            version.OnClick((object s, EventArgs e) => { guiControls.SetSnapshotSize(); });

            guiControls.menuSettings.OnClick((object s, EventArgs e) => {
                mozart.Selected(scoreStyle == "Mozart");
                bach.Selected(scoreStyle == "Bach");
                gearBDF.Selected(solver == "GearBDF");
                rk547m.Selected(solver == "RK547M");
                drift.Selected(precomputeLNA);
                MenuClicked(guiControls.menuSettings);
            });

            guiControls.menuSettings.ClearMenuItems();
            guiControls.menuSettings.AddMenuItem(header);
            guiControls.menuSettings.AddSeparator();
            guiControls.menuSettings.AddMenuItem(score);
            guiControls.menuSettings.AddMenuItems(new KButton[2] {
                mozart, bach
            });
            //guiControls.menuSettings.AddMenuItems(new KButton[3] { mozart, bach, binpacking });
            //guiControls.menuSettings.AddMenuItems(new KButton[2] { influence, binpacking });
            guiControls.menuSettings.AddSeparator();
            guiControls.menuSettings.AddMenuItem(solvers);
            guiControls.menuSettings.AddMenuItems(new KButton[2] {
                rk547m, gearBDF
            });
            guiControls.menuSettings.AddSeparator();
            guiControls.menuSettings.AddMenuItem(lna);
            guiControls.menuSettings.AddMenuItem(drift);
            guiControls.menuSettings.AddSeparator();
            guiControls.menuSettings.AddMenuItem(directories);
            guiControls.menuSettings.AddMenuItem(forModels);
            guiControls.menuSettings.AddSeparator();
            guiControls.menuSettings.AddMenuItem(privacy);
            guiControls.menuSettings.AddMenuItem(policyURL);
            guiControls.menuSettings.AddSeparator();
            guiControls.menuSettings.AddMenuItem(version);

            guiControls.menuSettings.Visible(true);
            guiControls.menuSettings.Enabled(true);
        }
Exemple #7
0
        private static void Execute_Worker(bool doParse, bool doAST, bool doScope, bool autoContinue, bool chartOutput)
        {
            KGui.gui.GuiBeginningExecution();
            lastExecution = null;
            KGui.gui.GuiSaveInput();
            KGui.gui.GuiOutputClear();
            DateTime startTime = DateTime.Now;

            if (TheParser.Parser().Parse(KGui.gui.GuiInputGetText(), out IReduction root))
            {
                if (doParse)
                {
                    root.DrawReductionTree();
                }
                else
                {
                    Netlist netlist = new Netlist(autoContinue);
                    try
                    {
                        Statements statements = Parser.ParseTop(root);
                        if (doAST)
                        {
                            KGui.gui.GuiOutputAppendText(statements.Format());
                        }
                        else
                        {
                            SampleValue vessel       = Vessel(KControls.SelectNoiseSelectedItem != Noise.None);
                            Env         initialEnv   = new ValueEnv("vessel", Type.Sample, vessel, new BuiltinEnv(new NullEnv()));
                            Scope       initialScope = initialEnv.ToScope();
                            Scope       scope        = statements.Scope(initialScope);
                            if (doScope)
                            {
                                KGui.gui.GuiOutputAppendText(scope.Format());
                            }
                            else
                            {
                                Style style = new Style(varchar: scopeVariants ? defaultVarchar : null, new SwapMap(),
                                                        map: remapVariants ? new AlphaMap() : null, numberFormat: "G4", dataFormat: "full",  // we want it full for samples, but maybe only headers for functions/networks?
                                                        exportTarget: ExportTarget.Standard, traceFull: false, chartOutput: chartOutput);
                                KChartHandler.ChartClear("", "s", "M", style);
                                KChartHandler.LegendUpdate(style);
                                KScoreHandler.ScoreClear();
                                KControls.ParametersClear(style);
                                KDeviceHandler.Clear(style);
                                KDeviceHandler.Sample(vessel, style);

                                netlist.Emit(new SampleEntry(vessel));
                                DateTime evalTime = DateTime.Now;
                                lastExecution             = new ExecutionInstance(vessel, netlist, style, startTime, evalTime);
                                lastExecution.environment = statements.EvalReject(initialEnv, netlist, style, 0);
                                if (lastExecution.environment == null)
                                {
                                    throw new Error("Top level reject");
                                }
                                lastExecution.EndTime();

                                if (style.chartOutput)
                                {
                                    foreach (ParameterEntry parameter in netlist.Parameters())
                                    {
                                        KControls.AddParameter(parameter.symbol.Format(style), (parameter.value as NumberValue).value, parameter.distribution, style);
                                    }
                                    KGui.gui.GuiParametersUpdate(); // calls back KControls.ParametersUpdate, but only on Win/Mac
                                }

                                KGui.gui.GuiProcessOutput();
                            }
                        }
                    }
                    catch (ExecutionEnded) { lastExecution.EndTime(); KGui.gui.GuiOutputAppendText(lastExecution.ElapsedTime()); }
                    catch (ConstantEvaluation ex) { string cat = "Does not have a value: "; netlist.Emit(new CommentEntry(cat + ": " + ex.Message)); KGui.gui.GuiInputSetErrorSelection(-1, -1, 0, cat, ex.Message); }
                    catch (Error ex) { netlist.Emit(new CommentEntry(ex.Message)); KGui.gui.GuiInputSetErrorSelection(-1, -1, 0, "Error", ex.Message); try { KGui.gui.GuiProcessOutput(); } catch { }; }
                    catch (StackOverflowException ex) { netlist.Emit(new CommentEntry(ex.Message)); KGui.gui.GuiInputSetErrorSelection(-1, -1, 0, "Stack Overflow", ex.Message); }
                    catch (Exception ex) { string cat = "Something happened"; netlist.Emit(new CommentEntry(cat + ": " + ex.Message)); KGui.gui.GuiInputSetErrorSelection(-1, -1, 0, cat, ex.Message); }
                }
            }
            else
            {
                KGui.gui.GuiInputSetErrorSelection(TheParser.Parser().FailLineNumber(), TheParser.Parser().FailColumnNumber(), TheParser.Parser().FailLength(), TheParser.Parser().FailCategory(), TheParser.Parser().FailMessage());
            }
            EndingExecution();
        }
Exemple #8
0
        public static List <ExportAction> exportActionsList()
        {
            return(new List <ExportAction>()
            {
                new ExportAction("Export output text to clipboard", ExportAs.OutputCopy, () => { KGui.gui.GuiOutputCopy(); }),
                new ExportAction("Export images bitmap to clipboard", ExportAs.ChartSnapToClipboard, () => { KGui.gui.GuiChartSnap(); }),
                new ExportAction("Export images to SVG (InkScape) file", ExportAs.ChartSnapToSvg, () => { KGui.gui.GuiChartSnapToSvg(); }),
                new ExportAction("Export visible chart data to CSV (Excel) file", ExportAs.ChartData, () => { KGui.gui.GuiChartData(); }),
                new ExportAction("Export last sample to SBML (Copasi) file", ExportAs.SBML, () => { KGui.gui.GuiModelToSBML(); }),
                new ExportAction("Export last sample to ODE (Oscill8) text", ExportAs.ODE, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.ODE); }),
                new ExportAction("Export last sample to LBS/html5 text", ExportAs.MSRC_CRN, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.MSRC_CRN); }),
                new ExportAction("Export last sample to LBS/silverlight text", ExportAs.MSRC_LBS, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.MSRC_LBS); }),
                new ExportAction("Export steady state equations (Wolfram) text", ExportAs.SteadyState, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.SteadyState); }),
                new ExportAction("Export protocol step graph to GraphViz text", ExportAs.ProtocolGraph, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.ProtocolGraph); }),
                new ExportAction("Export protocol state graph to GraphViz text", ExportAs.PDMPGraph, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.PDMPGraph); }),

                //new ExportAction("Export reaction graph", ExportAs.ReactionGraph, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.ReactionGraph); }),
                //new ExportAction("Export reaction complex graph", ExportAs.ComplexGraph, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.ComplexGraph); }),
                //new ExportAction("PDMP GraphViz", ExportAs.PDMP_GraphViz, () => { Exec.Execute_Exporter(false, ExportAs.PDMP_GraphViz); }),
                //new ExportAction("PDMP Parallel", ExportAs.PDMP_Parallel, () => { Exec.Execute_Exporter(false, ExportAs.PDMP_Parallel); }),
                //new ExportAction("PDMP Parallel GraphViz", ExportAs.PDMP_Parallel_GraphViz, () => { Exec.Execute_Exporter(false, ExportAs.PDMP_Parallel_GraphViz); }),
            });
        }
Exemple #9
0
        public static ExportAction currentOutputAction = showReactionScoreOutputAction; // initialized by RestorePreferences

        public static List <ExportAction> outputActionsList()
        {
            return(new List <ExportAction>()
            {
                showReactionScoreOutputAction,
                showInitialCRNOutputAction,
                showEvaluationOutputAction,
                //new ExportAction("Show full trace", ExportAs.FullTrace, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.FullTrace); }),
                new ExportAction("Show chemical trace", ExportAs.ChemicalTrace, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide(); KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.ChemicalTrace); }),
                new ExportAction("Show reactions", ExportAs.PDMPreactions, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide();  KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.PDMPreactions); }),
                new ExportAction("Show equations", ExportAs.PDMPequations, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide();  KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.PDMPequations); }),
                new ExportAction("Show stoichiometry", ExportAs.PDMPstoichiometry, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide();  KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.PDMPstoichiometry); }),
                new ExportAction("Show protocol", ExportAs.Protocol, () => { KGui.gui.GuiOutputTextShow(); KScoreHandler.ScoreHide();  KGui.gui.GuiOutputSetText(""); Exec.Execute_Exporter(false, ExportAs.Protocol); }),
                //new ExportAction("Show last simulation state", ExportAs.None, () => {
                //    KGui.gui.GuiOutputSetText("");
                //    string s = Exec.lastReport + Environment.NewLine + Exec.lastState + Environment.NewLine;
                //    KGui.gui.GuiOutputAppendText(s);
                //    // try { System.Windows.Forms.Clipboard.SetText(s); } catch (ArgumentException) { };
                //}),
            });
        }
Exemple #10
0
 partial void PrefsScoreBach(NSObject sender)
 {
     KControls.scoreStyle         = "Bach";
     PrefsScoreMozartOutlet.State = NSCellStateValue.Off;
     KScoreHandler.ScoreUpdate();
 }
Exemple #11
0
        Integrate(Func <double, double, Vector, Func <double, Vector, Vector>, IEnumerable <SolPoint> > Solver,
                  State initialState, double initialTime, double finalTime, Func <double, Vector, Vector> Flux,
                  SampleValue sample, List <ReportEntry> reports, Noise noise, bool nonTrivialSolution, Style style)
        {
            double redrawTick = initialTime; double redrawStep = (finalTime - initialTime) / 50;
            double densityTick = initialTime; double densityStep = (finalTime - initialTime) / 1000;
            int    pointsCounter   = 0;
            int    renderedCounter = 0;
            double lastTime        = finalTime;
            State  lastState       = null;

            if (initialState.NaN())
            {
                Gui.Log("Initial state contains NaN.");
                return(lastTime, lastState);
            }

            KChartHandler.ChartClearData(style);
            (string[] series, string[] seriesLNA) = GenerateSeries(reports, noise, style);
            KChartHandler.LegendUpdate(style);
            KScoreHandler.ScoreUpdate();

            IEnumerable <SolPoint> solution = SolutionGererator(Solver, initialState, initialTime, finalTime, Flux, nonTrivialSolution, style);
            List <TriggerEntry>    triggers = sample.Triggers(style);

            bool[] triggered = new bool[triggers.Count]; for (int i = 0; i < triggers.Count; i++)
            {
                triggered[i] = false;
            }

            // BEGIN foreach (SolPoint solPoint in solution)  -- done by hand to catch exceptions in MoveNext()

            SolPoint solPoint    = new SolPoint(initialTime, initialState.Clone().ToArray());
            bool     hasSolPoint = false;
            var      enumerator  = solution.GetEnumerator();

            do
            {
                // Handle triggers first, they can apply to the initial state
                if (triggers.Count > 0)
                {
                    State state         = null; // allocated on need from solPoint
                    State modifiedState = null; // allocated on need from state
                    for (int i = 0; i < triggers.Count; i++)
                    {
                        if (triggered[i] == false)
                        {
                            TriggerEntry trigger = triggers[i];
                            if (state == null)
                            {
                                state = new State(sample.Count(), lna: noise != Noise.None).InitAll(solPoint.X);
                            }
                            if (trigger.condition.ObserveBool(sample, solPoint.T, state, Flux, style))
                            {
                                if (modifiedState == null)
                                {
                                    modifiedState = state.Clone();
                                }
                                double rawValue   = trigger.assignment.ObserveMean(sample, solPoint.T, state, Flux, style);
                                double assignment = trigger.sample.stateMap.NormalizeDimension(trigger.target, rawValue, trigger.dimension, trigger.sample.Volume(), style);
                                int    index      = sample.stateMap.IndexOf(trigger.target.symbol);
                                modifiedState.SetMean(index, assignment);
                                if (noise != Noise.None && trigger.assignmentVariance != null)
                                {
                                    double rawValueVariance   = trigger.assignmentVariance.ObserveMean(sample, solPoint.T, state, Flux, style);
                                    double assignmentVariance = trigger.sample.stateMap.NormalizeDimension(trigger.target, rawValueVariance, trigger.dimension, trigger.sample.Volume(), style);
                                    modifiedState.SetCovar(index, index, assignmentVariance);
                                }
                                triggered[i] = true;
                            }
                        }
                    }
                    if (modifiedState != null)          //restart the solver
                    {
                        State newState = modifiedState; // new State(sample.Count(), lna: noise != Noise.None).InitAll(modifiedState.ToArray());
                        solution   = SolutionGererator(Solver, newState, solPoint.T, finalTime, Flux, nonTrivialSolution, style);
                        enumerator = solution.GetEnumerator();
                    }
                }

                try {
                    if (!enumerator.MoveNext())
                    {
                        break;
                    }
                    solPoint    = enumerator.Current;    // get next step of integration from solver
                    hasSolPoint = true;
                }
                catch (ConstantEvaluation e) { // stop simulation but allow execution to proceed
                    Gui.Log("Simulation stopped and ignored: cannot evaluate constant '" + e.Message + "'");
                    return(lastTime, lastState);
                }
                catch (Error e) { throw new Error(e.Message); }
                catch (Exception e) { KChartHandler.ChartUpdate(style, false); throw new Error("ODE Solver FAILED: " + e.Message); }
                pointsCounter++;

                // LOOP BODY of foreach (SolPoint solPoint in solution):
                if (!Exec.IsExecuting())
                {
                    KChartHandler.ChartUpdate(style); throw new ExecutionEnded("");
                }                                  // break;

                if (style.chartOutput)             // Plot the new solution point
                {
                    if (solPoint.T >= densityTick) // avoid drawing too many points
                    {
                        State state = new State(sample.Count(), lna: noise != Noise.None).InitAll(solPoint.X);
                        for (int i = 0; i < reports.Count; i++)
                        {
                            if (series[i] != null)   // if a series was actually generated from this report
                            // generate deterministic series
                            {
                                if ((noise == Noise.None && reports[i].flow.HasDeterministicValue()) ||
                                    (noise != Noise.None && reports[i].flow.HasStochasticMean()))
                                {
                                    double mean = reports[i].flow.ObserveMean(sample, solPoint.T, state, Flux, style);
                                    KChartHandler.ChartAddPoint(series[i], solPoint.T, mean, 0.0, Noise.None);
                                }
                                // generate LNA-dependent series
                                if (noise != Noise.None && reports[i].flow.HasStochasticVariance() && !reports[i].flow.HasNullVariance())
                                {
                                    double mean     = reports[i].flow.ObserveMean(sample, solPoint.T, state, Flux, style);
                                    double variance = reports[i].flow.ObserveVariance(sample, solPoint.T, state, style);
                                    KChartHandler.ChartAddPoint(seriesLNA[i], solPoint.T, mean, variance, noise);
                                }
                            }
                        }
                        renderedCounter++;
                        densityTick += densityStep;
                    }
                    if (solPoint.T >= redrawTick)   // avoid redrawing the plot too often
                    {
                        KChartHandler.ChartUpdate(style, incremental: true);
                        redrawTick += redrawStep;
                    }
                }

                lastTime = solPoint.T;

                // END foreach (SolPoint solPoint in solution)
            } while (true);

            if (hasSolPoint)
            {
                lastState = new State(sample.Count(), lna: noise != Noise.None).InitAll(solPoint.X);
            }
            KChartHandler.ChartUpdate(style, incremental: false);

            return(lastTime, lastState);
        }
Exemple #12
0
        private static KScoreSKControl scoreControl = null; // The only KScoreSKControl, same as "this", but accessible from static methods

        public KScoreSKControl() : base()
        {
            scoreControl          = this;
            scoreControl.Location = new System.Drawing.Point(0, 0);
            KScoreHandler.Register(scoreControl);
        }
Exemple #13
0
 // Implement this to draw on the canvas.
 protected override void OnPaintSurface(SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs e)
 {
     base.OnPaintSurface(e);
     KScoreHandler.Draw(new SKPainter(e.Surface.Canvas), Location.X, Location.Y, e.Info.Width, e.Info.Height);
 }