cirkuix.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from gi.repository import Gtk
  2. import matplotlib.pyplot as plt
  3. plt.ioff()
  4. from matplotlib.figure import Figure
  5. from numpy import arange, sin, pi
  6. from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas
  7. #from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as NavigationToolbar
  8. #from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as FigureCanvas
  9. #from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas
  10. #import cairo
  11. from camlib import *
  12. class App:
  13. def __init__(self):
  14. self.gladefile = "cirkuix.ui"
  15. self.builder = Gtk.Builder()
  16. self.builder.add_from_file(self.gladefile)
  17. self.window = self.builder.get_object("window1")
  18. #self.drawingarea = self.builder.get_object("drawingarea1")
  19. #self.drawingarea.connect("draw", self.cairopaint)
  20. self.grid = self.builder.get_object("grid1")
  21. self.builder.connect_signals(self)
  22. self.mplpaint()
  23. self.window.show_all()
  24. self.gerbers = []
  25. Gtk.main()
  26. def mplpaint(self):
  27. f = Figure(figsize=(5,4), dpi=50)
  28. a = f.add_subplot(111)
  29. t = arange(0.0,3.0,0.01)
  30. s = sin(2*pi*t)
  31. a.plot(t,s)
  32. canvas = FigureCanvas(f) # a Gtk.DrawingArea
  33. canvas.set_size_request(600,400)
  34. self.grid.attach(canvas,1,1,600,400)
  35. def cairopaint(self, da, cr):
  36. width = 200
  37. height = 200
  38. #cr = widget.window.cairo_create() # Context
  39. cr.set_source_rgb(0.5, 0.5, 0.5)
  40. cr.rectangle(0, 0, width, height)
  41. cr.fill()
  42. # draw a rectangle
  43. cr.set_source_rgb(1.0, 1.0, 1.0)
  44. cr.rectangle(10, 10, width - 20, height - 20)
  45. cr.fill()
  46. # draw lines
  47. cr.set_source_rgb(0.0, 0.0, 0.8)
  48. cr.move_to(width / 3.0, height / 3.0)
  49. cr.rel_line_to(0, height / 6.0)
  50. cr.move_to(2 * width / 3.0, height / 3.0)
  51. cr.rel_line_to(0, height / 6.0)
  52. cr.stroke()
  53. # and a circle
  54. cr.set_source_rgb(1.0, 0.0, 0.0)
  55. radius = min(width, height)
  56. cr.arc(width / 2.0, height / 2.0, radius / 2.0 - 20, 0, 2 * pi)
  57. cr.stroke()
  58. cr.arc(width / 2.0, height / 2.0, radius / 3.0 - 10, pi / 3, 2 * pi / 3)
  59. cr.stroke()
  60. def on_filequit(self, param):
  61. print "quit from menu"
  62. self.window.destroy()
  63. Gtk.main_quit()
  64. def on_closewindow(self, param):
  65. print "quit from X"
  66. self.window.destroy()
  67. Gtk.main_quit()
  68. def on_fileopengeometry(self, param):
  69. print "File->Open Geometry"
  70. dialog = Gtk.FileChooserDialog("Please choose a file", self.window,
  71. Gtk.FileChooserAction.OPEN,
  72. (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
  73. Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
  74. response = dialog.run()
  75. if response == Gtk.ResponseType.OK:
  76. print("Open clicked")
  77. print("File selected: " + dialog.get_filename())
  78. gerber = Gerber()
  79. gerber.parse_file(dialog.get_filename())
  80. gerber.create_geometry()
  81. self.gerbers.append(gerber)
  82. self.plot_gerber(gerber)
  83. elif response == Gtk.ResponseType.CANCEL:
  84. print("Cancel clicked")
  85. dialog.destroy()
  86. def plot_gerber(self, gerber):
  87. f = Figure(figsize=(5,4), dpi=200)
  88. a = f.add_subplot(111)
  89. for poly in gerber.solid_geometry:
  90. x, y = poly.exterior.xy
  91. a.plot(x, y)
  92. for ints in poly.interiors:
  93. x, y = ints.coords.xy
  94. a.plot(x, y)
  95. canvas = FigureCanvas(f) # a Gtk.DrawingArea
  96. canvas.set_size_request(600,400)
  97. self.grid.attach(canvas,1,1,600,400)
  98. self.window.show_all()
  99. app = App()