From 43cf694aabdbd9666dd1593b816e76300d8cfd47 Mon Sep 17 00:00:00 2001 From: Juan Pablo Caram Date: Wed, 5 Mar 2014 19:30:14 -0500 Subject: [PATCH] Added multi-pass isolation capabilities. --- FlatCAM.py | 47 +- FlatCAM.ui | 3109 +++++++++++++----------- defaults.json | 2 +- doc/build/.doctrees/environment.pickle | Bin 22325 -> 10699 bytes doc/build/camlib.html | 6 +- doc/build/genindex.html | 493 +--- doc/build/index.html | 12 +- doc/build/objects.inv | Bin 1440 -> 550 bytes doc/build/py-modindex.html | 17 +- doc/build/search.html | 6 +- doc/build/searchindex.js | 2 +- doc/source/app.rst | 16 + 12 files changed, 1714 insertions(+), 1996 deletions(-) diff --git a/FlatCAM.py b/FlatCAM.py index 18e40a11..772406a2 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -233,7 +233,9 @@ class FlatCAMGerber(FlatCAMObj, Gerber): "mergepolys": True, "multicolored": False, "solid": False, - "isotooldia": 0.4 / 25.4, + "isotooldia": 0.016, + "isopasses": 1, + "isooverlap": 0.15, "cutoutmargin": 0.2, "cutoutgapsize": 0.15, "gaps": "tb", @@ -249,6 +251,8 @@ class FlatCAMGerber(FlatCAMObj, Gerber): "multicolored": "cb", "solid": "cb", "isotooldia": "entry_eval", + "isopasses": "entry_eval", + "isooverlap": "entry_eval", "cutoutmargin": "entry_eval", "cutoutgapsize": "entry_eval", "gaps": "radio", @@ -663,9 +667,9 @@ class App: self.plotcanvas.mpl_connect('motion_notify_event', self.on_mouse_move_over_plot) self.plotcanvas.mpl_connect('key_press_event', self.on_key_over_plot) - self.axes = self.plotcanvas.axes # TODO: Just for testing - self.figure = self.plotcanvas.figure # TODO: Just for testing - self.canvas = self.plotcanvas.canvas # TODO: Just for testing + # self.axes = self.plotcanvas.axes # TODO: Just for testing + # self.figure = self.plotcanvas.figure # TODO: Just for testing + # self.canvas = self.plotcanvas.canvas # TODO: Just for testing self.setup_tooltips() @@ -717,9 +721,9 @@ class App: self.plot_mousemove_subscribers = {} ## Tools ## - self.measure = Measurement(self.axes, self.plot_click_subscribers, - self.plot_mousemove_subscribers, - lambda: self.canvas.queue_draw()) + # self.measure = Measurement(self.axes, self.plot_click_subscribers, + # self.plot_mousemove_subscribers, + # lambda: self.canvas.queue_draw()) #### Initialization #### self.load_defaults() @@ -1900,6 +1904,7 @@ class App: :return: None """ + # Read options from file try: f = open("defaults.json") options = f.read() @@ -1916,9 +1921,11 @@ class App: self.info("ERROR: Failed to parse defaults file.") return + # Update options assert isinstance(defaults, dict) defaults.update(self.defaults) + # Save update options try: f = open("defaults.json", "w") json.dump(defaults, f) @@ -2218,17 +2225,25 @@ class App: gerb = self.get_current() gerb.read_form() - iso_name = gerb.options["name"] + "_iso" + dia = gerb.options["isotooldia"] + passes = int(gerb.options["isopasses"]) + overlap = gerb.options["isooverlap"] * dia - def iso_init(geo_obj, app_obj): - # Propagate options - geo_obj.options["cnctooldia"] = gerb.options["isotooldia"] + for i in range(passes): - geo_obj.solid_geometry = gerb.isolation_geometry(gerb.options["isotooldia"] / 2.0) - app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"]) + offset = (2*i + 1)/2.0 * dia - i*overlap + iso_name = gerb.options["name"] + "_iso%d" % (i+1) - # TODO: Do something if this is None. Offer changing name? - self.new_object("geometry", iso_name, iso_init) + # TODO: This is ugly. Create way to pass data into init function. + def iso_init(geo_obj, app_obj): + # Propagate options + geo_obj.options["cnctooldia"] = gerb.options["isotooldia"] + + geo_obj.solid_geometry = gerb.isolation_geometry(offset) + app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"]) + + # TODO: Do something if this is None. Offer changing name? + self.new_object("geometry", iso_name, iso_init) def on_generate_cncjob(self, widget): """ @@ -2680,7 +2695,7 @@ class App: """ # For key presses - self.canvas.grab_focus() + self.plotcanvas.canvas.grab_focus() try: print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % ( diff --git a/FlatCAM.ui b/FlatCAM.ui index b6f00225..bfb08c02 100644 --- a/FlatCAM.ui +++ b/FlatCAM.ui @@ -107,6 +107,1559 @@ THE SOFTWARE. False gtk-open + + False + + + True + True + never + in + + + True + False + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + False + + + True + False + share/geometry32.png + + + False + True + 0 + + + + + True + False + 3 + Geometry Object + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + False + 3 + Name: + + + False + True + 0 + + + + + True + True + + True + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + 0 + 3 + Plot Options: + + + + + + False + True + 2 + + + + + Plot + True + True + False + 0 + True + True + + + + False + True + 3 + + + + + Solid + True + True + False + 0 + True + + + False + True + 4 + + + + + Multi-colored + True + True + False + 0 + True + + + False + True + 5 + + + + + Update Plot + True + True + True + + + + + False + True + 6 + + + + + True + False + 5 + 0 + 3 + Create CNC Job: + + + + + + False + True + 7 + + + + + True + False + 2 + 4 + + + True + True + + True + + + + 1 + 0 + 1 + 1 + + + + + True + True + + True + + + + 1 + 1 + 1 + 1 + + + + + True + True + + True + + + + 1 + 2 + 1 + 1 + + + + + True + False + 1 + Cut Z: + + + 0 + 0 + 1 + 1 + + + + + True + False + 1 + Travel Z: + + + 0 + 1 + 1 + 1 + + + + + True + False + 1 + Feed rate: + + + 0 + 2 + 1 + 1 + + + + + True + False + 1 + Tool diam: + + + 0 + 3 + 1 + 1 + + + + + True + True + + True + + + + 1 + 3 + 1 + 1 + + + + + False + True + 8 + + + + + Generate + True + True + True + + + + + False + True + 9 + + + + + True + False + 5 + 0 + 3 + Paint Area: + + + + + + False + True + 10 + + + + + True + False + 2 + 5 + + + True + False + 1 + Tool diam: + + + 0 + 0 + 1 + 1 + + + + + True + True + + True + + + + 1 + 0 + 1 + 1 + + + + + True + False + 1 + Overlap: + + + 0 + 1 + 1 + 1 + + + + + True + True + + True + + + + 1 + 1 + 1 + 1 + + + + + True + False + 1 + Margin: + + + 0 + 2 + 1 + 1 + + + + + True + True + + True + + + + 1 + 2 + 1 + 1 + + + + + False + True + 11 + + + + + Generate + True + True + True + + + + + False + True + 12 + + + + + True + False + 3 + 0 + 3 + Scale: + + + + + + False + True + 13 + + + + + True + False + 3 + 3 + 3 + + + True + False + 1 + Factor: + + + False + True + 0 + + + + + True + True + + 1.0 + True + + + False + True + 1 + + + + + False + True + 14 + + + + + Scale + True + True + True + + + + + False + True + 15 + + + + + True + False + 3 + 0 + 3 + Offset: + + + + + + False + True + 16 + + + + + True + False + 3 + 3 + 3 + + + True + False + 1 + Offset Vector: + + + False + True + 0 + + + + + True + True + + (0.0, 0.0) + True + + + False + True + 1 + + + + + False + True + 17 + + + + + Offset + True + True + True + + + + + False + True + 18 + + + + + + + + + + + + + + + + + False + + + True + True + never + in + + + True + False + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + False + + + True + False + share/flatcam_icon32.png + + + False + True + 0 + + + + + True + False + 3 + Gerber Object + + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + False + 3 + Name: + + + False + True + 0 + + + + + True + True + + True + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + 5 + 0 + 3 + Plot Options: + + + + + + False + True + 2 + + + + + Plot + True + True + False + 0 + True + True + + + + False + True + 3 + + + + + Merge Polygons + True + True + False + 0 + True + True + + + False + True + 4 + + + + + Solid + True + True + False + 0 + True + + + False + True + 5 + + + + + Multi-colored + True + True + False + 0 + True + + + False + True + 6 + + + + + Update Plot + True + True + True + + + + + False + True + 7 + + + + + True + False + <b>Isolation Routing:</b> Cutting copper +around traces for electrical isolation. + 5 + 0 + 3 + Isolation Routing: + + + + + + False + True + 8 + + + + + True + False + 3 + 2 + + + True + False + Tool paths for isolation routing are drawn +at 1/2 of the tool diameter away from +polygons defined in Gerber. + 1 + 3 + Tool diam: + + + 0 + 0 + 1 + 1 + + + + + True + True + 2 + 2 + + 16 + True + + + + 1 + 0 + 1 + 1 + + + + + True + False + True + The number of toolwidths defining +the total width of the isolation. + 1 + 3 + Width (# passes): + + + 0 + 1 + 1 + 1 + + + + + True + False + True + How much (fraction of the tool diameter) +to overlap each pass. + 1 + 3 + Pass overlap: + + + 0 + 2 + 1 + 1 + + + + + True + True + 2 + 2 + + 16 + 0.15 + True + + + 1 + 2 + 1 + 1 + + + + + True + True + 2 + 2 + + 16 + 1 + True + + + 1 + 1 + 1 + 1 + + + + + False + True + 9 + + + + + Generate Geometry + True + True + True + Creates a geometry object with tool +paths for isolation routing. If more than +1 pass, wil create one object for each. + + + + + False + True + 10 + + + + + True + False + <b>Board cutout:</b> Cut around +the edge of the board. + 5 + 0 + 3 + Board cutout: + + + + + + False + True + 11 + + + + + True + False + 3 + + + True + False + Distance away from the rectangular edge +enclosing the board to generate the +cutting tool path. + 1 + Margin: + + + 0 + 0 + 1 + 1 + + + + + True + True + + 12 + True + + + + 1 + 0 + 1 + 1 + + + + + True + True + + 12 + True + + + + 1 + 1 + 1 + 1 + + + + + True + False + Length of the gaps along the toolpath. +These gaps are needed to hold the +board in place until the job is complete. + 1 + Gap size: + + + 0 + 1 + 1 + 1 + + + + + True + False + 1 + Gaps: + + + 0 + 2 + 1 + 1 + + + + + True + False + + + 2 (T/B) + True + True + False + Gaps are placed on the top and +bottom edges of the board cutout. + 8 + 0 + True + rb_2lr + + + False + True + 0 + + + + + 2 (L/R) + True + True + False + Gaps are placed on the left and right +edges of the board cutout. + 8 + 0 + True + True + + + False + True + 1 + + + + + 4 + True + True + False + Gaps are placed on the four edges +of the board cutout. + 0 + True + rb_2lr + + + False + True + 2 + + + + + 1 + 2 + 1 + 1 + + + + + False + True + 12 + + + + + Generate Geometry + True + True + True + Generates the Geometry object with +toolpaths for board cutout. + + + + + False + True + 13 + + + + + True + False + <b>Non-copper regions</b>: Use to create +geometry with polygons covering areas +without copper on the board. + +This can be used, for example, to clear all +copper from certain regions. + 5 + 0 + 3 + Non-copper regions: + + + + + + False + True + 14 + + + + + True + False + 4 + 4 + 1 + + + True + False + Defines how far from the rectangular box +enclosing the contents of the board the +edge of the board is. + +Copper-free areas will be located within +this boundary. + 1 + Boundary margin: + + + False + True + 0 + + + + + True + True + + 14 + True + + + + False + True + 1 + + + + + False + True + 15 + + + + + Generate Geometry + True + True + True + Creates a Geometry Object covering +areas without copper. + + + + + False + True + 16 + + + + + True + False + <b>Bounding Box:</b> A simple rectangular +boundary around the PCB contents. + 5 + 0 + 3 + Bounding box: + + + + + + False + True + 17 + + + + + True + False + 4 + 4 + 1 + + + True + False + Distance from the rectangular box enclosing +the PCB contents at which to draw the +bounding box. + 1 + Boundary margin: + + + False + True + 0 + + + + + True + True + + 14 + True + + + + False + True + 1 + + + + + False + True + 18 + + + + + Rounded corners + True + True + False + Whether to draw rounded corners on the bounding +box. The radius is the Boundary margin. + + 0 + True + + + False + True + 19 + + + + + Generate Bounding Box + True + True + True + Generates a Geometry object +with the bounding box. + + + + + False + True + 20 + + + + + True + False + <b>Scale:</b> Resizes the geometry +of the object. All sizes and coordinates +are multiplied by the given factor. + 3 + 0 + 3 + Scale: + + + + + + False + True + 21 + + + + + True + False + 3 + 3 + 3 + + + True + False + Factor by which to multiply all +geometrical dimensions. + 1 + Factor: + + + False + True + 0 + + + + + True + True + + 1.0 + True + + + False + True + 1 + + + + + False + True + 22 + + + + + Scale + True + True + True + Scales the geometry +of this object. + + + + + False + True + 23 + + + + + True + False + <b>Offset:</b> Shift the geometry of +this object by the specified (x, y) vector. + 3 + 0 + 3 + Offset: + + + + + + False + True + 24 + + + + + True + False + 3 + 3 + 3 + + + True + False + Vector by which to offset the geometry. +Format is <b>(x, y)</b>, where <b>x</b> and <b>y</b> are +decimal numbers representing the +distance in the corresponding axis. + 1 + Offset Vector: + + + False + True + 0 + + + + + True + True + + (0.0, 0.0) + True + + + False + True + 1 + + + + + False + True + 25 + + + + + Offset + True + True + True + Offset the geometry of +this object. + + + + + False + True + 26 + + + + + + + + + + + + + + + + + + + + + False @@ -1385,1486 +2938,6 @@ THE SOFTWARE. - - False - - - True - True - never - in - - - True - False - - - True - False - 5 - 5 - 5 - 5 - vertical - - - True - False - - - True - False - share/geometry32.png - - - False - True - 0 - - - - - True - False - 3 - Geometry Object - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - - - True - False - 3 - Name: - - - False - True - 0 - - - - - True - True - - True - - - - False - True - 1 - - - - - False - True - 1 - - - - - True - False - 0 - 3 - Plot Options: - - - - - - False - True - 2 - - - - - Plot - True - True - False - 0 - True - True - - - - False - True - 3 - - - - - Solid - True - True - False - 0 - True - - - False - True - 4 - - - - - Multi-colored - True - True - False - 0 - True - - - False - True - 5 - - - - - Update Plot - True - True - True - - - - - False - True - 6 - - - - - True - False - 5 - 0 - 3 - Create CNC Job: - - - - - - False - True - 7 - - - - - True - False - 2 - 4 - - - True - True - - True - - - - 1 - 0 - 1 - 1 - - - - - True - True - - True - - - - 1 - 1 - 1 - 1 - - - - - True - True - - True - - - - 1 - 2 - 1 - 1 - - - - - True - False - 1 - Cut Z: - - - 0 - 0 - 1 - 1 - - - - - True - False - 1 - Travel Z: - - - 0 - 1 - 1 - 1 - - - - - True - False - 1 - Feed rate: - - - 0 - 2 - 1 - 1 - - - - - True - False - 1 - Tool diam: - - - 0 - 3 - 1 - 1 - - - - - True - True - - True - - - - 1 - 3 - 1 - 1 - - - - - False - True - 8 - - - - - Generate - True - True - True - - - - - False - True - 9 - - - - - True - False - 5 - 0 - 3 - Paint Area: - - - - - - False - True - 10 - - - - - True - False - 2 - 5 - - - True - False - 1 - Tool diam: - - - 0 - 0 - 1 - 1 - - - - - True - True - - True - - - - 1 - 0 - 1 - 1 - - - - - True - False - 1 - Overlap: - - - 0 - 1 - 1 - 1 - - - - - True - True - - True - - - - 1 - 1 - 1 - 1 - - - - - True - False - 1 - Margin: - - - 0 - 2 - 1 - 1 - - - - - True - True - - True - - - - 1 - 2 - 1 - 1 - - - - - False - True - 11 - - - - - Generate - True - True - True - - - - - False - True - 12 - - - - - True - False - 3 - 0 - 3 - Scale: - - - - - - False - True - 13 - - - - - True - False - 3 - 3 - 3 - - - True - False - 1 - Factor: - - - False - True - 0 - - - - - True - True - - 1.0 - True - - - False - True - 1 - - - - - False - True - 14 - - - - - Scale - True - True - True - - - - - False - True - 15 - - - - - True - False - 3 - 0 - 3 - Offset: - - - - - - False - True - 16 - - - - - True - False - 3 - 3 - 3 - - - True - False - 1 - Offset Vector: - - - False - True - 0 - - - - - True - True - - (0.0, 0.0) - True - - - False - True - 1 - - - - - False - True - 17 - - - - - Offset - True - True - True - - - - - False - True - 18 - - - - - - - - - - - - - - - - - False - - - True - True - never - in - - - True - False - - - True - False - 5 - 5 - 5 - 5 - vertical - - - True - False - - - True - False - share/flatcam_icon32.png - - - False - True - 0 - - - - - True - False - 3 - Gerber Object - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - - - True - False - 3 - Name: - - - False - True - 0 - - - - - True - True - - True - - - False - True - 1 - - - - - False - True - 1 - - - - - True - False - 5 - 0 - 3 - Plot Options: - - - - - - False - True - 2 - - - - - Plot - True - True - False - 0 - True - True - - - - False - True - 3 - - - - - Merge Polygons - True - True - False - 0 - True - True - - - False - True - 4 - - - - - Solid - True - True - False - 0 - True - - - False - True - 5 - - - - - Multi-colored - True - True - False - 0 - True - - - False - True - 6 - - - - - Update Plot - True - True - True - - - - - False - True - 7 - - - - - True - False - <b>Isolation Routing:</b> Cutting copper -around traces for electrical isolation. - 5 - 0 - 3 - Isolation Routing: - - - - - - False - True - 8 - - - - - True - False - 3 - 2 - - - True - False - Tool paths for isolation routing are drawn -at 1/2 of the tool diameter away from -polygons defined in Gerber. - 1 - 3 - Tool diam: - - - 0 - 0 - 1 - 1 - - - - - True - True - 2 - 2 - - 16 - True - - - - 1 - 0 - 1 - 1 - - - - - False - True - 9 - - - - - Generate Geometry - True - True - True - Creates a geometry object with tool -paths for isolation routing. - - - - - False - True - 10 - - - - - True - False - <b>Board cutout:</b> Cut around -the edge of the board. - 5 - 0 - 3 - Board cutout: - - - - - - False - True - 11 - - - - - True - False - 3 - - - True - False - Distance away from the rectangular edge -enclosing the board to generate the -cutting tool path. - 1 - Margin: - - - 0 - 0 - 1 - 1 - - - - - True - True - - 12 - True - - - - 1 - 0 - 1 - 1 - - - - - True - True - - 12 - True - - - - 1 - 1 - 1 - 1 - - - - - True - False - Length of the gaps along the toolpath. -These gaps are needed to hold the -board in place until the job is complete. - 1 - Gap size: - - - 0 - 1 - 1 - 1 - - - - - True - False - 1 - Gaps: - - - 0 - 2 - 1 - 1 - - - - - True - False - - - 2 (T/B) - True - True - False - Gaps are placed on the top and -bottom edges of the board cutout. - 8 - 0 - True - rb_2lr - - - False - True - 0 - - - - - 2 (L/R) - True - True - False - Gaps are placed on the left and right -edges of the board cutout. - 8 - 0 - True - True - - - False - True - 1 - - - - - 4 - True - True - False - Gaps are placed on the four edges -of the board cutout. - 0 - True - rb_2lr - - - False - True - 2 - - - - - 1 - 2 - 1 - 1 - - - - - False - True - 12 - - - - - Generate Geometry - True - True - True - Generates the Geometry object with -toolpaths for board cutout. - - - - - False - True - 13 - - - - - True - False - <b>Non-copper regions</b>: Use to create -geometry with polygons covering areas -without copper on the board. - -This can be used, for example, to clear all -copper from certain regions. - 5 - 0 - 3 - Non-copper regions: - - - - - - False - True - 14 - - - - - True - False - 4 - 4 - 1 - - - True - False - Defines how far from the rectangular box -enclosing the contents of the board the -edge of the board is. - -Copper-free areas will be located within -this boundary. - 1 - Boundary margin: - - - False - True - 0 - - - - - True - True - - 14 - True - - - - False - True - 1 - - - - - False - True - 15 - - - - - Generate Geometry - True - True - True - Creates a Geometry Object covering -areas without copper. - - - - - False - True - 16 - - - - - True - False - <b>Bounding Box:</b> A simple rectangular -boundary around the PCB contents. - 5 - 0 - 3 - Bounding box: - - - - - - False - True - 17 - - - - - True - False - 4 - 4 - 1 - - - True - False - Distance from the rectangular box enclosing -the PCB contents at which to draw the -bounding box. - 1 - Boundary margin: - - - False - True - 0 - - - - - True - True - - 14 - True - - - - False - True - 1 - - - - - False - True - 18 - - - - - Rounded corners - True - True - False - Whether to draw rounded corners on the bounding -box. The radius is the Boundary margin. - - 0 - True - - - False - True - 19 - - - - - Generate Bounding Box - True - True - True - Generates a Geometry object -with the bounding box. - - - - - False - True - 20 - - - - - True - False - <b>Scale:</b> Resizes the geometry -of the object. All sizes and coordinates -are multiplied by the given factor. - 3 - 0 - 3 - Scale: - - - - - - False - True - 21 - - - - - True - False - 3 - 3 - 3 - - - True - False - Factor by which to multiply all -geometrical dimensions. - 1 - Factor: - - - False - True - 0 - - - - - True - True - - 1.0 - True - - - False - True - 1 - - - - - False - True - 22 - - - - - Scale - True - True - True - Scales the geometry -of this object. - - - - - False - True - 23 - - - - - True - False - <b>Offset:</b> Shift the geometry of -this object by the specified (x, y) vector. - 3 - 0 - 3 - Offset: - - - - - - False - True - 24 - - - - - True - False - 3 - 3 - 3 - - - True - False - Vector by which to offset the geometry. -Format is <b>(x, y)</b>, where <b>x</b> and <b>y</b> are -decimal numbers representing the -distance in the corresponding axis. - 1 - Offset Vector: - - - False - True - 0 - - - - - True - True - - (0.0, 0.0) - True - - - False - True - 1 - - - - - False - True - 25 - - - - - Offset - True - True - True - Offset the geometry of -this object. - - - - - False - True - 26 - - - - - - - - - - - - - - - - - - - - - 600 400 @@ -3604,6 +3677,82 @@ polygons defined in Gerber. 1 + + + True + False + True + The number of toolwidths defining +the total width of the isolation. + The number of toolwidths defining +the total width of the isolation. + 1 + 3 + Width (# passes): + + + 0 + 1 + 1 + 1 + + + + + True + False + True + How much (fraction of the tool diameter) +to overlap each pass. + How much (fraction of the tool diameter) +to overlap each pass. + 1 + 3 + Pass overlap: + + + 0 + 2 + 1 + 1 + + + + + True + True + 2 + 2 + + 16 + True + + + + 1 + 1 + 1 + 1 + + + + + True + True + 2 + 2 + + 16 + True + + + + 1 + 2 + 1 + 1 + + False diff --git a/defaults.json b/defaults.json index 99af6afd..433b5513 100644 --- a/defaults.json +++ b/defaults.json @@ -1 +1 @@ -{"geometry_paintoverlap": 0.15, "geometry_plot": true, "gerber_isotooldia": 0.016, "gerber_plot": true, "gerber_mergepolys": true, "gerber_cutoutgapsize": 0.15, "geometry_feedrate": 3.0, "units": "IN", "excellon_travelz": 0.1, "gerber_multicolored": false, "gerber_solid": true, "excellon_plot": true, "excellon_feedrate": 5.0, "cncjob_tooldia": 0.016, "geometry_travelz": 0.1, "gerber_cutoutmargin": 0.2, "excellon_solid": false, "geometry_paintmargin": 0.01, "geometry_cutz": -0.002, "gerber_noncoppermargin": 0.0, "gerber_gaps": "4", "excellon_multicolored": false, "gerber_bboxmargin": 0.0, "cncjob_plot": true, "excellon_drillz": -0.1, "gerber_bboxrounded": false, "geometry_multicolored": false, "geometry_cnctooldia": 0.016, "geometry_solid": false, "geometry_painttooldia": 0.0625} \ No newline at end of file +{"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, "geometry_painttooldia": 0.0625, "gerber_gaps": "4", "excellon_multicolored": false, "gerber_bboxmargin": 0.0, "cncjob_plot": true, "gerber_cutoutgapsize": 0.15, "gerber_isooverlap": 0.17, "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/environment.pickle b/doc/build/.doctrees/environment.pickle index 4099dc736d4076184f4e5e987a579cd24b768e6a..ee78c221c9f7e20e0d5f15133cffd66b14d83cfd 100644 GIT binary patch literal 10699 zcmbVS37Fi(l^$Pnv}bG&=Dys<1M~pX1H>F5CSZ?^V=d#_$qz0&PV3%c9lrae;tBB?51IRxh=kFRkx)Y#1cm=4aBkn>#JHd(=uGK zybbg{)5=|gHd|{N%r?bVQ}=RW#pq$ttC!0a@bXN%T+X=$n)^ye_K5xpTc)*IVqhm5 zl7=+2YFV=mYO}7$@xGE+S(sYZ)6+u~gHt(_YL@2dTGOdC#E=2}D%R_n9!aq}5Nirk zD?nq~RbxgB>s3c5iQJ;?R1G($=yKvXNV7H&#~0Xu)DF6iFLgtlzK_#-Doc6Bm5kQ%iB_l zmq5-TCFjOKToTK9X@QTH_<1FMeu-aD;!*dPq5IXT?sruhhVHrIa&-ODKwLpxFZBLp z=ys#(mZQI^Ua)|ZS!P9SQe9seh?mD*UzJwT)hQKij`> zH4trkAYMVDrJ8p@qANQTajjqRS+43dHTbvYX<{-EuPm@-u2&7jbp^Pu?bw!9F)TL_ zJ0WA!sfIIQ7hBny9cx!v&m8No8+Q0^H{VSSy{@52or~++B{cf1x6N)(foGYt=e*_U znq}n5`=n;O@L+iCZt2X-=EU9%NprStc%Jh8eQfYLr|MfqeutW?Z0@kQf$!t&h`4dC zayM5}@x6Q>TM-gWf#6jjm^va}O$68T>*23NuyU`GJilA38{#IAO@r*FBccQ{pY&aQ6^G(WlsBxz{H+5zj5z-Vf__EP#d9!8AOHEWWkW_QeV%%nbcm3H|m+aYfU0LZ3-=*~q|7TmV*ad>f&5e};4vbTaJl&B)Vq3sa&T8AHen(^C_s(U>ZJ zt!4nAdE6ClhCF5EwhYCzuX!2ziIW~fZSN3f(@@xi?8eYUblKJKgVQP4>-XhXlGNdW533-Y` zph$U5%4AWeG|x2|O|&4x@AO0ik%hGuM&!q8xHSXl2v;ihP_R;y%(Uw$%!u1EkW@&C z`UpeH?HRfbhY!P=)b#cgIt=Q}6q;}As#C_U&*cbgcVxJyY#mQ0&jEK#raLpVDa%C? zN9MRILzvQbY`K)b9m$ZtP|z{jGj}cnJRxnS_DoT6`R?wNu|%P|k7g)S5u>dTaSSvm zXSyKiHgYCx22w$?EpNFpTlO5s68B{KNSQuj(6SuwVsURL9Twj(jAA?TI^HZGuJ*8= zW1br=u?@7pK3Q^?N!JU+8&VB=s}+bh#tl9js#{J4GU=W);0$lV0Rbm~H?v-|iN)U) zZ{c*(cx%}FwhC>Q6lv9z;=ZY?Fz$&frkRT!!E~dgYf@`YZ$wTloD=WC;NKgF_Z8Tx)@+^54{q7@W)UJE zgb3KEzgp8_9>+P$+5H#d2cKh!3;nMc9-LW6NjSHO$KBRO5<|l*C61ZQvuUFX~-9 zIz@9Ls^zz)PeJ0bsWo_at*_bG>QyW!KS2f*kMl=aewS_JDI(@^%+sZ*c6E8Dmd75C zHhe`kbe-wa`l;E5m}Ve4)S}VJjn@6!Drr#vjKHMYDa)^28T4wniDu zCGXQi-d`$-FS9-vpPIy1z&NpKNb%K@_!=mbmB+=`Azs+EVZrQh9Py2S4LI<1X+o#s zoABsJnc`bheTk7+4*Pk-rY*KBo+^oNv*X%Hgc+}>`JO{g@*NyMC0N7Z#CQ3VYy}p1 zza_r6)34x|VtAT5&paK7?-%%Rzy||9gf$J@@>S7n)467oj(-ra)tLWf+i#X3rZmy^ z!$AB9u*s!-aB>+Rnq0y+O)l}-Flewhm#vA!E1S0RGgtgYApVjMm&9Kc(n36wO@BNaXGWeg zTsAwql>Q&;>=ApRCYX44N9-?Fg0Tc(RF#NQ!k{4@}MAD?djp}FQ|QK!jPw{0f!?;CZ`|!d`x!DI_l#f{!8lV*EqMo*o@78;ZXnIf%qTv%r}6+ zufmi3KrEd2->_wP-sr{uA>lz*`Ar~umh|+rg_lcIC2N}zPHK=#@v^-v#F~vfD<_xX z?dV~-9FIV*P<+C4kL;xi>u=8$9Fn875g%q@!pucdVfGkXPHXS6w3^sZa!56D_^DilVjx#5){zd@sLFiB zlEcbjyyWmld7J{SO#_c#7}%gb2zvrO;e_%;6asmYB9A&fnJSdCiM?^{1}vneZn$Hb zT^;kV#$j5&I0tQzaMa@|^jtS}90D}*Cd4ccX8DkrJQZ(`9G0iy5y;c=58vuS%SRd{ zv{En+eU-y8k(XUHY^Al zX%K%J;)r@r7C9TGK%S%Okyg)Dm28hA4eE!$1$vT2Mo|dld5S#3o==qyizM-3kaCR3 zG=`kVGV!57k`Vg~=-D*^D#!2|`Y+-U$Z`BrctFOpLDGc2oJ0tDVca-BNXU!SOQraW zQ4Hiu@E?bYjjGaJ4VS3*G#xHg;LFnB%e#Q79~$IK=}G#(0);@nOp!-A+@vb=JEm?3 zdnG+d|1U=&kXI@42zxbEI`rSaAxhB2)8GZ{KoU_mo9Veu?NfGzDL%OcP0;-W9)aA7 zfAW3W$g~Nz5oV-8f`xt_>%S2yn{v{rm~xFGR9?It#X!CS|FH#jsLFgrw3T=*-YX?e zD(oxM*z3ArsT&&IPI{6OccBo--HJR?;`LPNP~!3pTFZQ~3M6T$i#_yQr#2XyckhsU zQHApM;SorNe^MUZ%h1akh<2nw!gN(!Bh(g!<&J25qXJPZ2?;2^gl*VUQB;`%K_Fj+ z|5&xJR+X%3A@ognq3kiOK&3S3H4B198pNLlT&5>E^=nZGq^8ItomNyO+u=xqx*@Di zPqIf9g+LmLJi^wf(qWGzs0=M0R7etHU#I7S*BX-J73^Z-5y%Gqp(KvGj0Q>aLdHnx zdXv)ie#OQL*@O|isVY~O_~sJdQsNUO9$sQd8!wcu9R+HoL1IDBNQ3y(fFwOh*DeZy z^b~odFJD!%9gZ}p8^Ru-C+Yei3W1zaDGZ zdPd%Y7O40T9)S$-Pb$XcOoIfN7qf4T8yAS#x5Y10VdVC>v14K!R?Rq2sKa%%v66S7 zHIR4WAKUs8A1v{q65mvkcTr0LhkRruEJGeaRb6w1r;U6e%)^YT^mJGr3tzDwPtFmz zp)i#BYNw6z1(mYSn|3~=9p%S}{O*K&J;=jMd|?#i>OKoMBw;EmAKrzG^8JK5nxG0m zb!4a)14{xQ%Yf4f+Qq=L1imK$Q>HFXwl4;35%AswI0|6r_03}FDxqJOpvQoof6uWP zhX!$YeZpZqIE2Z{#ZU(b^@aqM2TElL7X#f*pf@I0&JtxdppCO~qw1^l|hn0FE8T?vM?nq=d<3we-m?@n+e zWQe0oq1zo;Bj9@yAYG2kpGF-r-cFGBCJ>6F?L_?ozAcFSeF^z`kk3;?jBm%$TL|@F zf+A}#sEB#UBZPc^f;=ZiW>ql{>Jjt<2{aFARvGg^M+x*$0-}i?-V`jLj6+2H!GxIX zl)80J*(qYt)(0oxhZ5j80T;Z<=+0w~cs!i&xU4IW_H9UaUiT2M4=23l%Tte*#_l{U z;_;D$2icfx)V}KLjtmI-(FD2R)XHe^X2Lv@V93+eRZjPA?j^{h2}HS4`qsZY)FkL* z36xfi_-3{{Y=&TuC$NR4V`f}+f_w}R17BikmZcKC@(DBq^5evb4{zW6Kt~ripJNWn@PWzQzq&kgbxMM-?zHAu>3~O=)Qs(qkieFK= z9;k2O8eZVw?h~JxdT~0IGvMR<~w5b4XvyMIX!E7!vGN?{o4qV1r%v zXYmN+=kSjYk1#Cxc@*(6Ob&Np%@%IsbMgylVdqa53R|~rVcQSw*m=#aLpN^TvvbGJ z?T5DQ*|TfUp}pH~*tTce==e<+j%_SWkIF9sG1)V>M}CQ*{Uln=w{`htROyCb8NNr9 zUqOW zzC}`kBmFGD2J)k9m1(zpe5YgMyBFw(4ftMd?D8?!tjn*1z-MbzauRn67`?h3l;1#m zAis(K0)Gz4e)%mF`7qM^@+m4kOKsnd+rC4kXQ=JFaohJ$!es}tnq{~`n2dGh(`dzg lM;YHCv`l?}*{s_RRQ`Q}(aop)0ZMG394qXHs6%1J-vTWyZ`%L> literal 22325 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 Zk!jH9M)1u$A64-T!Nh5Vj}xre_dj7oXDt8# diff --git a/doc/build/camlib.html b/doc/build/camlib.html index a4647a5d..f02aa0b4 100644 --- a/doc/build/camlib.html +++ b/doc/build/camlib.html @@ -83,7 +83,11 @@ diff --git a/doc/build/genindex.html b/doc/build/genindex.html index 634aa722..a710b245 100644 --- a/doc/build/genindex.html +++ b/doc/build/genindex.html @@ -82,7 +82,11 @@ @@ -128,38 +132,19 @@ | G | I | L - | M - | N | O | P - | R | S | T - | V - | Z

A

-
-
adjust_axes() (FlatCAM.PlotCanvas method) -
- -
aperture_parse() (camlib.Gerber method)
-
- -
App (class in FlatCAM) -
- - -
auto_adjust_axes() (FlatCAM.PlotCanvas method) -
-
@@ -170,18 +155,10 @@
bounds() (camlib.Geometry method)
- -
buffer_paths() (camlib.Gerber method) -
-
-
build_list() (FlatCAM.App method) -
- - -
build_ui() (FlatCAM.FlatCAMObj method) +
buffer_paths() (camlib.Gerber method)
@@ -195,10 +172,6 @@ -
clear() (FlatCAM.PlotCanvas method) -
- -
clear_polygon() (camlib.Geometry method)
@@ -209,19 +182,9 @@
-
connect() (FlatCAM.PlotCanvas method) -
- -
convert_units() (camlib.Geometry method)
-
- -
(FlatCAM.FlatCAMGerber method) -
- -
create_geometry() (camlib.Gerber method)
@@ -233,12 +196,6 @@ - -
-
deserialize() (FlatCAM.FlatCAMObj method) -
- -
-
do_flashes() (camlib.Gerber method)
@@ -259,47 +216,15 @@ - + + -
-
file_chooser_action() (FlatCAM.App method) -
- - -
file_chooser_save_action() (FlatCAM.App method) -
- -
fix_regions() (camlib.Gerber method)
-
FlatCAM (module), [1] -
- - -
FlatCAMCNCjob (class in FlatCAM) -
- - -
FlatCAMExcellon (class in FlatCAM) -
- -
- -
FlatCAMGeometry (class in FlatCAM) -
- - -
FlatCAMGerber (class in FlatCAM) -
- - -
FlatCAMObj (class in FlatCAM) -
- -
frac_digits (camlib.Gerber attribute)
+
from_dict() (camlib.Geometry method)
@@ -326,6 +251,8 @@
generate_from_geometry() (camlib.CNCjob method)
+
Geometry (class in camlib)
@@ -334,28 +261,14 @@
Gerber (class in camlib)
-
get_bounding_box() (camlib.Gerber method)
-
get_current() (FlatCAM.App method) -
- -
get_empty_area() (camlib.Geometry method)
- -
get_eval() (FlatCAM.App method) -
- - -
get_radio_value() (FlatCAM.App method) -
-
@@ -363,10 +276,6 @@ - -
-
info() (FlatCAM.App method) -
- -
int_digits (camlib.Gerber attribute)
@@ -386,38 +295,6 @@
linear2gcode() (camlib.CNCjob method)
-
- -
load_defaults() (FlatCAM.App method) -
- -
- -

M

- - -
- -
mpl_connect() (FlatCAM.PlotCanvas method) -
- -
- -

N

- - -
- -
new_axes() (FlatCAM.PlotCanvas method) -
- -
- -
new_object() (FlatCAM.App method) -
-
@@ -430,10 +307,6 @@
-
(FlatCAM.FlatCAMGeometry method) -
- -
(camlib.Excellon method)
@@ -446,236 +319,6 @@
- -
on_about() (FlatCAM.App method) -
- - -
on_activate_name() (FlatCAM.App method) -
- - -
on_canvas_configure() (FlatCAM.App method) -
- - -
on_cb_plot_toggled() (FlatCAM.App method) -
- - -
on_clear_plots() (FlatCAM.App method) -
- - -
on_click_over_plot() (FlatCAM.App method) -
- - -
on_closewindow() (FlatCAM.App method) -
- - -
on_cncjob_exportgcode() (FlatCAM.App method) -
- - -
on_create_aligndrill() (FlatCAM.App method) -
- - -
on_create_mirror() (FlatCAM.App method) -
- - -
on_delete() (FlatCAM.App method) -
- - -
on_entry_eval_activate() (FlatCAM.App method) -
- - -
on_eval_update() (FlatCAM.App method) -
- - -
on_excellon_tool_choose() (FlatCAM.App method) -
- - -
on_file_new() (FlatCAM.App method) -
- - -
on_file_openproject() (FlatCAM.App method) -
- - -
on_file_savedefaults() (FlatCAM.App method) -
- - -
on_file_saveproject() (FlatCAM.App method) -
- - -
on_file_saveprojectas() (FlatCAM.App method) -
- - -
on_file_saveprojectcopy() (FlatCAM.App method) -
- - -
on_fileopenexcellon() (FlatCAM.App method) -
- - -
on_fileopengcode() (FlatCAM.App method) -
- - -
on_fileopengerber() (FlatCAM.App method) -
- - -
on_filequit() (FlatCAM.App method) -
- - -
on_generate_cncjob() (FlatCAM.App method) -
- - -
on_generate_excellon_cncjob() (FlatCAM.App method) -
- - -
on_generate_gerber_bounding_box() (FlatCAM.App method) -
- - -
on_generate_isolation() (FlatCAM.App method) -
- -
- -
on_generate_paintarea() (FlatCAM.App method) -
- - -
on_gerber_generate_cutout() (FlatCAM.App method) -
- - -
on_gerber_generate_noncopper() (FlatCAM.App method) -
- - -
on_key_over_plot() (FlatCAM.App method) -
- - -
on_mouse_move() (FlatCAM.PlotCanvas method) -
- - -
on_mouse_move_over_plot() (FlatCAM.App method) -
- - -
on_offset_object() (FlatCAM.App method) -
- - -
on_options_app2object() (FlatCAM.App method) -
- - -
on_options_app2project() (FlatCAM.App method) -
- - -
on_options_combo_change() (FlatCAM.App method) -
- - -
on_options_object2app() (FlatCAM.App method) -
- - -
on_options_object2project() (FlatCAM.App method) -
- - -
on_options_project2app() (FlatCAM.App method) -
- - -
on_options_project2object() (FlatCAM.App method) -
- - -
on_options_update() (FlatCAM.App method) -
- - -
on_row_activated() (FlatCAM.App method) -
- - -
on_scale_object() (FlatCAM.App method) -
- - -
on_scroll() (FlatCAM.PlotCanvas method) -
- - -
on_toggle_pointbox() (FlatCAM.App method) -
- - -
on_toggle_units() (FlatCAM.App method) -
- - -
on_toolbar_replot() (FlatCAM.App method) -
- - -
on_tools_doublesided() (FlatCAM.App method) -
- - -
on_tree_selection_changed() (FlatCAM.App method) -
- - -
on_update_plot() (FlatCAM.App method) -
- - -
on_zoom_fit() (FlatCAM.App method) -
- - -
on_zoom_in() (FlatCAM.App method) -
- - -
on_zoom_out() (FlatCAM.App method) -
- - -
open_project() (FlatCAM.App method) -
- - -
options2form() (FlatCAM.App method) -
-
@@ -703,83 +346,31 @@
-
plot() (FlatCAM.FlatCAMGeometry method) -
- -
plot2() (camlib.CNCjob method)
- -
plot_all() (FlatCAM.App method) -
-
-
PlotCanvas (class in FlatCAM) -
- -
polygon2gcode() (camlib.CNCjob method)
-
populate_objects_combo() (FlatCAM.App method) -
- -
pre_parse() (camlib.CNCjob method)
-

R

- - - -
- -
read_form() (FlatCAM.App method) -
- -
- -
(FlatCAM.FlatCAMObj method) -
- -
-
- -
read_form_item() (FlatCAM.App method) -
- -
- -
(FlatCAM.FlatCAMObj method) -
- -
-
-

S

- -
-
save_project() (FlatCAM.App method) -
- -
scale() (camlib.CNCjob method)
-
(FlatCAM.FlatCAMGeometry method) -
- -
(camlib.Excellon method)
@@ -792,47 +383,9 @@
- -
serialize() (FlatCAM.FlatCAMObj method) -
- - -
set_form_item() (FlatCAM.App method) -
- -
- -
(FlatCAM.FlatCAMObj method) -
- -
- -
set_list_selection() (FlatCAM.App method) -
- - -
set_progress_bar() (FlatCAM.App method) -
-
-
setup_axes() (FlatCAM.FlatCAMObj method) -
- - -
setup_component_editor() (FlatCAM.App method) -
- - -
setup_obj_classes() (FlatCAM.App method) -
- - -
setup_project_list() (FlatCAM.App method) -
- -
size() (camlib.Geometry method)
@@ -846,32 +399,6 @@
to_dict() (camlib.Geometry method)
-
- -
to_form() (FlatCAM.FlatCAMObj method) -
- -
- -

V

- - -
- -
versionCheck() (FlatCAM.App method) -
- -
- -

Z

- -
- -
zoom() (FlatCAM.PlotCanvas method) -
-
diff --git a/doc/build/index.html b/doc/build/index.html index c8fd7a9b..6c3d79de 100644 --- a/doc/build/index.html +++ b/doc/build/index.html @@ -82,7 +82,11 @@ @@ -124,7 +128,11 @@ diff --git a/doc/build/objects.inv b/doc/build/objects.inv index a6073de55d5f1c88beeb014df0388270b940a64e..c6a6fd8deb99d1c18c742ad96dafe77f6f297009 100644 GIT binary patch delta 439 zcmV;o0Z9I!3#J5+d4E(*OT;h`z56Q)dfnoB^eQ4A6u}=5(qx)O(o9LFvh~-SCUtc| zG_$udeJ^k3&But^dJTsrlD>7a1J~^K&9v;s?MFM%=q{Tl)U$);aSdG<@V}70q8p}bHM`xvzVHRv_fCP*aEkdSO>Znnq-I|ob^z}x_iER!>)}=CO7Kw zMxh3gwHT}k-D1$+WH!r08_`KhR-D&^4ri}9exy-@u(rGpI5IVJ8>}axt+A93o&{2 z!oH6{?5*l8Ye}ZSSdnkn(Z53=G5c+JD%I+1I{IBtDH;{Svn8|kPzKJTXPf1eDxZ0_ zW#W2d^O9R{(#L^8tv-EUXE{i9&T6+BMW4(Yn8Qt2y)fjP&>53()_k8HN%(PL>NmI6 h{9~q!c6}f1x}p8O9?>m=5FKan9n#I8_)pVJCrpR5*YN-V delta 1336 zcmV-81;_fP1fUC$d4E|=Z{s!)z2{dLXsB91CT=s8S@Pl{oBzUh?gS&t2%YSyiZOWsvwmf|Pb@Tl6 zhvxC++xN-R7N6mA+q~XezWwIh)>${;pTKY-h!~i#ePi>RAnvW)eA#eZmR~WqwGIq( z-X=q$g<%pjL?AE!X>HGxxxao4$)DgG@LS;_9i{_|tNn3eb{V|OoyO09Fj4{H;28ga zFtMD+a6WYD{KWE_1UZ9E=PXiPeD+QvW*3w#LB8h?q_Y9{v926{|er6J|6 z6IRw)vA_>doAKTb0r2Mmi|hd9q%>np2h%D<7O-eURMwC;?Q%WfhXJ1|!dN4$bKuEu zh_>tS#Lg-c8~Z`Fvo1LrPK~iEjYT#eE0}B58R?bQ)PK@<++&!vGPB}cslItyF-phP zEnohAd9}?p2(F=~$IjhyZAs~|pngKl+0NM)MxejzIrxF4`NGYC=MW0bLs+e|aSIhJ z{->ryPlZwnWVhN@)7a6)jn7Jpy@zel_b; zipeqBC4cLR-XC)^fJsOs^n=6{%oyvlX=Vx#@CLD{5v$hhBMaJvj-# zk8E-2<5J`=YK6-4qOlP0xO$RPd4THM~f1B zw{4Ss4YoIf(lXN-ZM}i_)%VW<@(ecHI%VroT2{wNTLd!+Egy7+UQ05qL6zrW8BnH_j#*$*b*gN{WAv&S zFtW=YF2L=Qi*InG=(CB3muWB zaf`f&@K89Mew1+%EBsYA!YT1q-91PNZJSJZ+*iS$x9?||mE-_EIw8yl8eYT>v4=k4 zb%~$nnJE0a=;f{HC)NHVM@#5H9&4vcI)4an2}9aR8~GZ|ej*PK@HqmHbSEou>=ErZ zM9WA5@X}#yf`D$m>_NQMUGubxJpB;rW933X;NgZ?KU17f)*cNx)%CaXr5~AW*5$IHVP+-ez{0*nqcU-k*0_=Kdh1V4P_mev_qpIC`rM^tU=Q7 zU3-%`UI||JBW>VcoAoCUw%?)!r3xG z530)7d@ql6RR=QZXtmXm4F4MxS%3W{&+cALkp?{KPV4uyv$4ff{fa)F^CVK%>ijX?h%PT@;<;8}iY5;PBXY>c?kH|j$=ZO0)!TUpfi;{sXe-lN zx;P=%)H#CmZwo%J46s;OMnS^$d^X@{H`PS@_Ylfs%~=Af#JPBC~7hB2&mlc&3y uvdeP1M&8c8i>Mj#%3bOs3ag}egxQLl(bQL2VI+austyU|zTyAN=
  • Camlib
  • FlatCAM Objects
  • -
  • FlatCAM Application
  • +
  • FlatCAM Application +
  • @@ -125,8 +129,7 @@

    Python Module Index

    - c | - f + c
    @@ -138,14 +141,6 @@ - - - - -
    camlib
     
    - f
    - FlatCAM -
    diff --git a/doc/build/search.html b/doc/build/search.html index e7b56f06..37fd385e 100644 --- a/doc/build/search.html +++ b/doc/build/search.html @@ -89,7 +89,11 @@ diff --git a/doc/build/searchindex.js b/doc/build/searchindex.js index 002ff443..e04bdf17 100644 --- a/doc/build/searchindex.js +++ b/doc/build/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{represent:2,all:[1,2,3],code:[1,2,3],whatev:1,toolpath:3,replot:1,focus:1,follow:3,on_key_over_plot:1,whose:1,get_ev:1,on_options_upd:1,flash:3,gerber:[1,2,3],program:1,text:[1,3],plot_al:1,geom:3,cnc:[1,3],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],item:1,vector:[1,2,3],specal:1,round:[1,3],get_radio_valu:1,create_geometri:3,natur:3,dimens:[2,3],zero:3,pass:[1,3],rectangular:3,click:1,append:3,index:0,load_default:1,new_ax:1,neg:[1,3],current:1,delet:1,version:[1,2,3],"new":[1,2],method:[1,2,3],movement:1,widget:1,flatcamgeometri:[1,2],gener:[1,2,3],new_object:1,matplotlib:[1,2,3],adjust_ax:1,on_create_aligndril:1,path:[1,3],along:3,do_someth:3,modifi:[1,2],valu:[1,3],box:[1,3],convert:[2,3],on_file_saveprojectcopi:1,action:1,chang:[1,3],on_activate_nam:1,on_options_object2app:1,diamet:3,via:1,app:[1,2],on_fileopengerb:1,filenam:[1,3],ymin:[1,3],select:1,frac_digit:[1,3],plot:[1,2,3],from:[1,2,3],describ:3,doubl:1,regist:1,setup_component_editor:1,call:[1,3],flash_geometri:3,type:[1,2,3],start:1,toggl:1,more:3,on_toolbar_replot:1,on_delet:1,combo:1,on_gerber_generate_cutout:1,parse_fil:3,known:[1,3],hole:1,must:[1,3],on_file_openproject:1,none:[1,2,3],left:1,ser_attr:3,work:3,uniqu:1,gtext:3,can:[1,2,3],drill:[2,3],z_move:[2,3],fetch:2,overrid:[2,3],polygon2gcod:3,give:3,process:[1,3],share:1,indic:3,stroke:3,minimum:1,tab:1,xmin:[1,3],serial:2,z_cut:[2,3],alwai:3,surfac:3,hadler:1,fix_region:3,write:3,fals:3,circular:3,b5ab3a:3,resourc:1,after:1,befor:1,plane:3,saepar:1,setup_obj_class:1,data:1,subsequ:1,entry_text:1,correspond:1,element:3,callback:1,"switch":1,maintain:1,enter:1,on_file_saveprojecta:1,travel:3,checkbox:1,over:1,through:1,affect:3,on_excellon_tool_choos:1,paramet:[1,2,3],fit:1,save_project:1,chosen:1,fix:3,gtk:1,set_list_select:1,window:1,html:1,pcb:1,on_options_app2object:1,main:[1,3],pixel:1,on_zoom_out:1,non:3,"float":[1,2,3],"return":[1,2,3],thei:[2,3],handl:[1,2],rectangl:3,number:[1,3],vect:[2,3],build_list:1,project_filenam:1,choic:1,name:[1,2,3],separ:[1,3],solid_geometri:3,each:3,found:3,updat:1,gui:[1,2],read_form:[1,2],parse_lin:3,on_closewindow:1,continu:1,connect:1,event:1,out:1,variabl:1,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:[1,2],linear:3,insid:3,precaut:1,given:[1,2,3],flatcamexcellon:[1,2],base:[1,2],dictionari:[1,2,3],org:1,care:1,generate_from_geometri:3,thread:1,launch:1,success:1,motion:1,turn:1,notebook:1,place:1,geometri:[1,2,3],treeselect:1,onto:3,user:[1,2],origin:[1,3],copper:1,on_zoom_in:1,arrai:3,file_chooser_act:1,restrict:1,mai:1,done:[1,3],overwrit:3,thick:3,open:1,size:[1,3],differ:3,on_toggle_unit:1,associ:[1,2,3],interact:2,flatcamobj:[1,2],attach:[1,2],store:3,editor:1,option:[1,2,3],tool:[1,3],copi:[1,2,3],specifi:[1,2,3],get_empty_area:3,generate_from_excellon:3,part:[2,3],pars:3,get_bounding_box:3,kind:[1,2,3],whenev:1,tree:1,entry_ev:1,project:1,str:[1,2,3],entri:1,posit:3,"function":1,ani:[1,3],compon:1,do_flash:3,have:[1,3],inform:1,self:[1,2,3],note:1,also:3,on_options_object2project:1,build:[1,2],which:[1,2,3],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,cover:[1,3],on_mouse_move_over_plot:1,populate_objects_combo:1,axi:[1,3],thicken:3,show:1,on_click_over_plot:1,apertur:3,radiu:3,syntax:1,radio:1,corner:[1,3],find:1,on_scale_object:1,onli:[1,3],slow:3,ratio:[1,2],menu:1,configur:[1,2],activ:1,state:1,comboboxtext:1,clipboard:1,dict:[1,2,3],factor:[1,2,3],elin:3,on_options_combo_chang:1,meant:1,hit:1,get:1,nativ:1,on_options_app2project:1,mpl_connect:1,multipolygon:3,bar:1,on_create_mirror:1,to_dict:3,xmax:[1,3],contain:1,comma:3,where:[1,3],dpi:3,set:[1,2,3],keyboard:1,startup:1,on_cncjob_exportgcod:1,displai:1,"4650bd":3,see:1,result:[1,3],arg:1,close:1,contour:3,statu:1,boundari:3,label:1,figur:[1,2],between:1,progress:1,attribut:3,accord:3,kei:[1,2,3],complement:3,isol:1,job:[1,3],entir:3,here:1,extent:1,toler:3,auto_adjust_ax:1,popul:[1,3],both:3,feedrat:[2,3],rtype:[1,3],options2form:1,alon:3,setup_project_list:1,on_generate_gerber_bounding_box:1,whole:[1,3],col:1,obj_dict:2,load:1,cncjob:[1,3],point:[1,3],color:3,on_gerber_generate_noncopp:1,enlarg:3,param:[1,3],respect:2,throughout:1,backend:1,quit:1,becom:[2,3],creat:[1,2,3],addition:3,been:1,mark:1,pute:1,json:[1,2],get_curr:1,toolbar:1,open_project:1,subscrib:1,immedi:1,radio_set:1,gcode:3,imag:1,search:0,on_file_savedefault:1,coordin:[1,3],on_options_project2object:1,func:1,present:3,versioncheck:1,inhibit:1,therefor:1,look:3,align:1,properti:[1,3],alter:3,dest:1,defin:[1,3],"while":1,setup_ax:2,margin:3,region:3,propag:1,layer:1,them:2,equal:3,exterior:3,on_fileopengcod:1,"__init__":1,around:[1,3],transpar:[2,3],same:1,respresent:3,instanc:1,descend:3,tool_toler:3,complet:1,http:1,widget_nam:1,upon:1,alert:1,initi:1,canva:1,appropri:[1,3],off:1,center:1,build_ui:2,well:3,"_app_":1,without:1,on_file_new:1,thi:[1,2,3],choos:1,on_generate_paintarea:1,rout:1,latest:1,distanc:3,identifi:3,isolation_geometri:3,"true":[1,3],flatcamgerb:[1,2],rest:3,shape:3,aspect:[1,2],linestr:3,speed:3,wether:3,cut:[1,3],on_tools_doublesid:1,trigger:1,shortcut:1,add:2,other:[1,3],board:1,save:[1,3],modul:0,pre_pars:3,take:1,gcode_pars:3,format:2,read:[1,2,3],on_file_saveproject:1,background:2,press:1,height:3,like:1,specif:[1,2,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,3],int_digit:3,creation:1,back:1,percentag:1,on_zoom_fit:1,radiobutton:1,"export":2,mirror:1,set_form_item:[1,2],on_generate_excellon_cncjob:1,scale:[1,2,3],bottom:1,definit:3,overlap:3,on_update_plot:1,buffer_path:3,unit:[1,2,3],duplic:1,machin:3,object:[1,3],run:1,usag:3,offset:[1,2,3],on_toggle_pointbox:1,about:1,actual:3,file_chooser_save_act:1,on_generate_cncjob:1,side:1,dialog:1,constructor:1,options_update_ignor:1,on_fileopenexcellon:1,on_about:1,chooser:1,within:3,encod:3,bound:[1,3],excellon:[1,2,3],loc:3,accordingli:1,ymax:[1,3],wai:3,area:[1,3],transfer:1,support:3,fast:3,width:3,clear_poli:1,handler:1,interfac:1,includ:3,fraction:3,on_canvas_configur:1,on_offset_object:1,on_generate_isol:1,linear2gcod:3,form:[1,2],tupl:[2,3],don:[2,3],line:[1,3],on_entry_eval_activ:1,info:1,made:3,"default":[1,3],access:1,maximum:1,tooldia:[2,3],record:1,limit:1,featur:3,buffered_path:3,convert_unit:[2,3],request:1,dure:3,parser:3,aperture_pars:3,repres:[2,3],plot2:3,on_row_activ:1,exist:2,file:[1,3],doe:[1,3],check:1,again:3,aplic:1,polygon:[1,3],titl:1,to_form:2,when:[1,3],detail:1,invalid:3,field:1,valid:1,bool:3,gline:3,ignor:1,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,plotcanva:1,outdat:1,geometr:[2,3],f0e24d:3,on_filequit:1,scroll:1},objtypes:{"0":"py:module","1":"py:method","2":"py:class","3":"py:attribute"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"]},filenames:["index","app","flatcamobj","camlib"],titles:["Welcome to FlatCAM’s documentation!","FlatCAM Application","FlatCAM Objects","Camlib"],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":{read_form:[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_options_object2app:[1,1,1,""],on_file_savedefaults:[1,1,1,""],plot_all:[1,1,1,""],set_form_item:[1,1,1,""],on_generate_excellon_cncjob:[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,""],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_tools_doublesided:[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_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,""],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,3,1,""],offset:[3,1,1,""],aperture_parse:[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,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,""],CNCjob:[3,2,1,""],Geometry:[3,2,1,""],Gerber:[3,2,1,""]},"camlib.Excellon":{parse_file:[3,1,1,""],parse_lines:[3,1,1,""],scale:[3,1,1,""],offset:[3,1,1,""]},"FlatCAM.FlatCAMObj":{read_form:[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:{applic:1,flatcam:[0,1,2],object:2,indic:0,camlib:3,tabl:0,document:0,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{represent:[],all:[1,3],code:3,whatev:[],toolpath:3,replot:[],focus:[],follow:3,pute:[],on_key_over_plot:[],whose:1,get_ev:[],on_options_upd:1,flash:3,gerber:3,program:[],text:3,plot_al:[],geom:3,cnc:3,digit:3,sourc:3,everi:3,string:3,far:[],mous:[],"5e6cff":3,obround:3,untouch:3,on_cb_plot_toggl:[],toolshap:3,button:[],list:3,iter:1,item:[],vector:3,specal:[],round:3,get_radio_valu:[],create_geometri:3,natur:3,dimens:3,zero:3,pass:3,rectangular:3,click:[],append:3,index:0,what:1,new_ax:[],neg:3,current:[],delet:[],version:3,"new":1,method:3,movement:[],widget:1,flatcamgeometri:[],gener:3,load_default:[],matplotlib:3,adjust_ax:[],on_create_aligndril:[],path:3,along:[1,3],do_someth:3,modifi:1,valu:[1,3],box:3,convert:3,on_file_saveprojectcopi:[],action:[],chang:[1,3],on_activate_nam:[],on_options_object2app:[],diamet:3,via:[],app:1,on_fileopengerb:[],filenam:3,ymin:3,select:[],frac_digit:3,plot:3,from:[1,3],describ:3,doubl:[],regist:[],setup_component_editor:[],call:[1,3],flash_geometri:3,suppos:1,type:[1,3],toggl:[],more:3,on_toolbar_replot:[],on_delet:[],combo:[],on_toggle_unit:[],on_gerber_generate_cutout:[],parse_fil:3,known:3,hole:[],must:[1,3],on_file_openproject:[],none:3,left:[],ser_attr:3,work:3,uniqu:[],gtext:3,can:[1,3],drill:3,z_move:3,fetch:1,overrid:3,overwritten:1,polygon2gcod:3,give:3,process:3,share:[],indic:[],stroke:3,minimum:[],tab:1,xmin:3,serial:[],z_cut:3,alwai:3,surfac:3,hadler:[],fix_region:3,write:3,fals:3,circular:3,b5ab3a:3,resourc:[],after:[],befor:[],plane:3,mai:[],setup_obj_class:[],data:[],subsequ:[],entry_text:[],correspond:[],element:[1,3],callback:[],"switch":[],maintain:[],enter:[],on_file_saveprojecta:[],travel:3,checkbox:[],over:1,through:1,affect:3,on_excellon_tool_choos:[],paramet:3,fit:[],save_project:[],chosen:[],fix:3,gtk:[],set_list_select:[],window:[],pcb:[],on_options_app2object:[],main:3,pixel:[],on_zoom_out:[],non:3,"float":3,"return":3,thei:[1,3],handl:[],rectangl:3,number:3,vect:3,build_list:[],project_filenam:[],choic:[],name:[1,3],edit:1,separ:3,solid_geometri:3,each:[1,3],found:3,updat:1,gui:1,read_form:[],parse_lin:3,on_closewindow:[],continu:[],connect:[],recogn:1,event:[],out:[],variabl:[],on_eval_upd:[],generate_from_excellon_by_tool:3,content:0,adjust:[],set_current_pag:[],clear_polygon:3,on_scrol:[],flatcamcncjob:[],linear:3,insid:3,precaut:[],differ:3,flatcamexcellon:[],base:[],dictionari:3,org:[],care:[],generate_from_geometri:3,thread:[],launch:[],success:[],motion:[],turn:[],notebook:[],place:1,geometri:3,treeselect:[],onto:3,first:1,origin:3,copper:[],on_zoom_in:[],arrai:3,independ:1,file_chooser_act:[],restrict:[],saepar:[],done:[1,3],overwrit:3,thick:3,open:1,size:3,given:3,start:[],associ:3,interact:[],flatcamobj:[],attach:[],store:[1,3],editor:[],option:[],tool:3,copi:3,specifi:3,get_empty_area:3,generate_from_excellon:3,part:3,pars:3,get_bounding_box:3,kind:[1,3],whenev:[],tree:[],entry_ev:[],project:1,str:3,entri:[],posit:3,thereaft:1,ani:3,do_flash:3,inherit:1,have:3,inform:[],self:3,note:[],also:3,on_options_object2project:[],build:[],which:[1,3],event_handl:[],interior:3,on_success:[],singl:3,simplifi:3,buffer:3,previou:[],on_mouse_mov:[],pair:3,alpha:3,segment:3,"class":3,set_progress_bar:[],appertur:3,clear:[],later:[],cover:3,on_mouse_move_over_plot:[],populate_objects_combo:[],axi:3,thicken:3,show:[],on_click_over_plot:[],apertur:3,radiu:3,syntax:1,radio:[],corner:3,find:[],on_scale_object:[],new_object:[],slow:3,ratio:[],menu:[],configur:[],activ:[],state:[],comboboxtext:[],clipboard:[],dict:3,factor:3,elin:3,on_options_combo_chang:[],meant:[],hit:[],get:1,nativ:[],on_options_app2project:[],mpl_connect:[],multipolygon:3,bar:[],on_create_mirror:[],to_dict:3,xmax:3,contain:1,comma:3,where:[1,3],dpi:3,user:[],set:3,keyboard:[],startup:1,on_cncjob_exportgcod:[],displai:[],"4650bd":3,see:[],result:3,arg:[],close:[],contour:3,statu:[],detect:1,boundari:3,label:[],written:1,between:[],progress:[],previous:1,attribut:3,accord:3,kei:[1,3],complement:3,isol:[],job:3,entir:3,here:[],extent:[],toler:3,auto_adjust_ax:[],popul:[1,3],both:3,feedrat:3,rtype:3,options2form:[],alon:3,setup_project_list:[],instanc:[],whole:3,col:[],obj_dict:[],load:[],cncjob:3,figur:[],color:3,on_gerber_generate_noncopp:[],enlarg:3,param:3,respect:[],throughout:[],backend:[],quit:[],becom:3,creat:3,addition:3,been:[],mark:[],compon:[],json:1,get_curr:[],toolbar:[],open_project:[],subscrib:[],immedi:[],radio_set:[],gcode:3,imag:[],search:0,on_file_savedefault:1,coordin:3,on_options_project2object:[],func:[],present:3,versioncheck:[],inhibit:[],onli:3,look:3,align:[],properti:3,alter:3,dest:[],defin:3,"while":[],setup_ax:[],margin:3,region:3,propag:[],layer:[],therefor:1,them:[],equal:3,exterior:3,on_fileopengcod:[],"__init__":[],around:3,transpar:3,same:1,respresent:3,html:[],descend:3,tool_toler:3,complet:[],http:[],widget_nam:[],upon:1,alert:[],initi:[],canva:[],appropri:3,off:[],center:[],build_ui:[],well:3,"_app_":1,without:[],on_file_new:[],thi:[1,3],choos:[],on_generate_paintarea:[],rout:[],latest:[],distanc:3,identifi:[1,3],isolation_geometri:3,"true":3,flatcamgerb:[],rest:3,shape:3,aspect:[],linestr:3,speed:3,wether:3,cut:3,on_tools_doublesid:[],trigger:[],point:3,shortcut:[],add:[],other:3,board:[],save:[1,3],modul:0,pre_pars:3,take:[],gcode_pars:3,format:[],read:[1,3],on_file_saveproject:[],background:[],press:[],height:3,like:[],specif:3,zoom:[],integ:3,noth:[],from_dict:3,necessari:[],either:[],exobj:3,on_clear_plot:[],page:0,depend:3,int_digit:3,creation:1,back:[],percentag:[],on_zoom_fit:[],radiobutton:[],"export":[],mirror:[],set_form_item:[],on_generate_excellon_cncjob:[],scale:3,bottom:[],definit:3,overlap:3,on_update_plot:[],buffer_path:3,unit:3,duplic:[],refer:1,machin:3,object:[],run:[],usag:3,how:1,offset:3,on_toggle_pointbox:[],about:[],actual:3,file_chooser_save_act:[],on_generate_cncjob:[],side:[],dialog:[],constructor:[],options_update_ignor:[],on_fileopenexcellon:[],on_about:[],chooser:[],within:3,encod:3,bound:3,excellon:3,loc:3,accordingli:[],ymax:3,wai:[1,3],area:3,transfer:[],support:3,fast:3,width:3,clear_poli:[],handler:[],interfac:[],includ:3,fraction:3,on_canvas_configur:[],"function":1,on_generate_isol:[],linear2gcod:3,form:[],tupl:3,on_offset_object:[],don:3,line:3,on_entry_eval_activ:[],info:[],made:3,on_generate_gerber_bounding_box:[],"default":[1,3],access:[],maximum:[],tooldia:3,record:[],limit:[],featur:3,buffered_path:3,convert_unit:3,request:[],dure:3,parser:3,aperture_pars:3,repres:3,plot2:3,on_row_activ:[],exist:[],file:[1,3],doe:3,check:[],again:3,aplic:[],polygon:3,titl:[],to_form:[],when:[1,3],detail:[],invalid:3,field:[],valid:[],bool:3,gline:3,ignor:[],on_options_project2app:[],read_form_item:[],deseri:3,on_tree_selection_chang:[],draw:3,event_nam:[],eval:[],plotcanva:[],outdat:[],geometr:3,f0e24d:3,on_filequit:[],scroll:[]},objtypes:{"0":"py:module","1":"py:method","2":"py:attribute","3":"py:class"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"],"3":["py","class","Python class"]},filenames:["index","app","flatcamobj","camlib"],titles:["Welcome to FlatCAM’s documentation!","FlatCAM Application","FlatCAM Objects","Camlib"],objects:{"":{camlib:[3,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,""]},"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,""]},"camlib.Gerber":{parse_lines:[3,1,1,""],scale:[3,1,1,""],frac_digits:[3,2,1,""],offset:[3,1,1,""],aperture_parse:[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,2,1,""]},camlib:{Excellon:[3,3,1,""],CNCjob:[3,3,1,""],Geometry:[3,3,1,""],Gerber:[3,3,1,""]},"camlib.Excellon":{parse_file:[3,1,1,""],parse_lines:[3,1,1,""],scale:[3,1,1,""],offset:[3,1,1,""]}},titleterms:{applic:1,flatcam:[0,1,2],object:2,indic:0,api:1,camlib:3,option:1,tabl:0,document:0,welcom:0}}) \ No newline at end of file diff --git a/doc/source/app.rst b/doc/source/app.rst index b9c3c4bc..346e8d29 100644 --- a/doc/source/app.rst +++ b/doc/source/app.rst @@ -1,6 +1,22 @@ FlatCAM Application =================== +Options +~~~~~~~ + +There are **Application Defaults**, **Project Options** and **Object Options** in FlatCAM. + +**Application Defaults** are stored in ``app.defaults``. This gets populated (updated) from the ``defaults.json`` file upon startup. These can be edited from the Options tab, where each widget calls ``app.on_options_update()`` if a change is detected. This function iterates over the keys of ``app.defaults`` and reads the GUI elements whose name is ``type + "_app_" key``. Therefore, for an option to be recognized, it must be added to ``defaults.json`` in the first place. When saving, done in ``app.on_file_savedefaults()``, the file is updated, not overwritten. + +**Project Options** inherit all options from Application Defaults upon startup. They can be changed thereafter from the UI or by opening a project, which contain previously saved Project Options. These are store in ``app.options`` and can be written and read from the Options tab in the same way as with Application defaults. + +**Object Options** for each object are inherited from Project Options upon creation of each new object. They can be modified independently from the Project's options thereafter through the UI, where the widget containing the option is identified by name: ``type + kind + "_" + option``. They are stored in ``object.options``. They are saved along the Project options when saving the project. + +The syntax of UI widget names contain a ``type``, which identifies what *type of widget* it is and how its value is supposed to be fetched, and a ``kind``, which refer to what *kind of FlatCAM Object* it is for. + +API +~~~ + .. automodule:: FlatCAM .. autoclass:: App