From 6c13b7dc59997884ebe09cffe6ba4881d20ad64a Mon Sep 17 00:00:00 2001 From: Juan Pablo Caram Date: Sat, 5 Apr 2014 00:36:23 -0400 Subject: [PATCH] Warning before overwriting. More flexible Excellon parser (tool numbers). Other small fixes. --- FlatCAM.py | 494 +++++++++++-------------- FlatCAM.ui | 92 +++++ FlatCAMObj.py | 3 + camlib.py | 9 +- defaults.json | 2 +- doc/build/.doctrees/camlib.doctree | Bin 184511 -> 192117 bytes doc/build/.doctrees/environment.pickle | Bin 30384 -> 32871 bytes doc/build/camlib.html | 87 ++++- doc/build/genindex.html | 119 ++++-- doc/build/index.html | 6 + doc/build/objects.inv | Bin 1585 -> 1694 bytes doc/build/py-modindex.html | 3 + doc/build/search.html | 3 + doc/build/searchindex.js | 2 +- doc/source/app.rst | 12 + recent.json | 2 +- 16 files changed, 519 insertions(+), 315 deletions(-) diff --git a/FlatCAM.py b/FlatCAM.py index e1cb0169..d833a498 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -36,6 +36,7 @@ from camlib import * from FlatCAMObj import * from FlatCAMWorker import Worker + ######################################## ## App ## ######################################## @@ -149,13 +150,9 @@ class App: # self.radios_inv.update({obj.kind + "_" + option: obj.radios_inv[option]}) ## Event subscriptions ## - # TODO: Move to plotcanvas - self.plot_click_subscribers = {} - self.plot_mousemove_subscribers = {} ## Tools ## - self.measure = Measurement(self.builder.get_object("box39"), self.plotcanvas.axes, - self.plot_click_subscribers, self.plot_mousemove_subscribers) + self.measure = Measurement(self.builder.get_object("box39"), self.plotcanvas) # Toolbar icon # TODO: Where should I put this? Tool should have a method to add to toolbar? meas_ico = Gtk.Image.new_from_file('share/measure32.png') @@ -188,10 +185,13 @@ class App: def somethreadfunc(app_obj): print "Hello World!" + self.message_dialog("Starting", "The best program is starting") + t = threading.Thread(target=somethreadfunc, args=(self,)) t.daemon = True t.start() + ######################################## ## START ## ######################################## @@ -203,6 +203,30 @@ class App: self.window.set_default_size(900, 600) self.window.show_all() + def message_dialog(self, title, message, type="info"): + types = {"info": Gtk.MessageType.INFO, + "warn": Gtk.MessageType.WARNING, + "error": Gtk.MessageType.ERROR} + dlg = Gtk.MessageDialog(self.window, 0, types[type], Gtk.ButtonsType.OK, title) + dlg.format_secondary_text(message) + dlg.run() + dlg.destroy() + + def question_dialog(self, title, message): + label = Gtk.Label(message) + dialog = Gtk.Dialog(title, self.window, 0, + (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + Gtk.STOCK_OK, Gtk.ResponseType.OK)) + dialog.set_default_size(150, 100) + dialog.set_modal(True) + box = dialog.get_content_area() + box.set_border_width(10) + box.add(label) + dialog.show_all() + response = dialog.run() + dialog.destroy() + return response + def setup_toolbar(self): # Zoom fit @@ -255,48 +279,6 @@ class App: """ FlatCAMObj.app = self - # def setup_project_list(self): - # """ - # Sets up list or Tree where whatever has been loaded or created is - # displayed. - # - # :return: None - # """ - # - # # Model - # self.store = Gtk.ListStore(GdkPixbuf.Pixbuf, str) - # #self.store = Gtk.ListStore(str, str) - # - # # View - # self.tree = Gtk.TreeView(model=self.store) - # - # # Renderers - # renderer_pixbuf = Gtk.CellRendererPixbuf() - # column_pixbuf = Gtk.TreeViewColumn("Type", renderer_pixbuf, pixbuf=0) - # # column_pixbuf = Gtk.TreeViewColumn("Type") - # # column_pixbuf.pack_start(renderer_pixbuf, False) - # # column_pixbuf.add_attribute(renderer_pixbuf, "pixbuf", 1) - # self.tree.append_column(column_pixbuf) - # - # # renderer1 = Gtk.CellRendererText() - # # column1 = Gtk.TreeViewColumn("Type", renderer1, text=0) - # # self.tree.append_column(column1) - # - # renderer = Gtk.CellRendererText() - # column = Gtk.TreeViewColumn("Object name", renderer, text=1) - # self.tree.append_column(column) - # - # self.tree_select = self.tree.get_selection() - # - # - # self.builder.get_object("box_project").pack_start(self.tree, False, False, 1) - # - # # Double-click or Enter takes you to the object's options - # self.tree.connect("row_activated", self.on_row_activated) - # - # # Changes the selected item and populates the object options form - # self.signal_id = self.tree_select.connect("changed", self.on_tree_selection_changed) - def setup_component_editor(self): """ Initial configuration of the component editor. Creates @@ -335,7 +317,7 @@ class App: 'gerber': self.open_gerber, 'excellon': self.open_excellon, 'cncjob': self.open_gcode, - 'project': lambda x: "" + 'project': self.open_project } # Closure needed to create callbacks in a loop. @@ -378,39 +360,13 @@ class App: def info(self, text): """ - Show text on the status bar. + Show text on the status bar. This method is thread safe. :param text: Text to display. :type text: str :return: None """ - self.info_label.set_text(text) - - # def build_list(self): - # """ - # Clears and re-populates the list of objects in currently - # in the project. - # - # :return: None - # """ - # icons = { - # "gerber": "share/flatcam_icon16.png", - # "excellon": "share/drill16.png", - # "cncjob": "share/cnc16.png", - # "geometry": "share/geometry16.png" - # } - # - # - # print "build_list(): clearing" - # self.tree_select.unselect_all() - # self.store.clear() - # print "repopulating...", - # for key in self.stuff: - # print key, - # obj = self.stuff[key] - # icon = GdkPixbuf.Pixbuf.new_from_file(icons[obj.kind]) - # self.store.append([icon, key]) - # print + GLib.idle_add(lambda: self.info_label.set_text(text)) def get_radio_value(self, radio_set): """ @@ -474,31 +430,11 @@ class App: self.info("Could not evaluate: " + value) return None - # def set_list_selection(self, name): - # """ - # Marks a given object as selected in the list ob objects - # in the GUI. This selection will in turn trigger - # ``self.on_tree_selection_changed()``. - # - # :param name: Name of the object. - # :type name: str - # :return: None - # """ - # - # iter = self.store.get_iter_first() - # while iter is not None and self.store[iter][1] != name: - # iter = self.store.iter_next(iter) - # self.tree_select.unselect_all() - # self.tree_select.select_iter(iter) - # - # # Need to return False such that GLib.idle_add - # # or .timeout_add do not repeat. - # return False - def new_object(self, kind, name, initialize): """ Creates a new specalized FlatCAMObj and attaches it to the application, this is, updates the GUI accordingly, any other records and plots it. + This method is thread-safe. :param kind: The kind of object to create. One of 'gerber', 'excellon', 'cncjob' and 'geometry'. @@ -513,6 +449,8 @@ class App: :rtype: None """ + print "new_object()" + ### Check for existing name if name in self.collection.get_names(): ## Create a new name @@ -553,18 +491,17 @@ class App: obj.convert_units(self.options["units"]) # Add to our records - # TODO: Perhaps make collection thread safe instead? - GLib.idle_add(lambda: self.collection.append(obj, active=True)) + self.collection.append(obj, active=True) # Show object details now. - GLib.timeout_add(100, lambda: self.notebook.set_current_page(1)) + GLib.idle_add(lambda: self.notebook.set_current_page(1)) # Plot # TODO: (Thread-safe?) obj.plot() - # TODO: Threading dissaster! GLib.idle_add(lambda: self.on_zoom_fit(None)) + #self.on_zoom_fit(None) return obj @@ -582,23 +519,6 @@ class App: self.progress_bar.set_fraction(percentage) return False - # def get_current(self): - # """ - # Returns the currently selected FlatCAMObj in the application. - # - # :return: Currently selected FlatCAMObj in the application. - # :rtype: FlatCAMObj or None - # """ - # - # # TODO: Could possibly read the form into the object here. - # # But there are some cases when the form for the object - # # is not up yet. See on_tree_selection_changed. - # - # try: - # return self.stuff[self.selected_item_name] - # except: - # return None - def load_defaults(self): """ Loads the aplication's default settings from defaults.json into @@ -738,6 +658,7 @@ class App: except: pass + # Serialize the whole project d = {"objs": [obj.to_dict() for obj in self.collection.get_list()], "options": self.options} @@ -786,7 +707,7 @@ class App: # Project options self.options.update(d['options']) self.project_filename = filename - self.units_label.set_text(self.options["units"]) + GLib.idle_add(lambda: self.units_label.set_text(self.options["units"])) # Re create objects for obj in d['objs']: @@ -961,6 +882,9 @@ class App: ######################################## ## EVENT HANDLERS ## ######################################## + def on_debug_printlist(self, *args): + self.collection.print_list() + def on_disable_all_plots(self, widget): self.disable_plots() @@ -997,8 +921,6 @@ class App: :return: None """ - # self.get_current().read_form() - # self.get_current().plot() self.collection.get_active().read_form() self.collection.get_active().plot() @@ -1012,7 +934,6 @@ class App: about = self.builder.get_object("aboutdialog") response = about.run() - #about.destroy() about.hide() def on_create_mirror(self, widget): @@ -1299,6 +1220,18 @@ class App: def on_success(app_obj, filename): assert isinstance(app_obj, App) + + try: + f = open(filename, 'r') + f.close() + exists = True + except IOError: + exists = False + + msg = "File exists. Overwrite?" + if exists and self.question_dialog("File exists", msg) == Gtk.ResponseType.CANCEL: + return + app_obj.save_project(filename) self.project_filename = filename self.register_recent("project", filename) @@ -1319,6 +1252,18 @@ class App: def on_success(app_obj, filename): assert isinstance(app_obj, App) + + try: + f = open(filename, 'r') + f.close() + exists = True + except IOError: + exists = False + + msg = "File exists. Overwrite?" + if exists and self.question_dialog("File exists", msg) == Gtk.ResponseType.CANCEL: + return + app_obj.save_project(filename) self.register_recent("project", filename) app_obj.info("Project copy saved to: " + filename) @@ -1578,9 +1523,7 @@ class App: obj.plot() GLib.timeout_add(300, lambda: app_obj.set_progress_bar(0.0, "Idle")) - # t = threading.Thread(target=thread_func, args=(self,)) - # t.daemon = True - # t.start() + # Send to worker self.worker.add_task(thread_func, [self]) def on_generate_excellon_cncjob(self, widget): @@ -1625,10 +1568,7 @@ class App: GLib.idle_add(lambda: app_obj.set_progress_bar(1.0, "Done!")) GLib.timeout_add_seconds(1, lambda: app_obj.set_progress_bar(0.0, "")) - # Start the thread - # t = threading.Thread(target=job_thread, args=(self,)) - # t.daemon = True - # t.start() + # Send to worker self.worker.add_task(job_thread, [self]) def on_excellon_tool_choose(self, widget): @@ -1818,10 +1758,7 @@ class App: GLib.idle_add(lambda: app_obj.set_progress_bar(1.0, "Done!")) GLib.timeout_add_seconds(1, lambda: app_obj.set_progress_bar(0.0, "")) - # Start the thread - # t = threading.Thread(target=job_thread, args=(self,)) - # t.daemon = True - # t.start() + # Send to worker self.worker.add_task(job_thread, [self]) def on_generate_paintarea(self, widget): @@ -1843,10 +1780,14 @@ class App: tooldia = geo.options["painttooldia"] overlap = geo.options["paintoverlap"] + # Connection ID for the click event + subscription = None + # To be called after clicking on the plot. def doit(event): - self.plot_click_subscribers.pop("generate_paintarea") - self.info("") + #self.plot_click_subscribers.pop("generate_paintarea") + self.plotcanvas.mpl_disconnect(subscription) + self.info("Painting") point = [event.xdata, event.ydata] poly = find_polygon(geo.solid_geometry, point) @@ -1858,10 +1799,12 @@ class App: geo_obj.solid_geometry = cp geo_obj.options["cnctooldia"] = tooldia - name = self.selected_item_name + "_paint" + #name = self.selected_item_name + "_paint" + name = geo.options["name"] + "_paint" self.new_object("geometry", name, gen_paintarea) - self.plot_click_subscribers["generate_paintarea"] = doit + #self.plot_click_subscribers["generate_paintarea"] = doit + subscription = self.plotcanvas.mpl_connect('button_press_event', doit) def on_cncjob_exportgcode(self, widget): """ @@ -1940,23 +1883,25 @@ class App: def on_file_new(self, param): """ Callback for menu item File->New. Returns the application to its - startup state. + startup state. This method is thread-safe. :param param: Whatever is passed by the event. Ignore. :return: None """ # Remove everything from memory - # Clear plot - self.plotcanvas.clear() - # Delete data - self.collection.delete_all() + # GUI things + def task(): + # Clear plot + self.plotcanvas.clear() - # Clear object editor - self.setup_component_editor() + # Delete data + self.collection.delete_all() - # Clear list - #self.collection.build_list() + # Clear object editor + self.setup_component_editor() + + GLib.idle_add(task) # Clear project filename self.project_filename = None @@ -2006,13 +1951,10 @@ class App: if response == Gtk.ResponseType.OK: filename = dialog.get_filename() dialog.destroy() - # t = threading.Thread(target=on_success, args=(self, filename)) - # t.daemon = True - # t.start() + # Send to worker. self.worker.add_task(on_success, [self, filename]) - #on_success(self, filename) elif response == Gtk.ResponseType.CANCEL: - self.info("Open cancelled.") # print("Cancel clicked") + self.info("Open cancelled.") dialog.destroy() def file_chooser_save_action(self, on_success): @@ -2043,8 +1985,12 @@ class App: def obj_init(gerber_obj, app_obj): assert isinstance(gerber_obj, FlatCAMGerber) + + # Opening the file happens here GLib.idle_add(lambda: app_obj.set_progress_bar(0.2, "Parsing ...")) gerber_obj.parse_file(filename) + + # Further parsing GLib.idle_add(lambda: app_obj.set_progress_bar(0.5, "Creating Geometry ...")) gerber_obj.create_geometry() GLib.idle_add(lambda: app_obj.set_progress_bar(0.6, "Plotting ...")) @@ -2053,8 +1999,9 @@ class App: self.new_object("gerber", name, obj_init) self.register_recent("gerber", filename) + self.info("Opened: " + filename) GLib.idle_add(lambda: self.set_progress_bar(1.0, "Done!")) - GLib.timeout_add_seconds(1, lambda: self.set_progress_bar(0.0, "")) + GLib.timeout_add_seconds(1, lambda: self.set_progress_bar(0.0, "Idle")) def on_fileopengerber(self, param): """ @@ -2065,30 +2012,7 @@ class App: :param param: Ignore :return: None """ - # IMPORTANT: on_success will run on a separate thread. Use - # GLib.idle_add(function, **kwargs) to launch actions that will - # updata the GUI. - # def on_success(app_obj, filename): - # assert isinstance(app_obj, App) - # GLib.idle_add(lambda: app_obj.set_progress_bar(0.1, "Opening Gerber ...")) - # - # def obj_init(gerber_obj, app_obj): - # assert isinstance(gerber_obj, FlatCAMGerber) - # GLib.idle_add(lambda: app_obj.set_progress_bar(0.2, "Parsing ...")) - # gerber_obj.parse_file(filename) - # GLib.idle_add(lambda: app_obj.set_progress_bar(0.5, "Creating Geometry ...")) - # gerber_obj.create_geometry() - # GLib.idle_add(lambda: app_obj.set_progress_bar(0.6, "Plotting ...")) - # - # name = filename.split('/')[-1].split('\\')[-1] - # app_obj.new_object("gerber", name, obj_init) - # app_obj.register_recent("gerber", filename) - # - # GLib.idle_add(lambda: app_obj.set_progress_bar(1.0, "Done!")) - # GLib.timeout_add_seconds(1, lambda: app_obj.set_progress_bar(0.0, "")) - # on_success gets run on a separate thread - # self.file_chooser_action(on_success) self.file_chooser_action(lambda ao, filename: self.open_gerber(filename)) def open_excellon(self, filename): @@ -2104,6 +2028,7 @@ class App: self.new_object("excellon", name, obj_init) self.register_recent("excellon", filename) + self.info("Opened: " + filename) GLib.idle_add(lambda: self.set_progress_bar(1.0, "Done!")) GLib.timeout_add_seconds(1, lambda: self.set_progress_bar(0.0, "")) @@ -2116,28 +2041,7 @@ class App: :param param: Ignore :return: None """ - # IMPORTANT: on_success will run on a separate thread. Use - # GLib.idle_add(function, **kwargs) to launch actions that will - # updata the GUI. - # def on_success(app_obj, filename): - # assert isinstance(app_obj, App) - # GLib.idle_add(lambda: app_obj.set_progress_bar(0.1, "Opening Excellon ...")) - # - # def obj_init(excellon_obj, app_obj): - # GLib.idle_add(lambda: app_obj.set_progress_bar(0.2, "Parsing ...")) - # excellon_obj.parse_file(filename) - # excellon_obj.create_geometry() - # GLib.idle_add(lambda: app_obj.set_progress_bar(0.6, "Plotting ...")) - # - # name = filename.split('/')[-1].split('\\')[-1] - # app_obj.new_object("excellon", name, obj_init) - # self.register_recent("excellon", filename) - # - # GLib.idle_add(lambda: app_obj.set_progress_bar(1.0, "Done!")) - # GLib.timeout_add_seconds(1, lambda: app_obj.set_progress_bar(0.0, "")) - # on_success gets run on a separate thread - # self.file_chooser_action(on_success) self.file_chooser_action(lambda ao, filename: self.open_excellon(filename)) def open_gcode(self, filename): @@ -2168,6 +2072,7 @@ class App: self.new_object("cncjob", name, obj_init) self.register_recent("cncjob", filename) + self.info("Opened: " + filename) GLib.idle_add(lambda: self.set_progress_bar(1.0, "Done!")) GLib.timeout_add_seconds(1, lambda: self.set_progress_bar(0.0, "")) @@ -2180,43 +2085,7 @@ class App: :param param: Ignore :return: None """ - # IMPORTANT: on_success will run on a separate thread. Use - # GLib.idle_add(function, **kwargs) to launch actions that will - # updata the GUI. - # def on_success(app_obj, filename): - # assert isinstance(app_obj, App) - # - # def obj_init(job_obj, app_obj_): - # """ - # - # :type app_obj_: App - # """ - # assert isinstance(app_obj_, App) - # GLib.idle_add(lambda: app_obj_.set_progress_bar(0.1, "Opening G-Code ...")) - # - # f = open(filename) - # gcode = f.read() - # f.close() - # - # job_obj.gcode = gcode - # - # GLib.idle_add(lambda: app_obj_.set_progress_bar(0.2, "Parsing ...")) - # job_obj.gcode_parse() - # - # GLib.idle_add(lambda: app_obj_.set_progress_bar(0.6, "Creating geometry ...")) - # job_obj.create_geometry() - # - # GLib.idle_add(lambda: app_obj_.set_progress_bar(0.6, "Plotting ...")) - # - # name = filename.split('/')[-1].split('\\')[-1] - # app_obj.new_object("cncjob", name, obj_init) - # self.register_recent("cncjob", filename) - # - # GLib.idle_add(lambda: app_obj.set_progress_bar(1.0, "Done!")) - # GLib.timeout_add_seconds(1, lambda: app_obj.set_progress_bar(0.0, "")) - # on_success gets run on a separate thread - # self.file_chooser_action(on_success) self.file_chooser_action(lambda ao, filename: self.open_gcode(filename)) def on_mouse_move_over_plot(self, event): @@ -2234,8 +2103,8 @@ class App: event.xdata, event.ydata)) self.mouse = [event.xdata, event.ydata] - for subscriber in self.plot_mousemove_subscribers: - self.plot_mousemove_subscribers[subscriber](event) + # for subscriber in self.plot_mousemove_subscribers: + # self.plot_mousemove_subscribers[subscriber](event) except: self.position_label.set_label("") @@ -2256,7 +2125,7 @@ class App: :return: None """ - # For key presses + # So it can receive key presses self.plotcanvas.canvas.grab_focus() try: @@ -2264,8 +2133,8 @@ class App: event.button, event.x, event.y, event.xdata, event.ydata) # TODO: This custom subscription mechanism is probably not necessary. - for subscriber in self.plot_click_subscribers: - self.plot_click_subscribers[subscriber](event) + # for subscriber in self.plot_click_subscribers: + # self.plot_click_subscribers[subscriber](event) self.clipboard.set_text("(%.4f, %.4f)" % (event.xdata, event.ydata), -1) @@ -2403,31 +2272,32 @@ class DrawingPoint(DrawingObject): class Measurement: - def __init__(self, container, axes, click_subscibers, move_subscribers, update=None): + def __init__(self, container, plotcanvas, update=None): self.update = update self.container = container self.frame = None self.label = None - self.click_subscribers = click_subscibers - self.move_subscribers = move_subscribers self.point1 = None self.point2 = None self.active = False + self.plotcanvas = plotcanvas + self.click_subscription = None + self.move_subscription = None def toggle_active(self, *args): if self.active: # Deactivate self.active = False - self.move_subscribers.pop("meas") - self.click_subscribers.pop("meas") self.container.remove(self.frame) if self.update is not None: self.update() + self.plotcanvas.mpl_disconnect(self.click_subscription) + self.plotcanvas.mpl_disconnect(self.move_subscription) return False else: # Activate print "DEBUG: Activating Measurement Tool..." self.active = True - self.click_subscribers["meas"] = self.on_click - self.move_subscribers["meas"] = self.on_move + self.click_subscription = self.plotcanvas.mpl_connect("button_press_event", self.on_click) + self.move_subscription = self.plotcanvas.mpl_connect('motion_notify_event', self.on_move) self.frame = Gtk.Frame() self.frame.set_margin_right(5) self.frame.set_margin_top(3) @@ -2449,10 +2319,13 @@ class Measurement: if self.point1 is None: self.label.set_label("Click on a reference point...") else: - dx = event.xdata - self.point1[0] - dy = event.ydata - self.point1[1] - d = sqrt(dx**2 + dy**2) - self.label.set_label("D = %.4f D(x) = %.4f D(y) = %.4f" % (d, dx, dy)) + try: + dx = event.xdata - self.point1[0] + dy = event.ydata - self.point1[1] + d = sqrt(dx**2 + dy**2) + self.label.set_label("D = %.4f D(x) = %.4f D(y) = %.4f" % (d, dx, dy)) + except TypeError: + pass if self.update is not None: self.update() @@ -2540,9 +2413,18 @@ class PlotCanvas: :type event_name: str :param callback: Function to call :type callback: func - :return: Nothing + :return: Connection id + :rtype: int """ - self.canvas.mpl_connect(event_name, callback) + return self.canvas.mpl_connect(event_name, callback) + + def mpl_disconnect(self, cid): + """ + Disconnect callback with the give id. + :param cid: Callback id. + :return: None + """ + self.canvas.mpl_disconnect(cid) def connect(self, event_name, callback): """ @@ -2592,6 +2474,8 @@ class PlotCanvas: :return: None """ + print "PC.adjust_axes()" + width = xmax - xmin height = ymax - ymin try: @@ -2707,21 +2591,6 @@ class PlotCanvas: return self.figure.add_axes([0.05, 0.05, 0.9, 0.9], label=name) - # def plot_axes(self, axes): - # - # if axes not in self.figure.axes: - # self.figure.add_axes(axes) - # - # # Basic configuration - # axes.set_frame_on(False) # No frame - # axes.set_xticks([]) # No tick - # axes.set_yticks([]) # No ticks - # axes.patch.set_visible(False) # No background - # axes.set_aspect(1) - # - # # Adjust limits - # self.auto_adjust_axes() - def on_scroll(self, canvas, event): """ Scroll event handler. @@ -2730,6 +2599,11 @@ class PlotCanvas: :param event: Event object containing the event information. :return: None """ + + # So it can receive key presses + self.canvas.grab_focus() + + # Event info z, direction = event.get_scroll_direction() if self.key is None: @@ -2758,7 +2632,7 @@ class PlotCanvas: def on_mouse_move(self, event): """ - Mouse movement event hadler. + Mouse movement event hadler. Stores the coordinates. :param event: Contains information about the event. :return: None @@ -2822,6 +2696,13 @@ class ObjectCollection: column_text.set_cell_data_func(renderer_text, _set_cell_text) self.view.append_column(column_text) + def print_list(self): + iterat = self.store.get_iter_first() + while iterat is not None: + obj = self.store[iterat][0] + print obj + iterat = self.store.iter_next(iterat) + def delete_all(self): print "OC.delete_all()" # self.collection = [] @@ -2837,10 +2718,22 @@ class ObjectCollection: pass def on_row_activated(self, *args): + """ + Does nothing right now. + :param args: Ignored. + :return: None + """ print "OC.on_row_activated()" return def on_list_selection_change(self, selection): + """ + Callback for change in selection on the objects' list. + Instructs the new selection to build the UI for its options. + + :param selection: Ignored. + :return: None + """ print "OC.on_list_selection_change()" try: self.get_active().build_ui() @@ -2851,6 +2744,14 @@ class ObjectCollection: # TODO: active, so cannot read form. def set_active(self, name): + """ + Sets an object as the active object in the program. Same + as `set_list_selection()`. + + :param name: Name of the object. + :type name: str + :return: None + """ print "OC.set_active()" self.set_list_selection(name) @@ -2863,6 +2764,13 @@ class ObjectCollection: return None def set_list_selection(self, name): + """ + Sets which object should be selected in the list. + + :param name: Name of the object. + :rtype name: str + :return: None + """ print "OC.set_list_selection()" iterat = self.store.get_iter_first() while iterat is not None and self.store[iterat][0].options["name"] != name: @@ -2870,13 +2778,30 @@ class ObjectCollection: self.tree_selection.select_iter(iterat) def append(self, obj, active=False): + """ + Add a FlatCAMObj the the collection. This method is thread-safe. + + :param obj: FlatCAMObj to append + :type obj: FlatCAMObj + :param active: If it is to become the active object after appending + :type active: bool + :return: None + """ print "OC.append()" - self.store.append([obj]) - if active: - self.set_list_selection(obj.options["name"]) + def guitask(): + self.store.append([obj]) + if active: + self.set_list_selection(obj.options["name"]) + GLib.idle_add(guitask) def get_names(self): + """ + Gets a list of the names of all objects in the collection. + + :return: List of names. + :rtype: list + """ print "OC.get_names()" names = [] iterat = self.store.get_iter_first() @@ -2887,6 +2812,12 @@ class ObjectCollection: return names def get_bounds(self): + """ + Finds coordinates bounding all objects in the collection. + + :return: [xmin, ymin, xmax, ymax] + :rtype: list + """ print "OC.get_bounds()" # TODO: Move the operation out of here. @@ -2911,6 +2842,12 @@ class ObjectCollection: return [xmin, ymin, xmax, ymax] def get_list(self): + """ + Returns a list with all FlatCAMObj. + + :return: List with all FlatCAMObj. + :rtype: list + """ collection_list = [] iterat = self.store.get_iter_first() while iterat is not None: @@ -2920,6 +2857,14 @@ class ObjectCollection: return collection_list def get_by_name(self, name): + """ + Fetches the FlatCAMObj with the given `name`. + + :param name: The name of the object. + :type name: str + :return: The requested object or None if no such object. + :rtype: FlatCAMObj or None + """ iterat = self.store.get_iter_first() while iterat is not None: obj = self.store[iterat][0] @@ -2929,6 +2874,17 @@ class ObjectCollection: return None def change_name(self, old_name, new_name): + """ + Changes the name of `FlatCAMObj` named `old_name` to `new_name`. + + :param old_name: Name of the object to change. + :type old_name: str + :param new_name: New name. + :type new_name: str + :return: True if name change succeeded, False otherwise. Will fail + if no object with `old_name` is found. + :rtype: bool + """ iterat = self.store.get_iter_first() while iterat is not None: obj = self.store[iterat][0] diff --git a/FlatCAM.ui b/FlatCAM.ui index f3b3ef65..43d053e5 100644 --- a/FlatCAM.ui +++ b/FlatCAM.ui @@ -97,6 +97,11 @@ THE SOFTWARE. False gtk-open + + True + False + share/bug16.png + True False @@ -132,6 +137,77 @@ THE SOFTWARE. False gtk-open + + False + 5 + dialog + + + False + vertical + 2 + + + False + end + + + + + + + + + False + True + end + 0 + + + + + True + False + + + True + False + start + share/warning.png + + + False + True + 0 + + + + + True + False + 12 + 12 + 12 + 12 + True + label + + + False + True + 1 + + + + + False + True + 1 + + + + + False @@ -3488,6 +3564,22 @@ to application defaults. + + + True + False + + + + + List objects + True + False + image21 + False + + + diff --git a/FlatCAMObj.py b/FlatCAMObj.py index 89b1d880..53fa8625 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -38,6 +38,9 @@ class FlatCAMObj(GObject.GObject, object): self.axes = None # Matplotlib axes self.kind = None # Override with proper name + def __str__(self): + return "".format(self.kind, self.options["name"]) + def setup_axes(self, figure): """ 1) Creates axes if they don't exist. 2) Clears axes. 3) Attaches diff --git a/camlib.py b/camlib.py index 89dbfe7d..6313a221 100644 --- a/camlib.py +++ b/camlib.py @@ -1485,7 +1485,11 @@ class Excellon(Geometry): # Tool definition/parameters (?= is look-ahead # NOTE: This might be an overkill! - self.toolset_re = re.compile(r'^T(0?\d|\d\d)(?=.*C(\d*\.?\d*))?' + + # self.toolset_re = re.compile(r'^T(0?\d|\d\d)(?=.*C(\d*\.?\d*))?' + + # r'(?=.*F(\d*\.?\d*))?(?=.*S(\d*\.?\d*))?' + + # r'(?=.*B(\d*\.?\d*))?(?=.*H(\d*\.?\d*))?' + + # r'(?=.*Z([-\+]?\d*\.?\d*))?[CFSBHT]') + self.toolset_re = re.compile(r'^T(\d+)(?=.*C(\d*\.?\d*))?' + r'(?=.*F(\d*\.?\d*))?(?=.*S(\d*\.?\d*))?' + r'(?=.*B(\d*\.?\d*))?(?=.*H(\d*\.?\d*))?' + r'(?=.*Z([-\+]?\d*\.?\d*))?[CFSBHT]') @@ -1494,7 +1498,8 @@ class Excellon(Geometry): # Can have additional data after tool number but # is ignored if present in the header. # Warning: This will match toolset_re too. - self.toolsel_re = re.compile(r'^T((?:\d\d)|(?:\d))') + # self.toolsel_re = re.compile(r'^T((?:\d\d)|(?:\d))') + self.toolsel_re = re.compile(r'^T(\d+)') # Comment self.comm_re = re.compile(r'^;(.*)$') diff --git a/defaults.json b/defaults.json index 076496b9..78934a07 100644 --- a/defaults.json +++ b/defaults.json @@ -1 +1 @@ -{"gerber_noncopperrounded": false, "geometry_paintoverlap": 0.15, "geometry_plot": true, "excellon_feedrate": 5.0, "gerber_plot": true, "gerber_mergepolys": true, "excellon_drillz": -0.1, "geometry_feedrate": 3.0, "units": "IN", "excellon_travelz": 0.1, "gerber_multicolored": false, "gerber_solid": true, "gerber_isopasses": 1, "excellon_plot": true, "gerber_isotooldia": 0.016, "gerber_bboxmargin": 0.0, "cncjob_tooldia": 0.016, "geometry_travelz": 0.1, "gerber_cutoutmargin": 0.2, "excellon_solid": false, "geometry_paintmargin": 0.01, "geometry_cutz": -0.002, "geometry_cnctooldia": 0.016, "gerber_cutouttooldia": 0.07, "gerber_gaps": "4", "geometry_painttooldia": 0.0625, "cncjob_plot": true, "gerber_cutoutgapsize": 0.15, "gerber_isooverlap": 0.15, "gerber_bboxrounded": false, "geometry_multicolored": false, "gerber_noncoppermargin": 0.0, "geometry_solid": false} \ No newline at end of file +{"gerber_noncopperrounded": false, "geometry_paintoverlap": 0.15, "geometry_plot": true, "excellon_feedrate": 5.0, "gerber_plot": true, "gerber_mergepolys": true, "excellon_drillz": -0.1, "geometry_feedrate": 3.0, "units": "IN", "excellon_travelz": 0.1, "gerber_multicolored": false, "gerber_solid": true, "gerber_isopasses": 1, "excellon_plot": true, "gerber_isotooldia": 0.016, "cncjob_tooldia": 0.016, "geometry_travelz": 0.1, "gerber_cutoutmargin": 0.2, "excellon_solid": false, "geometry_paintmargin": 0.01, "geometry_cutz": -0.002, "geometry_cnctooldia": 0.016, "gerber_cutouttooldia": 0.07, "geometry_painttooldia": 0.0625, "gerber_gaps": "4", "gerber_bboxmargin": 0.0, "cncjob_plot": true, "gerber_cutoutgapsize": 0.15, "gerber_isooverlap": 0.15, "gerber_bboxrounded": false, "geometry_multicolored": false, "gerber_noncoppermargin": 0.0, "geometry_solid": false} \ No newline at end of file diff --git a/doc/build/.doctrees/camlib.doctree b/doc/build/.doctrees/camlib.doctree index 6eafcfdda73c6524a8bff8bee05830b7cfd15556..64e380e02ece0577ab599832ca523c327a233bbb 100644 GIT binary patch literal 192117 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 z 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

J_nhU$|uT9{}$o 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 PR8vS4+`c$>&#(J`@F~2h literal 184511 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

{(xoX3@1Ibmg1Whl--S7{h>1ijmo*J{%Yn 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 VYob5LGqlNm$RJLPYq_=Q{{Sy4XYc?3 diff --git a/doc/build/.doctrees/environment.pickle b/doc/build/.doctrees/environment.pickle index 7a50aee7f7c8362108ff6adb1e0038e984dc7f9d..51584e1fdc70867175f8450d47ede8af56fd5927 100644 GIT binary patch literal 32871 zcmbVV2YejG^)_y@Wm~rC#ejq;GGG}*$E1L5nqwPm76e#aPIoKqtxtEib9XL;O(2OC z3<*g{?>&JKk`M@~gmg$H1p)!md+)vdzi(!CXLk2i((nKKNjp0`^S$@x&6}Awv$J#8 z&mJf>8(yWhYtXIjsEB%P!mYKs&udqz<@MHsV4r$0I}GLwI9=uHSf%PVgSio~-Ktc( z&&RV`al&3QjYhC=le0v) z!Y!5y#p=%D?q<;K$qb8}`K?NeY!-*Xl7ZoQvu4ez)XMIzpr=%>m&md?SgV)aX1C1O z9V`XAWnr*&1I~hSyFpo-!2u&qSE*WT zHgSL8h_hg{SlTY!v1V}4h%--RIe5gGQz)a-Y^^M|c6YvF{EwudsG=&cyu57c#;de3b%s+E!~Pp}Hb84QEfEKXjYle|9fXo&4a(gr6( z-fmDFgO*CgiTbD?3`wz134>E(u}>TDjvMg?M!c0H-ti-zmgaOwv(%Di^QiBZTFu}L zNOEQvoJC1GrJoHcPLWc0WIrDyz`9x)4c183=Y+viV%AUX$ogquP25_AdpbCt8wTf* zqxE<#7@d=3RCaev6l=jc$!L8ToF6l~pd+IT!RTPCjO*MTZnfTUMeoL9tzE1J7lHM~ zVX%R$r_A^a2(vyGrtNf>>k~z^sbZ@bYz%`<1J0ags~iTK2he0{^;)$!>QdcyS7L2u5)W_=$irWm^&OW6u7#;A6p@)oZXLe(E7?c4z_!1tl|XK$zfu2Co-r*wBA9C5bZ{xxC`C!gg0bkYLmnJ8$Rcv z0kqn}-B>J%dQb;>4iK^@4;quhN0^)!Xc-1!Fa>v_(b`==|5*%zq)1|N_)tqER!zND zC{ar7UY<8Z3;MG0kty5rNzKhYObKopyMgk z8>rskSt&3pH6?AUK0b~zHtLmHYqY*AxGn`*X+biAq5?#HXQ2qOcYt#_2vg`|EVPzZ zxALgz4XIWeJUfLv*+O>WTdg!(g(e!FR2fWwDhr;IqS9+oi40OTtYWn?UMq`AwHjQX z0%h$6{sOABTB)H?-H^1K=XSKuwB4XSb_dT(@uB(aM!$B`TE9Lz*ktD&JU_`{PsgSn zH%f(>Og8lwB$~R(Te;Q^ZcLKjtJ-?XEMj9S)k=^oxG5$3zLsJyLE~OqtnDZ^gPW1f zYPo$@uGm<$l~$T{H9iF|OwpdgXq2%GMXm8gDdd!`ioMt9Zq=%8Ndc`Y*HtlIf@fTi z6(77fsj-(#4)|b%AlHoZ{>S0yEYf{-4CD{e9MY?5gcKuUFvKgw; zLC9`gc2)2{UYDZVLAiPWo~Q^>7s2aOfP*YSv~t($F)4ThR2mBvyfN9nENdy2{Wdx= zIaI$XMgK6+PxcLsdUf}By*4BbGk9~-B;PVQOhi=OEIZ9z6w8%*VMnprc7wO3IM{xS z#wpVe-j+v(hzsds2h%o|KMd?1U+|YcTGmj3;(S68N6U;i((8uDIaNP7V9L3T;;$I+3^u zH88tqNoVVQsdA;gV4&bSiQNSk)g6z>!TVD%sybap*+84YUCDBNpyR+6jo#A7jz-

` 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 diff --git a/doc/build/camlib.html b/doc/build/camlib.html index 07dd232f..b81ed968 100644 --- a/doc/build/camlib.html +++ b/doc/build/camlib.html @@ -100,10 +100,14 @@

  • FlatCAM Application
  • FlatCAM Developer Manual
  • @@ -523,7 +527,19 @@ box in both positive and negative, x and y axes.
    mirror(axis, point)
    -
    +

    Mirrors the object around a specified axis passign through +the given point. What is affected:

    +
      +
    • buffered_paths
    • +
    • flash_geometry
    • +
    • solid_geometry
    • +
    • regions
    • +
    +

    NOTE: +Does not modify the data used to create these elements. If these +are recreated, the scaling will be lost. This behavior was modified +because of the complexity reached in this class.

    +
    @@ -546,12 +562,15 @@ box in both positive and negative, x and y axes.

    Offsets the objects’ geometry on the XY plane by a given vector. These are:

      -
    • paths
    • +
    • buffered_paths
    • +
    • flash_geometry
    • +
    • solid_geometry
    • regions
    • -
    • flashes
    -

    Then buffered_paths, flash_geometry and solid_geometry -are re-created with self.create_geometry().

    +

    NOTE: +Does not modify the data used to create these elements. If these +are recreated, the scaling will be lost. This behavior was modified +because of the complexity reached in this class.

    @@ -607,16 +626,24 @@ one line of the source file.

    Scales the objects’ geometry on the XY plane by a given factor. These are:

      -
    • apertures
    • -
    • paths
    • +
    • buffered_paths
    • +
    • flash_geometry
    • +
    • solid_geometry
    • regions
    • -
    • flashes
    -

    Then buffered_paths, flash_geometry and solid_geometry -are re-created with self.create_geometry(). -:param factor: Number by which to scale. -:type factor: float -:rtype : None

    +

    NOTE: +Does not modify the data used to create these elements. If these +are recreated, the scaling will be lost. This behavior was modified +because of the complexity reached in this class.

    +
    +++ + + + +
    Parameters:factor (float) – Number by which to scale.
    +

    :rtype : None

    @@ -668,6 +695,23 @@ list of length n.

    +
    +
    +from_dict(d)
    +

    Populates the object from a serial representation created +with self.to_dict().

    + +++ + + + + + +
    Parameters:d – Serial representation of an ApertureMacro object.
    Returns:None
    +
    +
    static make_centerline(mods)
    @@ -833,6 +877,23 @@ are stored in self.primitives
    +
    +
    +to_dict()
    +

    Returns the object in a serializable form. Only the name and +raw are required.

    + +++ + + + + + +
    Returns:Dictionary representing the object. JSON ready.
    Return type:dict
    +
    + diff --git a/doc/build/genindex.html b/doc/build/genindex.html index b9786053..767195ae 100644 --- a/doc/build/genindex.html +++ b/doc/build/genindex.html @@ -99,11 +99,14 @@
  • FlatCAM Application
  • FlatCAM Developer Manual
  • @@ -187,6 +190,12 @@
    append() (camlib.ApertureMacro method)
    +
    + +
    (FlatCAM.ObjectCollection method) +
    + +
    auto_adjust_axes() (FlatCAM.PlotCanvas method)
    @@ -208,10 +217,6 @@
    -
    build_list() (FlatCAM.App method) -
    - -
    build_ui() (FlatCAM.FlatCAMObj method)
    @@ -226,6 +231,10 @@ +
    change_name() (FlatCAM.ObjectCollection method) +
    + +
    clear() (FlatCAM.PlotCanvas method)
    @@ -233,12 +242,12 @@
    clear_polygon() (camlib.Geometry method)
    +
    +
    CNCjob (class in camlib)
    -
    -
    connect() (FlatCAM.PlotCanvas method)
    @@ -280,6 +289,10 @@
    +
    disable_plots() (FlatCAM.App method) +
    + +
    do_flashes() (camlib.Gerber method)
    @@ -342,9 +355,15 @@ -
    from_dict() (camlib.Geometry method) +
    from_dict() (camlib.ApertureMacro method)
    +
    + +
    (camlib.Geometry method) +
    + +
    @@ -375,14 +394,18 @@
    Gerber (class in camlib)
    - -
    get_bounding_box() (camlib.Gerber method)
    +
    +
    -
    get_current() (FlatCAM.App method) +
    get_bounds() (FlatCAM.ObjectCollection method) +
    + + +
    get_by_name() (FlatCAM.ObjectCollection method)
    @@ -394,6 +417,14 @@ +
    get_list() (FlatCAM.ObjectCollection method) +
    + + +
    get_names() (FlatCAM.ObjectCollection method) +
    + +
    get_radio_value() (FlatCAM.App method)
    @@ -463,12 +494,12 @@
    make_outline() (camlib.ApertureMacro static method)
    -
    -
    make_polygon() (camlib.ApertureMacro static method)
    +
    +
    make_thermal() (camlib.ApertureMacro static method)
    @@ -478,6 +509,10 @@ +
    Measurement (class in FlatCAM) +
    + +
    mirror() (camlib.Excellon method)
    @@ -491,6 +526,10 @@
    mpl_connect() (FlatCAM.PlotCanvas method)
    + +
    mpl_disconnect() (FlatCAM.PlotCanvas method) +
    +
    @@ -514,6 +553,10 @@ - +
    +
    ObjectCollection (class in FlatCAM) +
    + +
    offset() (camlib.CNCjob method)
    @@ -647,12 +690,12 @@
    on_generate_isolation() (FlatCAM.App method)
    -
    on_generate_paintarea() (FlatCAM.App method)
    +
    on_gerber_generate_cutout() (FlatCAM.App method)
    @@ -662,10 +705,22 @@ +
    on_key_down() (FlatCAM.PlotCanvas method) +
    + +
    on_key_over_plot() (FlatCAM.App method)
    +
    on_key_up() (FlatCAM.PlotCanvas method) +
    + + +
    on_list_selection_change() (FlatCAM.ObjectCollection method) +
    + +
    on_mouse_move() (FlatCAM.PlotCanvas method)
    @@ -713,6 +768,12 @@
    on_row_activated() (FlatCAM.App method)
    +
    + +
    (FlatCAM.ObjectCollection method) +
    + +
    on_scale_object() (FlatCAM.App method)
    @@ -738,10 +799,6 @@ -
    on_tree_selection_changed() (FlatCAM.App method) -
    - -
    on_update_plot() (FlatCAM.App method)
    @@ -896,6 +953,10 @@ +
    set_active() (FlatCAM.ObjectCollection method) +
    + +
    set_form_item() (FlatCAM.App method)
    @@ -906,16 +967,16 @@
    -
    set_list_selection() (FlatCAM.App method) -
    - - -
    set_progress_bar() (FlatCAM.App method) +
    set_list_selection() (FlatCAM.ObjectCollection method)
    +
    set_progress_bar() (FlatCAM.App method) +
    + +
    setup_axes() (FlatCAM.FlatCAMObj method)
    @@ -928,10 +989,6 @@ -
    setup_project_list() (FlatCAM.App method) -
    - -
    size() (camlib.Geometry method)
    @@ -942,9 +999,15 @@
    -
    to_dict() (camlib.Geometry method) +
    to_dict() (camlib.ApertureMacro method)
    +
    + +
    (camlib.Geometry method) +
    + +
    diff --git a/doc/build/index.html b/doc/build/index.html index 7947f847..6ee1597d 100644 --- a/doc/build/index.html +++ b/doc/build/index.html @@ -99,11 +99,14 @@
  • FlatCAM Application
  • FlatCAM Developer Manual
  • @@ -164,11 +167,14 @@
  • FlatCAM Application
  • FlatCAM Developer Manual
  • diff --git a/doc/build/objects.inv b/doc/build/objects.inv index fda81fd9dd0c3890daf6816e65852e094d4bb52b..1ce26fc5e67f84c95e4de0e46bdd91627b9fe91a 100644 GIT binary patch delta 1592 zcmV-82FLla44w^;d4F2La@;lyz2_@-roDQn@iDiIr_J=>CNup24kbcb+7zLZ)Y_Y` zFDPkct)!Je7ND3{PL5Ze2T9A?S4{U} z4OY|+<3{EVD-;+Az+V0nu@c(eU*Cu18@LSIF?SFTQv%Xzce&X%4&K;O|MNRV%0p;s zA>YB@?3~7OWPkT-4K6eeo@MUZu;oU2zhG_fv-9j&LJ&~Z;UXmY%yP63Np1)vqBa=( zb{L;QdUCG<8^+$Pg&f{oGq`TY|8%;v=(cPfR~7xPOQ_i#Era;J|)Ez_O%s*QjmC z@O_8h^b&_}Leg(%@kN{eFr}%U7n;p zOV1^T!GDDINdH0?o{YH;Yme+ypJ6UiXLi}h*4vvab5xXR5i+cRegx*0Wj5{I)PrLs zUqOTuxJtIT_JKl{bFcH7)=XX+)iKH`B?@#@Is;UjxVtUt?JYgV-3eUSqoOCp3>!;= zsT3?)>tE8;D!zh8;k1VZ**4v~8s^%xZ=;%k+JBy(D(xIP_9gt;*U+(#Ympz}O{$lM z2z4exR?uCexs+%hTa>d2Bc_p)N~1VS)9?Y-8RecVT3UhQDq$1_2{OU0O>vinx1{xC z(%*JEpA1=AOHv#&*}19-E%_^efHJTWBUJs#TQ*24 z(tp=d(KaKSief_b*HadbT8I6yCKF&4+iQb_aRr5J3`ds_5)e&BYTiK#`sntA(xvVU z$q<~*8oCi~kF&Ql^y-O{j7=8bM)6;xi<<+k^-*Jox^|5~Qllk=3Q#&AUw?NhiTa%y zU6^wxN6XL}wssyO(sin6iFAT!tPXz9HGjnJo9Xmajn1&PW^x3bqWg28uYvsei>%W#@CZ!8dRQiV*vjbOyh|u9Hgqp!6eykHWEOa3;EAlx{mc zex4bfzoysNtSO4PMTS#S@nCkull$D;Pfj~&*$LCsCLz}@HylJvueK9OJS8&fn}1_k zayIovm0@MMb@FsVMo)hgvX0ZF-H+m)x!=6xaD{pkP_Wec7&4Rvo&fW7g8VgY3R>tr z&GLebxoatAr;uycwJ`(BDJ0DfFO#Pa!;CV0($SG&0(agm)Qk+MYD4;qqA9*i^xub3t9^+$kGTKa`as^m*MnXzbMgqGOY^GP;#tg%er9{1Hzn{c;hhcBy4#AJ8$amT2k zSpf4&%Ff4A>(VA(mUIcTv!yxf?gnlU9~?z2d$c7CvPaHljW$X&dRGS*olS*j-1uLk z*@Az7)zaj6EqRu&Va3w+hn&f0O(%2a#AT5fsGPG~(s_xbl3{oC6kr2&n>;dFd`;IY zkbnvO_hV+f6v-D#zSBl4wSQ={pA$U(gzkfSVn4(Q^{un~4r`q6F(hC qp_efIh*|rXlId-~o+@$o^ojh2X39ma%}DKqE*rO!IR69lY<#OM&?1BY delta 1482 zcmV;*1vUDf4Y3T6d4E~WZsRr(zUL_nwAUEj9QU>e+F}peF3<-cC~_n-p-7daoH$S4 zp-4NjEK5W662~$}9M0eO&9Jpn842$@ALLifE6}^gFT3va*ybPhhtTR@c0a7_HSE5} zM-L5{8KLvjERmLa;7%N_7p7-<**|H)Pu{?T;H_2_?*6q++kgGGOOMjp^ziZ5-Q&X_ znuq6aKdzS6_zaiZ>gC?@{kN{$ced;CD==ILB6ucjTiM}F5Dr%EzU(+I8(uM$wH+AN zIU5Cu5{6085P-b=!`hZ9bANp{$)DgVaC_k(9;N|{tKI2JY;3$+Nog6H%pbs0guZp) zLhs-Q7jCeYKz~`kv`JEE-#}o{cHzW0s=Bz<#1cYdY_Lw-;K|m5cL7@CKfzkf#KBq* zR8!XKojGWfHNHg6T4`XOAE7ibTHAZTzekM4Bczj(h2!}=leVukcqKuSC7a>2_+h}s z&@t8s+o5|4_HG(Hb7z$am3=46*)Bxmo-^nvWguBRhkrWPsxi_jt*MUfxI;s0W#E4~ z7Oiwz-SYXb=NDV;z2F*(g1s92pKU7%N6Y!;)ko1r7rzT5P}6nm|3tN(xjAw_PW$Bu z%UdXK@fY-YafqbQcv?-VYpXZHN{q|sZjwnpk9M7pWOb(@!s(TYi=d7}{_&QuVgCFZ z(GAl;vVYn-goyy{mFN@$ZvkvD?^Bd6C>YtDxpGvtH%JZ|R+9UDC*v!~HI5W(gZWdD zcY_-Ss}_V?E-9^Y&N{Lae$OB?)^W-5qcG$0rT2mHcktAp?yNpF);tZtP0sWPyN*j` z*^%oWO4599;B7_2@lFfjxR~j6?NP@P45)ggC4bg&Ph20*QHU|GaH4?mHNMP*&l)Sb zRK_Cac16PWEq{$5JVZy7_5t50igBRh2;(>0Y>{Lc)RzGU)}@Nk@oK0ZML2xMgn_7I zx^vS284=E>tR2$o?Y71(z(}&z+G0*fsClmo$ZOJuMD_U!@`l5G2}ZQHcV;Hu&wmFH zuVur*S`qo|Fi_x2PFoob2|QUJ3LTKb8Idm_cyF3aT!wh%BZ^cL3rgr+fF{fg+D^xF zni66V5f;PcrU9RewP`^tnf1=78-r)-AZD?MF3=|OOmt)(3E0jnuBU^o1ryDbfYvIv zf%6G%J-jI+?OV|lC=xXou?8B%6@OImPXn!$sQWev2XHOdgP3-6D9b4ZXoIYAPM~=c)N^rJ;?t)+Sq5_)EB;$v_=X&t1WAX>Jg?xwE-I zE`@&b?7jkGF;X@Sk9xJKwTa4>`a25#+bc4=juX4Pqt&HooOi>*PV1KwlYfgb#|3f3 zu)wF04PY}~mTc3WcBWnuyV^8VxS?m{YLOe;rw>TipM^~ULjG#IdTn%i8!>5^RvU?X z#=Q-T1?$Yt*Jc55tu4X4Y8-gaDo(tDRHn8C7i83Ezu1vJ&%KD0-S?$nM6FlatCAM Application
  • FlatCAM Developer Manual
  • diff --git a/doc/build/search.html b/doc/build/search.html index 8896dcbf..b5d5e38e 100644 --- a/doc/build/search.html +++ b/doc/build/search.html @@ -106,11 +106,14 @@
  • FlatCAM Application
  • FlatCAM Developer Manual
  • diff --git a/doc/build/searchindex.js b/doc/build/searchindex.js index 70284982..23fbc99a 100644 --- a/doc/build/searchindex.js +++ b/doc/build/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{represent:2,all:[1,2,3,4],code:[1,2,3],toolpath:3,replot:1,focus:1,follow:3,on_key_over_plot:1,make_outlin:3,whose:[1,4],make_circl:3,get_ev:1,on_options_upd:[1,4],flash:3,specif:[1,2,3],gerber:[],program:1,on_click_over_plot:1,plot_al:1,geom:3,spec:3,isinst:4,digit:3,sourc:3,everi:3,string:[1,3],far:1,mous:1,"5e6cff":3,obround:3,untouch:3,on_cb_plot_toggl:1,toolshap:3,button:1,list:[1,3,4],iter:[3,4],item:1,vector:[1,2,3],specal:1,round:[1,3],get_radio_valu:1,create_geometri:3,natur:3,dimens:[2,3],resourc:1,zero:3,pass:[1,3],click:1,append:[2,3],index:0,what:4,new_ax:1,neg:[1,3],current:1,delet:1,clipboard:1,buffer_path:3,"new":[1,2,4],method:[1,2,3,4],whatev:1,widget:[1,4],default2zero:3,flatcamgeometri:[],gener:[1,2,3],onli:[1,3],matplotlib:[1,2,3],adjust_ax:1,on_create_aligndril:1,path:[1,3],along:[3,4],vertic:3,modifi:[1,2,3,4],make_moir:3,valu:[1,3,4],box:[1,3],convert:[2,3,4],new_object:1,on_file_saveprojectcopi:1,action:1,chang:[1,3,4],on_activate_nam:1,on_options_object2app:1,diamet:3,via:1,primit:3,modul:0,on_fileopengerb:1,filenam:[1,3,4],basegeometri:4,ymin:[1,3],select:1,frac_digit:[1,3],plot:[1,2,3],from:[1,2,3,4],describ:3,doubl:1,regist:1,setup_component_editor:1,call:[1,2,3,4],save:[1,3,4],suppos:4,type:[1,2,3,4],toggl:1,more:3,on_toolbar_replot:1,evalu:3,on_delet:1,factor:[1,2,3],on_gerber_generate_cutout:1,parse_fil:3,known:1,hole:1,must:[1,3,4],on_file_openproject:1,none:[1,2,3],ser_attr:[3,4],work:3,uniqu:1,gtext:3,crosshair_thick:3,can:[1,2,3,4],drill:[2,3],z_move:2,fetch:[2,4],def:4,overrid:[2,3],overwritten:4,polygon2gcod:3,give:3,process:[1,3,4],share:1,indic:3,stroke:3,minimum:1,tab:[1,4],xmin:[1,3],hit:1,serial:[],z_cut:2,apertureid:3,alwai:3,surfac:3,end:3,hadler:1,fix_region:3,write:3,fals:3,updat:[1,4],parse_lin:3,recogn:4,make_polygon:3,after:1,befor:[1,2],notebook:1,mai:1,setup_obj_class:1,associ:[1,2,3],becom:[2,3],read:[1,2,3,4],onto:3,correspond:[1,3],element:[3,4],inform:1,"switch":1,maintain:1,allow:3,enter:1,make_therm:3,on_file_saveprojecta:1,travel:3,checkbox:1,rotat:3,over:[1,4],tupl:[2,3],through:[1,4],affect:3,on_excellon_tool_choos:1,paramet:[1,2,3],fit:1,respresent:[3,4],chosen:1,fix:3,gtk:1,"__class__":4,set_list_select:1,window:1,html:1,pcb:1,on_options_app2object:1,main:[1,3],pixel:1,non:[3,4],within:3,"return":[1,2,3,4],thei:[2,3,4],handl:[1,2],rectangl:3,number:[1,3],"break":3,vect:[2,3],build_list:1,project_filenam:1,choic:1,name:[1,2,3,4],edit:4,separ:[1,3],solid_geometri:3,each:[3,4],found:3,circular:3,gui:[1,2,4],read_form:[1,2],b5ab3a:3,on_closewindow:1,replac:3,continu:[1,2],"static":3,connect:1,aperturetyp:3,event:1,out:1,variabl:[1,3],on_eval_upd:1,generate_from_excellon_by_tool:3,content:[0,1],adjust:1,set_current_pag:1,clear_polygon:3,on_scrol:1,flatcamcncjob:[],alter:3,linear:3,insid:3,state:1,precaut:1,differ:3,flatcamexcellon:[],base:[1,2],dictionari:[1,2,3,4],latest:1,org:1,care:1,file_chooser_act:1,generate_from_geometri:3,thread:1,launch:1,angl:3,motion:1,turn:1,length:3,plane:3,place:[1,4],outsid:3,geometri:[],treeselect:1,entry_text:1,n_vert:3,first:4,origin:[1,3],copper:1,on_zoom_in:1,arrai:3,independ:4,f0e24d:3,restrict:1,saepar:1,done:[1,3,4],fast:3,thick:3,open:[1,4],predefin:3,size:[1,3],given:[1,2,3],circumscrib:3,on_toggle_unit:1,data:[1,3],interact:2,flatcamobj:[],attach:[1,2],circl:3,interfac:1,locat:3,store:[3,4],includ:[3,4],option:3,handler:1,tool:[1,3],copi:[1,2,3,4],specifi:[1,2,3,4],get_empty_area:3,generate_from_excellon:3,part:[2,3],pars:3,instanci:3,get_bounding_box:3,exposur:3,kind:[1,2,3,4],whenev:1,tree:1,entry_ev:1,structur:3,project:[1,4],str:[1,2,3],build_ui:2,posit:3,initi:1,thereaft:4,ani:[1,3],do_flash:3,raw:3,inherit:4,have:[1,3],callback:1,self:[1,2,3,4],note:[1,3],also:3,on_options_object2project:1,build:[1,2],which:[1,2,3,4],event_handl:1,interior:3,on_success:1,singl:3,simplifi:3,buffer:3,previou:1,on_mouse_mov:1,pair:[1,3],alpha:3,segment:3,"class":[1,2,3],set_progress_bar:1,appertur:3,clear:[1,2],later:[2,4],cover:[1,3],on_mouse_move_over_plot:1,populate_objects_combo:1,make_centerlin:3,axi:[1,3],width:3,thicken:3,recontruct:4,serializ:4,show:1,text:[1,3,4],apertur:3,radiu:3,syntax:[1,4],radio:1,corner:[1,3],find:1,on_scale_object:1,load_default:1,slow:3,ratio:[1,2],menu:1,configur:[1,2],activ:1,written:4,comboboxtext:1,version:[1,2,3],dict:[1,2,3,4],combo:1,elin:3,on_options_combo_chang:1,meant:1,"__inst__":4,get:[1,2,4],on_entry_eval_activ:1,express:3,nativ:1,made:3,geo:4,mpl_connect:1,requir:4,multipolygon:3,bar:1,on_create_mirror:1,coord:3,whether:2,to_dict:[3,4],xmax:[1,3],contain:[1,4],comma:3,movement:1,where:[1,3,4],dpi:3,set:[1,2,3],dump:4,keyboard:1,startup:[1,4],on_cncjob_exportgcod:1,maximum:1,"4650bd":3,see:[1,3],result:[1,3],arg:1,close:1,contour:3,statu:1,detect:4,extend:2,boundari:3,label:1,getattr:4,max_r:3,between:1,progress:1,previous:4,attribut:[3,4],accord:3,kei:[1,2,3,4],numer:3,complement:3,isol:1,job:[1,3],entir:3,here:1,extent:1,toler:3,auto_adjust_ax:1,popul:[1,3,4],both:3,feedrat:[2,3],rtype:[1,3,4],options2form:1,alon:3,setup_project_list:1,instanc:1,lowerleft:3,whole:[1,3],col:1,obj_dict:2,parse_cont:3,load:[1,4],cncjob:[],figur:[1,2],color:3,format:2,on_gerber_generate_noncopp:1,featur:3,shortcut:1,respect:2,throughout:1,backend:1,quit:1,do_someth:3,convert_unit:[2,3],addition:3,been:1,mark:1,pute:1,json:[1,2,4],get_curr:1,toolbar:1,open_project:[1,4],subscrib:1,immedi:1,radio_set:1,gcode:3,imag:1,search:0,gap:3,on_file_savedefault:[1,4],coordin:[1,3],on_options_project2object:1,func:1,present:3,versioncheck:1,inhibit:1,therefor:[1,4],apparamet:3,look:3,align:1,properti:[1,3],rectangular:3,defin:[1,3],"while":1,setup_ax:2,abov:3,margin:3,region:3,propag:1,layer:1,them:2,equal:3,unit:[1,2,3],itself:3,exterior:3,on_fileopengcod:1,"__init__":1,gcode_pars:3,make_lowerleftlin:3,make:4,belong:3,same:[1,4],save_project:[1,4],shply:4,pad:3,descend:[2,3],tool_toler:3,complet:1,http:1,widget_nam:1,upon:[1,4],alert:1,user:[1,2],canva:[1,2],implement:2,appropri:[1,3],off:1,center:[1,3],macro:3,well:3,"_app_":[1,4],without:1,on_file_new:1,thi:[1,2,3,4],choos:1,on_generate_paintarea:1,make_vectorlin:3,rout:1,left:1,distanc:3,identifi:[3,4],crosshair_len:3,isolation_geometri:3,entri:1,rest:3,shape:[3,4],aspect:[1,2],linestr:3,flatcamgerb:[],speed:3,wether:3,cut:[1,3],on_tools_doublesid:1,point:[1,3],param:[1,3,4],add:2,valid:1,board:1,appli:4,subsequ:1,pre_pars:3,take:[1,4],around:[1,3],transpar:[2,3],dest:1,on_file_saveproject:1,background:2,press:1,height:3,mod:3,like:1,success:1,ring:3,zoom:1,integ:3,noth:1,from_dict:3,necessari:1,either:1,exobj:3,on_clear_plot:1,page:[0,1],depend:[1,2,3],encount:4,int_digit:3,creation:[1,4],back:1,percentag:1,on_zoom_fit:1,radiobutton:1,"export":2,mirror:[1,3],set_form_item:[1,2],on_generate_excellon_cncjob:1,scale:[1,2,3],bottom:1,definit:3,overlap:3,on_update_plot:1,flash_geometri:3,cnc:[1,3],duplic:1,refer:4,machin:3,object:3,run:[1,3],usag:3,how:4,offset:[1,2,3],on_toggle_pointbox:1,about:1,actual:[2,3],file_chooser_save_act:1,on_generate_cncjob:1,side:1,degre:3,dialog:1,constructor:1,options_update_ignor:1,on_fileopenexcellon:1,on_about:1,chooser:1,"float":[1,2,3],encod:[3,4],bound:[1,3],excellon:[],compon:1,accordingli:1,ymax:[1,3],wai:[3,4],area:[1,3],outer_dia_outer_r:3,transfer:1,support:3,overwrit:3,make_geometri:3,start:[1,3],clear_poli:1,trigger:1,sdump:4,editor:1,fraction:3,on_canvas_configur:1,"function":[1,4],on_generate_isol:1,linear2gcod:3,form:[1,2,4],on_zoom_out:1,on_offset_object:1,don:[2,3],line:[1,3],"true":[1,3],loc:3,info:1,on_options_app2project:1,attr:4,on_generate_gerber_bounding_box:1,"default":[1,3,4],access:1,displai:1,tooldia:[2,3],record:1,limit:1,otherwis:4,enlarg:3,buffered_path:3,creat:[1,2,3,4],"int":3,request:1,dure:3,parser:3,aperture_pars:3,repres:[2,3],plot2:3,on_row_activ:1,exist:2,file:[1,3,4],doe:[1,3],check:1,again:3,aplic:1,polygon:[1,3],titl:1,to_form:2,when:[1,3,4],detail:1,invalid:3,field:1,other:[1,3],bool:[2,3],gline:3,geometr:[2,3],on_options_project2app:1,read_form_item:[1,2],deseri:[2,3],on_tree_selection_chang:1,draw:[1,3],event_nam:1,eval:1,outdat:1,rule:3,ignor:[1,3],aperture_macro:3,on_filequit:1,scroll:1},objtypes:{"0":"py:module","1":"py:method","2":"py:class","3":"py:staticmethod","4":"py:attribute"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","class","Python class"],"3":["py","staticmethod","Python static method"],"4":["py","attribute","Python attribute"]},filenames:["index","app","flatcamobj","camlib","devman"],titles:["Welcome to FlatCAM’s documentation!","FlatCAM Application","FlatCAM Objects","Camlib","FlatCAM Developer Manual"],objects:{"":{camlib:[3,0,0,"-"],FlatCAM:[2,0,0,"-"]},"camlib.CNCjob":{scale:[3,1,1,""],polygon2gcode:[3,1,1,""],generate_from_excellon_by_tool:[3,1,1,""],linear2gcode:[3,1,1,""],pre_parse:[3,1,1,""],generate_from_excellon:[3,1,1,""],gcode_parse:[3,1,1,""],generate_from_geometry:[3,1,1,""],offset:[3,1,1,""],plot2:[3,1,1,""]},FlatCAM:{PlotCanvas:[1,2,1,""],FlatCAMGeometry:[2,2,1,""],App:[1,2,1,""],FlatCAMObj:[2,2,1,""],FlatCAMExcellon:[2,2,1,""],FlatCAMGerber:[2,2,1,""],FlatCAMCNCjob:[2,2,1,""]},"FlatCAM.FlatCAMGerber":{convert_units:[2,1,1,""]},"camlib.Geometry":{convert_units:[3,1,1,""],scale:[3,1,1,""],to_dict:[3,1,1,""],bounds:[3,1,1,""],get_empty_area:[3,1,1,""],isolation_geometry:[3,1,1,""],from_dict:[3,1,1,""],clear_polygon:[3,1,1,""],offset:[3,1,1,""],size:[3,1,1,""]},"FlatCAM.App":{on_options_object2app:[1,1,1,""],on_about:[1,1,1,""],on_tree_selection_changed:[1,1,1,""],on_canvas_configure:[1,1,1,""],on_zoom_in:[1,1,1,""],on_delete:[1,1,1,""],on_toggle_units:[1,1,1,""],on_closewindow:[1,1,1,""],on_click_over_plot:[1,1,1,""],on_row_activated:[1,1,1,""],on_fileopengerber:[1,1,1,""],file_chooser_action:[1,1,1,""],on_zoom_out:[1,1,1,""],on_zoom_fit:[1,1,1,""],on_file_savedefaults:[1,1,1,""],on_generate_excellon_cncjob:[1,1,1,""],set_form_item:[1,1,1,""],plot_all:[1,1,1,""],read_form:[1,1,1,""],on_generate_isolation:[1,1,1,""],on_key_over_plot:[1,1,1,""],on_offset_object:[1,1,1,""],on_gerber_generate_noncopper:[1,1,1,""],on_fileopengcode:[1,1,1,""],new_object:[1,1,1,""],on_activate_name:[1,1,1,""],get_eval:[1,1,1,""],on_cb_plot_toggled:[1,1,1,""],on_update_plot:[1,1,1,""],save_project:[1,1,1,""],on_options_object2project:[1,1,1,""],setup_component_editor:[1,1,1,""],get_current:[1,1,1,""],open_project:[1,1,1,""],on_options_update:[1,1,1,""],on_file_new:[1,1,1,""],on_options_app2object:[1,1,1,""],on_options_project2app:[1,1,1,""],read_form_item:[1,1,1,""],versionCheck:[1,1,1,""],on_toolbar_replot:[1,1,1,""],on_entry_eval_activate:[1,1,1,""],on_scale_object:[1,1,1,""],on_options_combo_change:[1,1,1,""],setup_obj_classes:[1,1,1,""],on_file_saveproject:[1,1,1,""],setup_project_list:[1,1,1,""],on_generate_gerber_bounding_box:[1,1,1,""],on_options_project2object:[1,1,1,""],on_eval_update:[1,1,1,""],build_list:[1,1,1,""],on_toggle_pointbox:[1,1,1,""],on_file_saveprojectas:[1,1,1,""],info:[1,1,1,""],on_file_openproject:[1,1,1,""],on_options_app2project:[1,1,1,""],set_progress_bar:[1,1,1,""],on_file_saveprojectcopy:[1,1,1,""],on_create_mirror:[1,1,1,""],file_chooser_save_action:[1,1,1,""],on_excellon_tool_choose:[1,1,1,""],on_generate_cncjob:[1,1,1,""],on_clear_plots:[1,1,1,""],on_mouse_move_over_plot:[1,1,1,""],on_tools_doublesided:[1,1,1,""],on_gerber_generate_cutout:[1,1,1,""],load_defaults:[1,1,1,""],populate_objects_combo:[1,1,1,""],on_create_aligndrill:[1,1,1,""],on_generate_paintarea:[1,1,1,""],get_radio_value:[1,1,1,""],on_filequit:[1,1,1,""],on_cncjob_exportgcode:[1,1,1,""],options2form:[1,1,1,""],set_list_selection:[1,1,1,""],on_fileopenexcellon:[1,1,1,""]},"camlib.Gerber":{parse_lines:[3,1,1,""],scale:[3,1,1,""],frac_digits:[3,4,1,""],buffer_paths:[3,1,1,""],aperture_parse:[3,1,1,""],offset:[3,1,1,""],create_geometry:[3,1,1,""],parse_file:[3,1,1,""],do_flashes:[3,1,1,""],mirror:[3,1,1,""],fix_regions:[3,1,1,""],get_bounding_box:[3,1,1,""],int_digits:[3,4,1,""]},"camlib.ApertureMacro":{make_geometry:[3,1,1,""],default2zero:[3,3,1,""],make_vectorline:[3,3,1,""],make_polygon:[3,3,1,""],make_moire:[3,3,1,""],make_outline:[3,3,1,""],make_circle:[3,3,1,""],parse_content:[3,1,1,""],make_centerline:[3,3,1,""],make_thermal:[3,3,1,""],append:[3,1,1,""],make_lowerleftline:[3,3,1,""]},"FlatCAM.FlatCAMGeometry":{plot:[2,1,1,""],scale:[2,1,1,""],offset:[2,1,1,""]},"FlatCAM.PlotCanvas":{on_mouse_move:[1,1,1,""],on_scroll:[1,1,1,""],adjust_axes:[1,1,1,""],clear:[1,1,1,""],zoom:[1,1,1,""],connect:[1,1,1,""],new_axes:[1,1,1,""],auto_adjust_axes:[1,1,1,""],mpl_connect:[1,1,1,""]},camlib:{Excellon:[3,2,1,""],ApertureMacro:[3,2,1,""],Geometry:[3,2,1,""],CNCjob:[3,2,1,""],Gerber:[3,2,1,""]},"camlib.Excellon":{parse_lines:[3,1,1,""],scale:[3,1,1,""],offset:[3,1,1,""],create_geometry:[3,1,1,""],mirror:[3,1,1,""],parse_file:[3,1,1,""]},"FlatCAM.FlatCAMObj":{read_form:[2,1,1,""],plot:[2,1,1,""],serialize:[2,1,1,""],deserialize:[2,1,1,""],build_ui:[2,1,1,""],to_form:[2,1,1,""],setup_axes:[2,1,1,""],set_form_item:[2,1,1,""],read_form_item:[2,1,1,""]}},titleterms:{cncjob:3,flatcamgerb:2,app:1,indic:0,aperturemacro:3,tabl:0,excellon:3,serial:4,option:4,flatcamgeometri:2,develop:4,welcom:0,flatcamobj:2,gerber:3,camlib:3,document:0,flatcamcncjob:2,applic:1,flatcam:[0,1,2,4],object:2,flatcamexcellon:2,plotcanva:1,manual:4,geometri:3}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{represent:[2,3],all:[1,2,3,4],code:[1,2,3],skip:1,toolpath:3,replot:1,focus:1,follow:3,on_key_over_plot:1,make_outlin:3,whose:[1,4],make_circl:3,get_ev:1,on_options_upd:[1,4],flash:3,shply:4,gerber:[],program:1,text:[1,3,4],plot_al:1,geom:3,spec:3,isinst:4,cnc:[1,3],digit:3,sourc:3,everi:3,string:[1,3],getattr:4,far:1,mous:1,"5e6cff":3,obround:3,affect:3,on_cb_plot_toggl:1,toolshap:3,button:1,list:[1,3,4],iter:[3,4],item:1,vector:[1,2,3],specal:1,round:[1,3],get_radio_valu:1,create_geometri:3,natur:3,dimens:[2,3],resourc:1,zero:3,pass:[1,3],rectangular:3,click:1,append:[1,2,3],index:0,what:[3,4],load_default:1,new_ax:1,make_centerlin:3,current:1,delet:1,clipboard:1,"new":[1,2,4],method:[1,2,3,4],whatev:1,widget:[1,4],default2zero:3,flatcamgeometri:[],gener:[1,2,3],onli:[1,3],matplotlib:[1,2,3],adjust_ax:1,on_create_aligndril:1,path:[1,3],along:[3,4],vertic:3,modifi:[1,2,3,4],make_moir:3,valu:[1,3,4],box:[1,3],convert:[2,3,4],do_someth:3,on_file_saveprojectcopi:1,action:1,chang:[1,3,4],on_activate_nam:1,on_options_object2app:1,diamet:3,via:1,change_nam:1,primit:3,modul:0,on_fileopengerb:1,filenam:[1,3,4],"boolean":1,basegeometri:4,ymin:[1,3],select:1,frac_digit:[1,3],plot:[1,2,3],from:[1,2,3,4],describ:3,doubl:1,regist:1,setup_component_editor:1,call:[1,2,3,4],flash_geometri:3,dict:[1,2,3,4],type:[1,2,3,4],toggl:1,more:3,on_toolbar_replot:1,on_delet:1,combo:1,on_toggle_unit:1,on_gerber_generate_cutout:1,parse_fil:3,known:1,actual:[2,3],hole:1,must:[1,3,4],on_file_openproject:1,none:[1,2,3],left:1,ser_attr:[3,4],work:3,uniqu:1,gtext:3,crosshair_thick:3,can:[1,2,3,4],drill:[2,3],z_move:2,fetch:[1,2,4],def:4,overrid:[2,3],meant:1,polygon2gcod:3,give:[1,3],process:[1,3],share:1,indic:[],stroke:3,minimum:1,tab:[1,4],xmin:[1,3],"__inst__":4,serial:[],z_cut:2,apertureid:3,alwai:3,surfac:3,end:3,hadler:1,fix_region:3,write:3,fals:[1,3],circular:3,b5ab3a:3,recogn:4,on_key_down:1,make_polygon:3,after:1,befor:[1,2],plane:3,mai:1,circumscrib:3,data:[1,3],subsequ:1,entry_text:1,correspond:[1,3],element:[3,4],callback:1,"switch":1,maintain:1,allow:3,enter:1,on_fileopenexcellon:1,on_file_saveprojecta:1,travel:3,checkbox:1,rotat:3,over:[1,4],becaus:3,through:[1,3,4],untouch:3,on_excellon_tool_choos:1,paramet:[1,2,3],disconnect:1,fit:1,save_project:[1,4],chosen:1,fix:3,gtk:1,"__class__":4,set_list_select:1,window:1,html:1,transpar:[2,3],set_act:1,pcb:1,on_options_app2object:1,main:[1,3],pixel:1,on_zoom_out:1,non:[3,4],"float":[1,2,3],"return":[1,2,3,4],thei:[2,3,4],handl:[1,2],safe:1,rectangl:3,file_chooser_act:1,"break":3,vect:[2,3],build_list:[],project_filenam:1,choic:1,name:[1,2,3,4],edit:4,separ:[1,3],solid_geometri:3,each:[3,4],found:[1,3],updat:[1,4],gui:[1,2,4],read_form:[1,2],parse_lin:3,on_closewindow:1,replac:3,continu:[1,2],"static":3,connect:1,aperturetyp:3,on_key_up:1,event:1,out:1,variabl:[1,3],on_eval_upd:1,generate_from_excellon_by_tool:3,content:[0,1],adjust:1,set_current_pag:1,clear_polygon:3,on_scrol:1,flatcamcncjob:[],linear:3,insid:3,loc:3,deseri:[2,3],precaut:1,given:[1,2,3],like:1,flatcamexcellon:[],base:[1,2],dictionari:[1,2,3,4],org:1,care:1,generate_from_geometri:3,thread:1,launch:1,angl:3,success:1,motion:1,turn:[],length:3,notebook:1,place:[1,4],outsid:3,geometri:[],treeselect:[],onto:3,support:3,first:4,origin:[1,3],copper:1,on_zoom_in:1,arrai:3,independ:4,number:[1,3],restrict:1,saepar:1,instruct:1,done:[1,3,4],overwrit:3,thick:3,open:[1,4],predefin:3,size:[1,3],differ:3,setup_obj_class:1,width:3,associ:[2,3],interact:2,flatcamobj:[],get_list:1,attach:[1,2],circl:3,sdump:4,instanc:1,store:[3,4],editor:1,option:[],ratio:[1,2],tool:[1,3],copi:[1,2,3,4],specifi:[1,2,3,4],get_empty_area:3,generate_from_excellon:3,part:[2,3],pars:3,get_bounding_box:3,exposur:3,kind:[1,2,3,4],whenev:1,tree:[],entry_ev:1,structur:3,project:[1,4],str:[1,2,3],macro:3,posit:3,abov:3,thereaft:4,ani:[1,3],do_flash:3,raw:3,"_app_":[1,4],have:[1,3],recreat:3,inform:1,self:[1,2,3,4],note:[1,3],also:3,on_options_object2project:1,build:[1,2],which:[1,2,3,4],event_handl:1,interior:3,on_success:1,singl:3,simplifi:3,buffer:3,previou:1,reach:3,on_mouse_mov:1,pair:[1,3],alpha:3,segment:3,"class":[1,2,3],f0e24d:3,appertur:3,clear:[1,2],later:[2,4],cover:[1,3],on_mouse_move_over_plot:1,populate_objects_combo:1,neg:[1,3],axi:[1,3],thicken:3,recontruct:4,serializ:[3,4],show:1,on_click_over_plot:1,apertur:3,radiu:3,syntax:[1,4],radio:1,corner:[1,3],find:1,on_scale_object:1,new_object:1,slow:3,locat:3,menu:1,configur:[1,2],activ:1,written:4,should:1,comboboxtext:1,version:[1,2,3],suppos:4,factor:[1,2,3],elin:3,on_options_combo_chang:1,overwritten:4,hit:1,get:[1,2,4],express:3,nativ:1,on_options_app2project:1,geo:4,mpl_connect:1,requir:[3,4],multipolygon:3,bar:1,on_create_mirror:1,coord:3,whether:2,to_dict:[3,4],xmax:[1,3],contain:[1,4],comma:3,movement:1,where:[1,3,4],dpi:3,user:[1,2],set:[1,2,3],dump:4,noth:1,keyboard:1,startup:[1,4],on_cncjob_exportgcod:1,displai:1,"4650bd":3,see:[1,3],result:[1,3],arg:1,fail:1,close:1,contour:3,statu:1,detect:4,kei:[1,2,3,4],boundari:3,passign:3,label:1,state:1,max_r:3,between:1,progress:1,wether:[1,3],attribut:[3,4],accord:3,extend:2,numer:3,complement:3,isol:1,job:[1,3],succeed:1,here:1,extent:1,toler:3,auto_adjust_ax:1,popul:[1,3,4],both:3,feedrat:[2,3],rtype:[1,3,4],options2form:1,alon:3,setup_project_list:[],entir:3,lowerleft:3,whole:[1,3],col:1,obj_dict:2,parse_cont:3,load:[1,4],cncjob:[],figur:[1,2],color:3,on_gerber_generate_noncopp:1,creat:[1,2,3,4],enlarg:3,param:[1,3,4],respect:2,throughout:1,backend:1,quit:1,becom:[1,2,3],convert_unit:[2,3],addition:3,been:1,mark:[],compon:1,json:[1,2,3,4],get_curr:[],toolbar:1,open_project:[1,4],subscrib:1,immedi:1,radio_set:1,gcode:3,imag:1,search:0,gap:3,on_file_savedefault:[1,4],coordin:[1,3],on_options_project2object:1,func:1,present:3,versioncheck:1,inhibit:1,therefor:[1,4],apparamet:3,look:3,align:1,properti:[1,3],alter:3,dest:1,defin:[1,3],"while":1,setup_ax:2,behavior:3,margin:3,region:3,propag:1,layer:1,readi:3,them:2,equal:3,itself:3,exterior:3,on_fileopengcod:1,"__init__":1,around:[1,3],get_bound:1,make_lowerleftlin:3,make:4,belong:3,same:[1,4],respresent:[3,4],complex:3,pad:3,descend:[2,3],tool_toler:3,complet:1,http:1,widget_nam:1,upon:[1,4],alert:1,initi:1,canva:[1,2],implement:2,polygon:[1,3],appropri:[1,3],off:1,center:[1,3],build_ui:2,well:3,inherit:4,without:1,on_file_new:1,thi:[1,2,3,4],choos:1,on_generate_paintarea:1,make_vectorlin:3,rout:1,latest:1,distanc:3,identifi:[3,4],crosshair_len:3,isolation_geometri:3,"true":[1,3],entri:1,rest:3,shape:[3,4],aspect:[1,2],linestr:3,flatcamgerb:[],speed:3,previous:4,now:1,on_tools_doublesid:1,field:1,trigger:[],point:[1,3],except:1,shortcut:1,add:[1,2],other:[1,3],board:1,appli:4,save:[1,3,4],pre_pars:3,take:[1,4],gcode_pars:3,format:2,read:[1,2,3,4],on_file_saveproject:1,background:2,press:1,height:3,mod:3,lost:3,specif:[1,2,3],ring:3,zoom:1,integ:3,instanci:3,collect:1,from_dict:3,necessari:1,either:1,exobj:3,on_clear_plot:1,page:[0,1],depend:[1,2,3],encount:4,right:1,int_digit:3,creation:[1,4],back:1,percentag:1,on_zoom_fit:1,radiobutton:1,"export":2,mirror:[1,3],set_form_item:[1,2],on_generate_excellon_cncjob:1,scale:[1,2,3],bottom:1,cut:[1,3],definit:3,overlap:3,on_update_plot:1,buffer_path:3,unit:[1,2,3],duplic:1,refer:4,machin:3,object:[],run:[1,3],usag:3,how:4,offset:[1,2,3],on_toggle_pointbox:1,don:[2,3],about:1,obj:1,file_chooser_save_act:1,on_generate_cncjob:1,side:1,degre:3,dialog:1,constructor:1,options_update_ignor:1,disabl:1,make_therm:3,on_about:1,except_curr:1,chooser:1,within:3,encod:[3,4],bound:[1,3],excellon:[],pute:1,accordingli:1,ymax:[1,3],wai:[3,4],area:[1,3],outer_dia_outer_r:3,transfer:1,n_vert:3,fast:3,make_geometri:3,start:[1,3],clear_poli:1,handler:1,interfac:1,includ:[3,4],fraction:3,on_canvas_configur:1,"function":[1,4],on_generate_isol:1,linear2gcod:3,form:[1,2,3,4],tupl:[2,3],on_offset_object:1,old_nam:1,set_progress_bar:1,line:[1,3],on_entry_eval_activ:1,info:1,made:3,attr:4,on_generate_gerber_bounding_box:1,cid:1,new_nam:1,access:1,maximum:1,tooldia:[2,3],record:1,limit:1,otherwis:[1,4],featur:3,buffered_path:3,evalu:3,"int":[1,3],request:1,dure:3,parser:3,aperture_pars:3,repres:[2,3],plot2:3,on_row_activ:1,exist:2,file:[1,3,4],doe:[1,3],mpl_disconnect:1,check:1,again:3,aplic:1,get_nam:1,titl:1,to_form:2,when:[1,3,4],detail:1,invalid:3,"default":[1,3,4],valid:1,bool:[1,2,3],get_by_nam:1,gline:3,ignor:[1,3],on_options_project2app:1,read_form_item:[1,2],on_list_selection_chang:1,on_tree_selection_chang:[],draw:[1,3],event_nam:1,disable_plot:1,eval:1,outdat:1,rule:3,geometr:[2,3],aperture_macro:3,on_filequit:1,scroll:1},objtypes:{"0":"py:module","1":"py:method","2":"py:class","3":"py:staticmethod","4":"py:attribute"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","class","Python class"],"3":["py","staticmethod","Python static method"],"4":["py","attribute","Python attribute"]},filenames:["index","app","flatcamobj","camlib","devman"],titles:["Welcome to FlatCAM’s documentation!","FlatCAM Application","FlatCAM Objects","Camlib","FlatCAM Developer Manual"],objects:{"":{camlib:[3,0,0,"-"],FlatCAM:[2,0,0,"-"]},"camlib.CNCjob":{scale:[3,1,1,""],polygon2gcode:[3,1,1,""],generate_from_excellon_by_tool:[3,1,1,""],linear2gcode:[3,1,1,""],pre_parse:[3,1,1,""],generate_from_excellon:[3,1,1,""],gcode_parse:[3,1,1,""],generate_from_geometry:[3,1,1,""],offset:[3,1,1,""],plot2:[3,1,1,""]},FlatCAM:{PlotCanvas:[1,2,1,""],FlatCAMGeometry:[2,2,1,""],App:[1,2,1,""],FlatCAMObj:[2,2,1,""],ObjectCollection:[1,2,1,""],FlatCAMExcellon:[2,2,1,""],FlatCAMGerber:[2,2,1,""],Measurement:[1,2,1,""],FlatCAMCNCjob:[2,2,1,""]},"FlatCAM.FlatCAMGerber":{convert_units:[2,1,1,""]},"camlib.Geometry":{convert_units:[3,1,1,""],scale:[3,1,1,""],to_dict:[3,1,1,""],bounds:[3,1,1,""],get_empty_area:[3,1,1,""],isolation_geometry:[3,1,1,""],from_dict:[3,1,1,""],clear_polygon:[3,1,1,""],offset:[3,1,1,""],size:[3,1,1,""]},"FlatCAM.App":{on_options_object2app:[1,1,1,""],on_about:[1,1,1,""],file_chooser_action:[1,1,1,""],on_canvas_configure:[1,1,1,""],on_zoom_in:[1,1,1,""],on_delete:[1,1,1,""],on_toggle_units:[1,1,1,""],on_closewindow:[1,1,1,""],on_click_over_plot:[1,1,1,""],on_row_activated:[1,1,1,""],on_fileopengerber:[1,1,1,""],on_zoom_out:[1,1,1,""],on_zoom_fit:[1,1,1,""],on_file_savedefaults:[1,1,1,""],on_generate_excellon_cncjob:[1,1,1,""],set_form_item:[1,1,1,""],plot_all:[1,1,1,""],read_form:[1,1,1,""],on_generate_isolation:[1,1,1,""],on_key_over_plot:[1,1,1,""],on_offset_object:[1,1,1,""],on_gerber_generate_noncopper:[1,1,1,""],on_scale_object:[1,1,1,""],new_object:[1,1,1,""],on_activate_name:[1,1,1,""],get_eval:[1,1,1,""],on_cb_plot_toggled:[1,1,1,""],on_update_plot:[1,1,1,""],save_project:[1,1,1,""],on_options_object2project:[1,1,1,""],setup_component_editor:[1,1,1,""],open_project:[1,1,1,""],on_options_update:[1,1,1,""],on_file_new:[1,1,1,""],on_options_app2object:[1,1,1,""],on_options_project2app:[1,1,1,""],read_form_item:[1,1,1,""],versionCheck:[1,1,1,""],on_toolbar_replot:[1,1,1,""],on_entry_eval_activate:[1,1,1,""],on_tools_doublesided:[1,1,1,""],on_file_openproject:[1,1,1,""],on_options_combo_change:[1,1,1,""],setup_obj_classes:[1,1,1,""],on_file_saveproject:[1,1,1,""],on_generate_gerber_bounding_box:[1,1,1,""],on_options_project2object:[1,1,1,""],on_eval_update:[1,1,1,""],on_toggle_pointbox:[1,1,1,""],on_file_saveprojectas:[1,1,1,""],info:[1,1,1,""],disable_plots:[1,1,1,""],on_options_app2project:[1,1,1,""],set_progress_bar:[1,1,1,""],on_file_saveprojectcopy:[1,1,1,""],on_create_mirror:[1,1,1,""],file_chooser_save_action:[1,1,1,""],on_excellon_tool_choose:[1,1,1,""],on_generate_cncjob:[1,1,1,""],on_clear_plots:[1,1,1,""],on_mouse_move_over_plot:[1,1,1,""],on_fileopengcode:[1,1,1,""],on_gerber_generate_cutout:[1,1,1,""],load_defaults:[1,1,1,""],populate_objects_combo:[1,1,1,""],on_create_aligndrill:[1,1,1,""],on_generate_paintarea:[1,1,1,""],get_radio_value:[1,1,1,""],on_filequit:[1,1,1,""],on_cncjob_exportgcode:[1,1,1,""],options2form:[1,1,1,""],on_fileopenexcellon:[1,1,1,""]},"camlib.Gerber":{parse_lines:[3,1,1,""],scale:[3,1,1,""],frac_digits:[3,4,1,""],mirror:[3,1,1,""],aperture_parse:[3,1,1,""],offset:[3,1,1,""],create_geometry:[3,1,1,""],parse_file:[3,1,1,""],do_flashes:[3,1,1,""],buffer_paths:[3,1,1,""],fix_regions:[3,1,1,""],get_bounding_box:[3,1,1,""],int_digits:[3,4,1,""]},"camlib.ApertureMacro":{make_geometry:[3,1,1,""],default2zero:[3,3,1,""],to_dict:[3,1,1,""],make_polygon:[3,3,1,""],make_vectorline:[3,3,1,""],from_dict:[3,1,1,""],make_moire:[3,3,1,""],make_outline:[3,3,1,""],make_circle:[3,3,1,""],make_thermal:[3,3,1,""],make_centerline:[3,3,1,""],parse_content:[3,1,1,""],append:[3,1,1,""],make_lowerleftline:[3,3,1,""]},"FlatCAM.FlatCAMGeometry":{plot:[2,1,1,""],scale:[2,1,1,""],offset:[2,1,1,""]},"FlatCAM.PlotCanvas":{on_mouse_move:[1,1,1,""],on_scroll:[1,1,1,""],adjust_axes:[1,1,1,""],on_key_down:[1,1,1,""],mpl_disconnect:[1,1,1,""],clear:[1,1,1,""],zoom:[1,1,1,""],connect:[1,1,1,""],new_axes:[1,1,1,""],auto_adjust_axes:[1,1,1,""],on_key_up:[1,1,1,""],mpl_connect:[1,1,1,""]},camlib:{Excellon:[3,2,1,""],ApertureMacro:[3,2,1,""],Geometry:[3,2,1,""],CNCjob:[3,2,1,""],Gerber:[3,2,1,""]},"camlib.Excellon":{parse_lines:[3,1,1,""],scale:[3,1,1,""],offset:[3,1,1,""],create_geometry:[3,1,1,""],mirror:[3,1,1,""],parse_file:[3,1,1,""]},"FlatCAM.FlatCAMObj":{read_form:[2,1,1,""],plot:[2,1,1,""],serialize:[2,1,1,""],deserialize:[2,1,1,""],build_ui:[2,1,1,""],to_form:[2,1,1,""],setup_axes:[2,1,1,""],set_form_item:[2,1,1,""],read_form_item:[2,1,1,""]},"FlatCAM.ObjectCollection":{set_active:[1,1,1,""],get_names:[1,1,1,""],change_name:[1,1,1,""],on_row_activated:[1,1,1,""],get_list:[1,1,1,""],set_list_selection:[1,1,1,""],on_list_selection_change:[1,1,1,""],get_by_name:[1,1,1,""],get_bounds:[1,1,1,""],append:[1,1,1,""]}},titleterms:{cncjob:3,process:4,flatcamgerb:2,app:1,indic:0,aperturemacro:3,tabl:0,excellon:3,serial:4,flatcam:[0,1,2,4],flatcamgeometri:2,develop:4,welcom:0,flatcamobj:2,gerber:3,camlib:3,document:0,flatcamcncjob:2,applic:1,option:4,object:2,flatcamexcellon:2,plotcanva:1,measur:1,manual:4,geometri:[3,4],objectcollect:1}}) \ No newline at end of file diff --git a/doc/source/app.rst b/doc/source/app.rst index 323ee535..70252c10 100644 --- a/doc/source/app.rst +++ b/doc/source/app.rst @@ -14,3 +14,15 @@ PlotCanvas .. autoclass:: PlotCanvas :members: + +ObjectCollection +~~~~~~~~~~~~~~~~ + +.. autoclass:: ObjectCollection + :members: + +Measurement +~~~~~~~~~~~ + +.. autoclass:: Measurement + :members: \ No newline at end of file diff --git a/recent.json b/recent.json index 7189b80d..a6a6aec4 100644 --- a/recent.json +++ b/recent.json @@ -1 +1 @@ -[{"kind": "gerber", "filename": "C:\\Users\\jpcaram\\Dropbox\\PhD\\PLLs\\RTWO\\Project Outputs for RTWO1\\PCB1.GBL"}, {"kind": "excellon", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\BLDC2003Through.drl"}, {"kind": "gerber", "filename": "C:\\Users\\jpcaram\\Dropbox\\PhD\\PLLs\\RTWO\\Project Outputs for RTWO1\\PCB1.GTL"}, {"kind": "gerber", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\BLDC_1303_Bottom.gbr"}, {"kind": "excellon", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\PlacaReles.drl"}, {"kind": "gerber", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\PlacaReles-F_Cu.gtl"}, {"kind": "gerber", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\Example1_copper_bottom.gbr"}, {"kind": "cncjob", "filename": "C:\\Users\\jpcaram\\Dropbox\\PhD\\PLLs\\RTWO\\RTWO1_CNC\\cutout1.gcode"}, {"kind": "project", "filename": "C:\\Users\\jpcaram\\Dropbox\\PhD\\PLLs\\RTWO\\RTWO1.fcproj"}, {"kind": "excellon", "filename": "C:\\Users\\jpcaram\\Dropbox\\PhD\\PLLs\\RTWO\\Project Outputs for RTWO1\\PCB1.TXT"}] \ No newline at end of file +[{"kind": "excellon", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\TFTadapter.drl"}, {"kind": "gerber", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\PlacaReles-F_Cu.gtl"}, {"kind": "excellon", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\PlacaReles.drl"}, {"kind": "excellon", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\BLDC2003Through.drl"}, {"kind": "gerber", "filename": "C:\\Users\\jpcaram\\Dropbox\\PhD\\PLLs\\RTWO\\Project Outputs for RTWO1\\PCB1.GTL"}, {"kind": "project", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\RTWO_fc5_3.fcproj"}, {"kind": "project", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\RTWO_fc5_2.fcproj"}, {"kind": "project", "filename": "C:\\Users\\jpcaram\\Dropbox\\CNC\\pcbcam\\test_files\\RTWO_fc5.fcproj"}, {"kind": "cncjob", "filename": "Z:\\CNC\\testpcb\\2\\noname-F_Cu_ISOLATION_GCODE3.ngc"}, {"kind": "cncjob", "filename": "C:\\Users\\jpcaram\\Dropbox\\PhD\\PLLs\\RTWO\\RTWO1_CNC\\iso_bottom1.gcode"}] \ No newline at end of file