aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-05-06 23:35:58 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-05-06 23:35:58 +0200
commit69668aa61de642ea275e6e2ace85f7b921480603 (patch)
tree94636741247c3c5142124de1b842de2eb3083ecd
parent67add8501fdc57029b5bf7d0ceff1bfb9acf49c2 (diff)
Separate Units
-rw-r--r--cutter.go44
-rw-r--r--misc.go12
-rw-r--r--pic.go8
-rw-r--r--units.go48
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}
+}