From 69668aa61de642ea275e6e2ace85f7b921480603 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 6 May 2015 23:35:58 +0200 Subject: Separate Units --- cutter.go | 44 +++----------------------------------------- misc.go | 12 +++++------- pic.go | 8 ++------ units.go | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 57 insertions(+), 55 deletions(-) diff --git a/cutter.go b/cutter.go index 0b42fb3..76804e4 100644 --- a/cutter.go +++ b/cutter.go @@ -6,32 +6,6 @@ import ( "time" ) -type Point struct { - X, Y float64 -} - -func (p Point) Add(u Point) Point { - return Point{p.X + u.X, p.Y + u.Y} -} - -func (p Point) Sub(u Point) Point { - return Point{p.X - u.X, p.Y - u.Y} -} - -func (p Point) AddX(u float64) Point { - return Point{p.X + u, p.Y} -} - -func (p Point) AddY(u float64) Point { - return Point{p.X, p.Y + u} -} - -type Polar struct { - R, Theta float64 -} - -type Path []Point - /* A4 Cutting area @@ -56,28 +30,16 @@ type Path []Point Usable: 4000x5440 pt */ -type Triple struct { - U, V, W float64 -} - var ( A4 = Point{272 * MM, 200 * MM} // Portrait Origin = Point{0, 0} ) -func (p Point) String() string { - return fmt.Sprintf("%v,%v", p.X, p.Y) -} - -func (t Triple) String() string { - return fmt.Sprintf("%v,%v,%v", t.U, t.V, t.W) -} - type Cutter struct { *bufio.ReadWriter } -func NewCutter(io *bufio.ReadWriter, o Orientation, rmlen float64) Cutter { +func NewCutter(io *bufio.ReadWriter, o Orientation, rmlen Unit) Cutter { c := Cutter{io} c.Initialize() if !c.Ready() { @@ -281,7 +243,7 @@ func (c Cutter) parseTriple() (t Triple) { return } -func (c Cutter) RegMarkLen(n float64) { +func (c Cutter) RegMarkLen(n Unit) { c.Send("TB51,", n) } @@ -408,7 +370,7 @@ func (c Cutter) Curve(a int, ph Path) { c.Flush() } -func (c Cutter) Ellipse(a int, p Point, start, end Polar, theta float64) { +func (c Cutter) Ellipse(a int, p Point, start, end Polar, theta Unit) { c.Send(")", a, ",", p, ",", start.R, ",", end.R, ",", start.Theta, ",", end.Theta, ",", theta) } diff --git a/misc.go b/misc.go index c271ce9..c320bc0 100644 --- a/misc.go +++ b/misc.go @@ -5,9 +5,7 @@ import "log" func (c Cutter) DrawAtom() { base := Point{2000, 2000} for i := 0; i < 3; i++ { - c.Ellipse(0, base, - Polar{500, 0}, Polar{200, 3600}, - 600*float64(i)) + c.Ellipse(0, base, Polar{500, 0}, Polar{200, 3600}, 600*Unit(i)) } c.Circle(base, Polar{100, 0}, Polar{100, 3600}) } @@ -15,8 +13,8 @@ func (c Cutter) DrawAtom() { func (c Cutter) DrawLines() { for i := 0; i < 9; i++ { c.LineType(LineStyle(i)) - c.Move(Point{100 * float64(i), 0}) - c.Draw(Point{100 * float64(i), 1000}) + c.Move(Point{100 * Unit(i), 0}) + c.Draw(Point{100 * Unit(i), 1000}) } } @@ -24,8 +22,8 @@ func (c Cutter) DrawCircles() { base := Point{1000, 1000} for i := 1; i <= 3; i++ { c.Circle(base, - Polar{100 * float64(i), 0}, - Polar{100 * float64(i), 3600}) + Polar{100 * Unit(i), 0}, + Polar{100 * Unit(i), 3600}) } } diff --git a/pic.go b/pic.go index 5a80605..da8129d 100644 --- a/pic.go +++ b/pic.go @@ -10,17 +10,13 @@ import ( type Page []Path -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(po.X * IN) - po.Y = truncate(po.Y * IN) + po.X = po.X * IN + po.Y = po.Y * IN pa = append(pa, po) } } diff --git a/units.go b/units.go index 4ee5e2a..c3da609 100644 --- a/units.go +++ b/units.go @@ -1,9 +1,55 @@ package main +import "fmt" + const ( - MM = 20.0 + MM = Unit(20.0) CM = 10 * MM DM = 10 * CM IN = 25.4 * MM PT = IN / 72 ) + +type Unit float64 + +func (u Unit) String() string { + return fmt.Sprintf("%.2f", u) +} + +type Point struct { + X, Y Unit +} + +func (p Point) String() string { + return fmt.Sprintf("%v,%v", p.X, p.Y) +} + +type Triple struct { + U, V, W Unit +} + +func (t Triple) String() string { + return fmt.Sprintf("%v,%v,%v", t.U, t.V, t.W) +} + +type Polar struct { + R, Theta Unit +} + +type Path []Point + +func (p Point) Add(u Point) Point { + return Point{p.X + u.X, p.Y + u.Y} +} + +func (p Point) Sub(u Point) Point { + return Point{p.X - u.X, p.Y - u.Y} +} + +func (p Point) AddX(u Unit) Point { + return Point{p.X + u, p.Y} +} + +func (p Point) AddY(u Unit) Point { + return Point{p.X, p.Y + u} +} -- cgit v1.2.3