From 05b47262e327607d5da1b3e8ff6336d0e5eaa77c Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 3 May 2015 16:13:31 +0200 Subject: Add pic parser --- cutter.go | 6 +++--- main.go | 14 ++++++++++---- misc.go | 16 +++++++--------- page.go | 10 ---------- pic.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 63 insertions(+), 26 deletions(-) delete mode 100644 page.go create mode 100644 pic.go diff --git a/cutter.go b/cutter.go index 6195f2a..496fa3a 100644 --- a/cutter.go +++ b/cutter.go @@ -7,18 +7,18 @@ import ( ) type Point struct { - X, Y int + X, Y float64 } func (p Point) Add(u Point) Point { return Point{p.X + u.X, p.Y + u.Y} } -func (p Point) AddX(u int) Point { +func (p Point) AddX(u float64) Point { return Point{p.X + u, p.Y} } -func (p Point) AddY(u int) Point { +func (p Point) AddY(u float64) Point { return Point{p.X, p.Y + u} } diff --git a/main.go b/main.go index 478559a..6587821 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,5 @@ package main -import "fmt" - func main() { dev := NewDevice() defer dev.Close() @@ -17,9 +15,17 @@ func main() { //c.EasterEgg() //c.DrawMarks(Point{}, Point{}, 0) //c.WriteUpperRight(Point{4000,5440}) - fmt.Println(c.SearchMarks(Point{5240, 3800}, 400)) //fmt.Println(c.UnknownFQ5()) //c.Bezier(1, Point{0,0},Point{0,1000},Point{0,0},Point{1000,0}) //c.DrawCircles() - c.DrawAtom() + if !c.SearchMarks(Point{5240, 3800}, 400) { + return + } + + for _, path := range parsePage() { + c.Move(path[0]) + for _, p := range path[1:] { + c.Draw(p) + } + } } diff --git a/misc.go b/misc.go index e499aae..07ef7d3 100644 --- a/misc.go +++ b/misc.go @@ -1,29 +1,27 @@ package main func (c Cutter) DrawAtom() { + base := Point{2000, 2000} for i := 0; i < 3; i++ { - c.Ellipse(0, Point{2000, 2000}, + c.Ellipse(0, base, Polar{500, 0}, Polar{200, 3600}, 600*i) } - c.Circle(Point{2000, 2000}, Polar{100, 0}, Polar{100, 3600}) + c.Circle(base, Polar{100, 0}, Polar{100, 3600}) } func (c Cutter) DrawLines() { for i := 0; i < 9; i++ { c.LineType(LineStyle(i)) - c.Move(Point{100 * i, 0}) - c.Draw(Point{100 * i, 1000}) + c.Move(Point{100 * float64(i), 0}) + c.Draw(Point{100 * float64(i), 1000}) } } func (c Cutter) DrawCircles() { + base := Point{3000, 2000} for i := 1; i < 10; i++ { - c.Circle(Point{1000, 1000}, + c.Circle(base, Polar{100 * i, 0}, Polar{100 * i, 3600}) } - c.Move(Point{0, 1000}) - c.Draw(Point{2000, 1000}) - c.Move(Point{1000, 0}) - c.Draw(Point{1000, 2000}) } diff --git a/page.go b/page.go deleted file mode 100644 index 88fa3ca..0000000 --- a/page.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type Page struct { - Acceleration int - Dimension Point - MediaType int - Orientation Orientation - Origin Point - Speed int -} diff --git a/pic.go b/pic.go new file mode 100644 index 0000000..7a0a690 --- /dev/null +++ b/pic.go @@ -0,0 +1,43 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" + "strings" +) + +type Page []Path + +const scale = 24.5 * 20 + +func truncate(f float64) float64 { + return float64(int(f*100)) / 100 +} + +func parseLine(s string) (pa Path) { + if strings.HasPrefix(s, "line from ") { + for _, p := range strings.Split(s[10:], " to ") { + var po Point + fmt.Sscanf(p, "%v,%v", &po.Y, &po.X) + po.X = truncate(5440 - po.X*scale) + po.Y = truncate(po.Y * scale) + pa = append(pa, po) + } + } + return pa +} + +func parsePage() (pa Page) { + scanner := bufio.NewScanner(os.Stdin) + for scanner.Scan() { + if p := parseLine(scanner.Text()); p != nil { + pa = append(pa, p) + } + } + if err := scanner.Err(); err != nil { + log.Fatal(err) + } + return pa +} -- cgit v1.2.3