aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-05-03 16:13:31 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-05-03 16:13:31 +0200
commit05b47262e327607d5da1b3e8ff6336d0e5eaa77c (patch)
tree5c47b3217933306126971419f96673fe7b8d8e96
parent9f75aa9fe83e46a4bb3bea9d36ed78a41a4036e3 (diff)
Add pic parser
-rw-r--r--cutter.go6
-rw-r--r--main.go14
-rw-r--r--misc.go16
-rw-r--r--page.go10
-rw-r--r--pic.go43
5 files changed, 63 insertions, 26 deletions
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
+}