Example #1
0
func Plot(g1, g2 gear.Gear, rotfrac int, fname string) {
	var width, height int

	border := 5.0

	if g1.Pd > g2.Pd {
		height = int(g1.GetOutsideDia() + (2 * border))
	} else {
		height = int(g2.GetOutsideDia() + (2 * border))
	}
	width = int((g1.Pd + g2.Pd + g1.GetAddendum() + g2.GetAddendum()) + (2 * border))

	centerDist := (g1.Pd + g2.Pd) / 2
	cx := int((border + (g1.GetOutsideDia() / 2.0)) * factor)
	cy := height * factor / 2
	var canvas *svg.SVG
	var f *os.File
	var err error
	if fname != "" {
		f, err = os.Create(fmt.Sprintf("%s.svg", fname))
		if err != nil {
			fmt.Println("Something failed creating file!")
		}
		canvas = svg.New(f)
	} else {
		canvas = svg.New(os.Stdout)
	}

	// Setup canvas so that each drawing unit is 0.01mm.
	canvas.StartviewUnit(width, height, "mm", 0, 0, width*factor, height*factor)
	plotGrid(cx, cy, width*factor, height*factor, canvas)
	rot := 0.0 + ((float64(rotfrac) / 100) * (360 / float64(g1.N)))
	plotGear(cx, cy, rot, g1, canvas)
	cx = cx + int(centerDist*factor)
	if math.Mod(float64(g2.N), 2) == 0 {
		rot = 180.0 / float64(g2.N)
	} else {
		rot = 0.0
	}
	rot -= (float64(rotfrac) / 100) * (360 / float64(g2.N))
	plotGear(cx, cy, rot, g2, canvas)

	// canvas.Text(width *100 /2, height * 100 /2, "Hello, SVG", "text-anchor:middle;font-size:300;fill:black")
	canvas.End()
	if f != nil {
		f.Sync()
		f.Close()
	}
}