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() } }