func (f *Imp) Write() { // if f.Empty() { return } scr.Colour(f.colour) switch f.sort { case Pointset: scr.Pointset(f.x, f.y) case Segments: scr.Segments(f.x, f.y) case Polygon: scr.Polygon(f.x, f.y) if f.filled { // scr.PolygonFull (f.x, f.y) // not yet implemented } case Curve: scr.Curve(f.x, f.y) if f.filled { n := len(f.x) - 1 scr.CircleFull(f.x[n], f.y[n], 4) // ? } case InfLine: scr.InfLine(f.x[0], f.y[0], f.x[1], f.y[1]) case Rectangle: if f.filled { scr.RectangleFull(f.x[0], f.y[0], f.x[1], f.y[1]) } else { scr.Rectangle(f.x[0], f.y[0], f.x[1], f.y[1]) } case Circle: if f.filled { scr.CircleFull(f.x[0], f.y[0], uint(f.x[1])) } else { scr.Circle(f.x[0], f.y[0], uint(f.x[1])) } case Ellipse: if f.filled { scr.EllipseFull(f.x[0], f.y[0], uint(f.x[1]), uint(f.y[1])) } else { scr.Ellipse(f.x[0], f.y[0], uint(f.x[1]), uint(f.y[1])) } case Text: bx.Wd(str.ProperLen(f.tx)) bx.ColourF(f.colour) bx.WriteGr(f.tx, f.x[0], f.y[0]) case Image: // if bewegt { // scr.RectangleFullInv (...) // } else { // copy from Imageptr in Framebuffer // } img.Get(f.tx, uint(f.x[0]), uint(f.y[0])) } }
func (f *Imp) editN() { // switch f.sort { case Pointset, Segments, Polygon, Curve: default: return } x0 := make([]int, 2) x0[0] = f.x[0] f.x = x0 y0 := make([]int, 2) y0[0] = f.y[0] f.y = y0 f.x[1], f.y[1] = scr.MousePosGr() f.invertN() var ( K kbd.Comm T uint ) loop: for { K, T = kbd.Command() scr.MouseCursor(true) n := uint(len(f.x)) switch K { case kbd.Esc: break loop case kbd.Go, kbd.Here, kbd.Pull, kbd.Hither, kbd.There, kbd.Push, kbd.Thither, kbd.This: // kbd.ToThis: f.invertN() // if f.sort == Curve { // if n == scr.MaxBezierdegree { break loop } // } if f.sort == Pointset { if K != kbd.Go { n++ } } else { if K == kbd.Here { // TODO Curve: missing n++ } } if K == kbd.This { n := len(f.x) if n == 0 { break loop } else { // TODO n-- if n == 0 { break loop // } else { // x0 = make ([]int, n); copy (x0, f.x[:n]); f.x = x0 // y0 = make ([]int, n); copy (y0, f.y[:n]); f.y = y0 } } } if n > uint(len(f.x)) { x0 = make([]int, n) copy(x0, f.x) f.x = x0 y0 = make([]int, n) copy(y0, f.y) f.y = y0 } f.x[n-1], f.y[n-1] = scr.MousePosGr() f.invertN() if f.sort == Pointset { if K == kbd.Hither { break loop } } else { if K == kbd.Thither { break loop } } } } if f.x == nil { f.Clr() return } scr.Colour(f.colour) switch f.sort { case Pointset: scr.Pointset(f.x, f.y) case Segments: scr.Segments(f.x, f.y) case Polygon: scr.Polygon(f.x, f.y) f.filled = T > 0 && f.convex() if f.filled { // scr.PolygonFull (f.x, f.y) // not yet implemented } case Curve: scr.Curve(f.x, f.y) f.filled = T > 0 if f.filled { n := len(f.x) - 1 scr.CircleFull(f.x[n], f.y[n], 4) } } }