From 20a32ab9705c8ce1df18343b6e9662e752cdef06 Mon Sep 17 00:00:00 2001 From: "Andrew E. Torda" <torda@zbh.uni-hamburg.de> Date: Thu, 27 Jan 2022 09:19:45 +0100 Subject: [PATCH] Have to check in, before an experiment --- mc_work/dorun.go | 15 ++++++++------- mc_work/plot.go | 4 ++-- mc_work/scrnplt.go | 14 -------------- ui/scrnplt.go | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 23 deletions(-) delete mode 100644 mc_work/scrnplt.go create mode 100644 ui/scrnplt.go diff --git a/mc_work/dorun.go b/mc_work/dorun.go index d1f095b..01ad5a1 100644 --- a/mc_work/dorun.go +++ b/mc_work/dorun.go @@ -12,6 +12,7 @@ import ( "sync" "example.com/ackley_mc/ackley" + "example.com/ackley_mc/ui" ) const ( @@ -48,7 +49,7 @@ type cprm struct { // parameters calculated from input plotXtrj []float32 // for plotting trajectories coolme bool // Cooling ? or just constant temperature ? fplotWrt io.WriteCloser // Where to write the plot of function values - fplotiobuf *bytes.Buffer // The buffer possibly behind fplotWrt + fplotbuf *bytes.Buffer // The buffer possibly behind fplotWrt xplotme bool // Are we plotting X trajectories } @@ -101,7 +102,7 @@ func setupRun(mcPrm *mcPrm, cprm *cprm) error { } if mcPrm.fPltName != "" { // Then we are writing to a file - if mcPrm.fPltName, err = setSuffix(mcPrm.fPltName, ".png"); err != nil { + if mcPrm.fPltName, err = setSuffix(mcPrm.fPltName, ".svg"); err != nil { return fmt.Errorf("plot filename: %w", err) } if cprm.fplotWrt, err = os.Create(mcPrm.fPltName); err != nil { @@ -110,7 +111,7 @@ func setupRun(mcPrm *mcPrm, cprm *cprm) error { } else { // Must be writing to a screen var w bytes.Buffer // could be fancy, preallocate and use bytes.Newbuffer cprm.fplotWrt = addClose(&w) // Fix this, effectively two copies - cprm.fplotiobuf = &w // of the pointer + cprm.fplotbuf = &w // of the pointer } n_alloc := mcPrm.nStep / 5 // About a fifth of the number of steps cprm.plotnstp = make([]float64, 0, n_alloc) @@ -120,7 +121,7 @@ func setupRun(mcPrm *mcPrm, cprm *cprm) error { } if mcPrm.xPltName != "" { - if mcPrm.xPltName, err = setSuffix(mcPrm.xPltName, ".png"); err != nil { + if mcPrm.xPltName, err = setSuffix(mcPrm.xPltName, ".svg"); err != nil { return fmt.Errorf("plot filename: %w", err) } cprm.xplotme = true @@ -272,9 +273,9 @@ func doRun(mcPrm *mcPrm) error { return err } - if cprm.fplotiobuf != nil { - fmt.Println("len", cprm.fplotiobuf.Len()) - scrnplt(cprm.fplotiobuf.Bytes()) + if cprm.fplotbuf != nil { + fmt.Println("len", cprm.fplotbuf.Len()) + ui.Scrnplt(cprm.fplotbuf.Bytes()) } if err := plotxWrt(&cprm, mcPrm.xPltName, len(mcPrm.xIni)); err != nil { return err diff --git a/mc_work/plot.go b/mc_work/plot.go index c3cb773..0263060 100644 --- a/mc_work/plot.go +++ b/mc_work/plot.go @@ -143,7 +143,7 @@ func plotfWrt(cprm *cprm) error { }, } - if err := graph.Render(chart.PNG, cprm.fplotWrt); err != nil { + if err := graph.Render(chart.SVG, cprm.fplotWrt); err != nil { return fmt.Errorf("Render: %w", err) } @@ -201,7 +201,7 @@ func plotxWrt(cprm *cprm, xPltName string, ndim int) error { return err } defer xPlt.Close() - if err := graph.Render(chart.PNG, xPlt); err != nil { + if err := graph.Render(chart.SVG, xPlt); err != nil { return fmt.Errorf("plotting X trajectories: %w", err) } return nil diff --git a/mc_work/scrnplt.go b/mc_work/scrnplt.go deleted file mode 100644 index ca3f833..0000000 --- a/mc_work/scrnplt.go +++ /dev/null @@ -1,14 +0,0 @@ -// 25 Jan 2020 -// Given a buffer or two with a plot picture, send it to the screen - -// I think this might be better in its own package -package mc_work - -import ( - - "fmt" -) - -func scrnplt (b []byte) { - fmt.Println ("scrnplt says hello, buf size", len(b)) -} diff --git a/ui/scrnplt.go b/ui/scrnplt.go new file mode 100644 index 0000000..470aa0e --- /dev/null +++ b/ui/scrnplt.go @@ -0,0 +1,32 @@ +// 25 Jan 2020 +// Given a buffer or two with a plot picture, send it to the screen + +// I think this might be better in its own package +package ui + +import ( + "bytes" + "fmt" + "image/color" // need this for the green ? + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/app" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" +) + +func Scrnplt (b []byte) { + fmt.Println ("scrnplt says buf size", len(b), "first few bytes:", string(b[:10])) + a := app.New() + w := a.NewWindow("container") + image := canvas.NewImageFromReader(bytes.NewReader(b), "boo.svg") + green := color.NRGBA{R: 0, G: 180, B: 0, A: 255} + text1 := canvas.NewText("Hello", green); print(text1) + text2 := canvas.NewText("There", green) + text2.Move(fyne.NewPos(20, 20)) + content := container.NewWithoutLayout( image) // no more text 1, text2 + // content := container.New(layout.NewGridLayout(2), text1, text2) + + w.SetContent(content) + + w.ShowAndRun() +} -- GitLab