Initial commit, viewing Gerbers works.
This commit is contained in:
119
cirkuix.py
Normal file
119
cirkuix.py
Normal file
@@ -0,0 +1,119 @@
|
||||
from gi.repository import Gtk
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
plt.ioff()
|
||||
|
||||
from matplotlib.figure import Figure
|
||||
from numpy import arange, sin, pi
|
||||
from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas
|
||||
#from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as NavigationToolbar
|
||||
#from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as FigureCanvas
|
||||
#from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas
|
||||
#import cairo
|
||||
|
||||
from camlib import *
|
||||
|
||||
class App:
|
||||
def __init__(self):
|
||||
self.gladefile = "cirkuix.ui"
|
||||
self.builder = Gtk.Builder()
|
||||
self.builder.add_from_file(self.gladefile)
|
||||
self.window = self.builder.get_object("window1")
|
||||
|
||||
#self.drawingarea = self.builder.get_object("drawingarea1")
|
||||
#self.drawingarea.connect("draw", self.cairopaint)
|
||||
|
||||
self.grid = self.builder.get_object("grid1")
|
||||
self.builder.connect_signals(self)
|
||||
self.mplpaint()
|
||||
self.window.show_all()
|
||||
|
||||
self.gerbers = []
|
||||
|
||||
Gtk.main()
|
||||
|
||||
def mplpaint(self):
|
||||
f = Figure(figsize=(5,4), dpi=50)
|
||||
a = f.add_subplot(111)
|
||||
t = arange(0.0,3.0,0.01)
|
||||
s = sin(2*pi*t)
|
||||
a.plot(t,s)
|
||||
|
||||
canvas = FigureCanvas(f) # a Gtk.DrawingArea
|
||||
canvas.set_size_request(600,400)
|
||||
self.grid.attach(canvas,1,1,600,400)
|
||||
|
||||
def cairopaint(self, da, cr):
|
||||
width = 200
|
||||
height = 200
|
||||
#cr = widget.window.cairo_create() # Context
|
||||
cr.set_source_rgb(0.5, 0.5, 0.5)
|
||||
cr.rectangle(0, 0, width, height)
|
||||
cr.fill()
|
||||
|
||||
# draw a rectangle
|
||||
cr.set_source_rgb(1.0, 1.0, 1.0)
|
||||
cr.rectangle(10, 10, width - 20, height - 20)
|
||||
cr.fill()
|
||||
|
||||
# draw lines
|
||||
cr.set_source_rgb(0.0, 0.0, 0.8)
|
||||
cr.move_to(width / 3.0, height / 3.0)
|
||||
cr.rel_line_to(0, height / 6.0)
|
||||
cr.move_to(2 * width / 3.0, height / 3.0)
|
||||
cr.rel_line_to(0, height / 6.0)
|
||||
cr.stroke()
|
||||
|
||||
# and a circle
|
||||
cr.set_source_rgb(1.0, 0.0, 0.0)
|
||||
radius = min(width, height)
|
||||
cr.arc(width / 2.0, height / 2.0, radius / 2.0 - 20, 0, 2 * pi)
|
||||
cr.stroke()
|
||||
cr.arc(width / 2.0, height / 2.0, radius / 3.0 - 10, pi / 3, 2 * pi / 3)
|
||||
cr.stroke()
|
||||
|
||||
def on_filequit(self, param):
|
||||
print "quit from menu"
|
||||
self.window.destroy()
|
||||
Gtk.main_quit()
|
||||
|
||||
def on_closewindow(self, param):
|
||||
print "quit from X"
|
||||
self.window.destroy()
|
||||
Gtk.main_quit()
|
||||
|
||||
def on_fileopengeometry(self, param):
|
||||
print "File->Open Geometry"
|
||||
dialog = Gtk.FileChooserDialog("Please choose a file", self.window,
|
||||
Gtk.FileChooserAction.OPEN,
|
||||
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
||||
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
|
||||
response = dialog.run()
|
||||
if response == Gtk.ResponseType.OK:
|
||||
print("Open clicked")
|
||||
print("File selected: " + dialog.get_filename())
|
||||
gerber = Gerber()
|
||||
gerber.parse_file(dialog.get_filename())
|
||||
gerber.create_geometry()
|
||||
self.gerbers.append(gerber)
|
||||
self.plot_gerber(gerber)
|
||||
elif response == Gtk.ResponseType.CANCEL:
|
||||
print("Cancel clicked")
|
||||
dialog.destroy()
|
||||
|
||||
def plot_gerber(self, gerber):
|
||||
f = Figure(figsize=(5,4), dpi=200)
|
||||
a = f.add_subplot(111)
|
||||
for poly in gerber.solid_geometry:
|
||||
x, y = poly.exterior.xy
|
||||
a.plot(x, y)
|
||||
for ints in poly.interiors:
|
||||
x, y = ints.coords.xy
|
||||
a.plot(x, y)
|
||||
canvas = FigureCanvas(f) # a Gtk.DrawingArea
|
||||
canvas.set_size_request(600,400)
|
||||
self.grid.attach(canvas,1,1,600,400)
|
||||
self.window.show_all()
|
||||
|
||||
|
||||
app = App()
|
||||
Reference in New Issue
Block a user