diff --git a/FlatCAM.py b/FlatCAM.py index 50fc24ea..c0df2460 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -490,6 +490,15 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): self.ser_attrs += ['options', 'kind'] def scale(self, factor): + """ + Scales all geometry by a given factor. + + :param factor: Factor by which to scale the object's geometry/ + :type factor: float + :return: None + :rtype: None + """ + if type(self.solid_geometry) == list: self.solid_geometry = [affinity.scale(g, factor, factor, origin=(0, 0)) for g in self.solid_geometry] @@ -497,6 +506,24 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): self.solid_geometry = affinity.scale(self.solid_geometry, factor, factor, origin=(0, 0)) + def offset(self, vect): + """ + Offsets all geometry by a given vector/ + + :param vect: (x, y) vector by which to offset the object's geometry. + :type vect: tuple + :return: None + :rtype: None + """ + + dx, dy = vect + + if type(self.solid_geometry) == list: + self.solid_geometry = [affinity.translate(g, xoff=dx, yoff=dy) + for g in self.solid_geometry] + else: + self.solid_geometry = affinity.translate(self.solid_geometry, xoff=dx, yoff=dy) + def convert_units(self, units): factor = Geometry.convert_units(self, units) @@ -1037,7 +1064,11 @@ class App: m_y = 25 # pixels width = xmax - xmin height = ymax - ymin - r = width / height + try: + r = width / height + except: + print "ERROR: Height is", height + return Fw, Fh = self.canvas.get_width_height() Fr = float(Fw) / Fh x_ratio = float(m_x) / Fw @@ -1281,6 +1312,19 @@ class App: ######################################## ## EVENT HANDLERS ## ######################################## + def on_offset_object(self, widget): + obj = self.get_current() + assert isinstance(obj, FlatCAMObj) + try: + vect = self.get_eval("entry_eval_" + obj.kind + "_offset") + except: + self.info("ERROR: Vector is not in (x, y) format.") + assert isinstance(obj, Geometry) + obj.offset(vect) + obj.plot(self.figure) + self.on_zoom_fit(None) + return + def on_cb_plot_toggled(self, widget): self.get_current().read_form() self.get_current().plot(self.figure) @@ -1943,7 +1987,8 @@ class App: def geo_init(geo_obj, app_obj): assert isinstance(geo_obj, FlatCAMGeometry) - gerber = app_obj.stuff[app_obj.selected_item_name] + #gerber = app_obj.stuff[app_obj.selected_item_name] # TODO: Remove. + gerber = app_obj.get_current() assert isinstance(gerber, FlatCAMGerber) gerber.read_form() bounding_box = gerber.solid_geometry.envelope.buffer(gerber.options["noncoppermargin"]) @@ -1967,7 +2012,8 @@ class App: # TODO: get from object margin = app_obj.get_eval("entry_eval_gerber_cutoutmargin") gap_size = app_obj.get_eval("entry_eval_gerber_cutoutgapsize") - gerber = app_obj.stuff[app_obj.selected_item_name] + #gerber = app_obj.stuff[app_obj.selected_item_name] + gerber = app_obj.get_current() minx, miny, maxx, maxy = gerber.bounds() minx -= margin maxx += margin @@ -2059,7 +2105,7 @@ class App: GLib.idle_add(lambda: app_obj.set_progress_bar(0.4, "Analyzing Geometry...")) # TODO: The tolerance should not be hard coded. Just for testing. - job_obj.generate_from_geometry(geometry, tolerance=0.001) + job_obj.generate_from_geometry(geometry, tolerance=0.0005) GLib.idle_add(lambda: app_obj.set_progress_bar(0.5, "Parsing G-Code...")) job_obj.gcode_parse() @@ -2129,7 +2175,7 @@ class App: f = open(filename, 'w') f.write(cncjob.gcode) f.close() - print "Saved to:", filename + self.info("Saved to: " + filename) self.file_chooser_save_action(on_success) diff --git a/FlatCAM.ui b/FlatCAM.ui index f4d8f815..eb47d239 100644 --- a/FlatCAM.ui +++ b/FlatCAM.ui @@ -744,6 +744,89 @@ THE SOFTWARE. 12 + + + True + False + 3 + 0 + 3 + Offset: + + + + + + False + True + 13 + + + + + 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 + 14 + + + + + Offset + True + True + True + + + + + False + True + 15 + + + + + + + + + + + @@ -1165,6 +1248,83 @@ THE SOFTWARE. 12 + + + True + False + 3 + 0 + 3 + Offset: + + + + + + False + True + 13 + + + + + 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 + 14 + + + + + Offset + True + True + True + + + + + False + True + 15 + + + + + @@ -1701,6 +1861,80 @@ THE SOFTWARE. 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 + + @@ -2383,6 +2617,86 @@ THE SOFTWARE. 23 + + + True + False + 3 + 0 + 3 + Offset: + + + + + + False + True + 24 + + + + + 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 + 25 + + + + + Offset + True + True + True + + + + + False + True + 26 + + + + + + + + diff --git a/camlib.py b/camlib.py index bdf9e018..4ebdecfc 100644 --- a/camlib.py +++ b/camlib.py @@ -43,6 +43,11 @@ class Geometry: """ Creates contours around geometry at a given offset distance. + + :param offset: Offset distance. + :type offset: float + :return: The buffered geometry. + :rtype: Shapely.MultiPolygon or Shapely.Polygon """ return self.solid_geometry.buffer(offset) @@ -107,6 +112,16 @@ class Geometry: """ return + def offset(self, vect): + """ + Offset the geometry by the given vector. Override this method. + + :param vect: (x, y) vector by which to offset the object. + :type vect: tuple + :return: None + """ + return + def convert_units(self, units): """ Converts the units of the object to ``units`` by scaling all @@ -379,16 +394,63 @@ class Gerber (Geometry): # Now buffered_paths, flash_geometry and solid_geometry self.create_geometry() + def offset(self, vect): + """ + Offsets the objects' geometry on the XY plane by a given vector. + These are: + + * ``paths`` + * ``regions`` + * ``flashes`` + + Then ``buffered_paths``, ``flash_geometry`` and ``solid_geometry`` + are re-created with ``self.create_geometry()``. + :param vect: (x, y) offset vector. + :type vect: tuple + :return: None + """ + + dx, dy = vect + + # Paths + print "Shifting paths..." + for path in self.paths: + path['linestring'] = affinity.translate(path['linestring'], + xoff=dx, yoff=dy) + + # Flashes + print "Shifting flashes..." + for fl in self.flashes: + # TODO: Shouldn't 'loc' be a numpy.array()? + fl['loc'][0] += dx + fl['loc'][1] += dy + + # Regions + print "Shifting regions..." + for reg in self.regions: + reg['polygon'] = affinity.translate(reg['polygon'], + xoff=dx, yoff=dy) + + # Now buffered_paths, flash_geometry and solid_geometry + self.create_geometry() + def fix_regions(self): """ Overwrites the region polygons with fixed versions if found to be invalid (according to Shapely). """ + for region in self.regions: if not region['polygon'].is_valid: region['polygon'] = region['polygon'].buffer(0) def buffer_paths(self): + """ + This is part of the parsing process. "Thickens" the paths + by their appertures. This will only work for circular appertures. + :return: None + """ + self.buffered_paths = [] for path in self.paths: width = self.apertures[path["aperture"]]["size"] @@ -613,6 +675,7 @@ class Gerber (Geometry): """ Creates geometry for Gerber flashes (aperture on a single point). """ + self.flash_geometry = [] for flash in self.flashes: aperture = self.apertures[flash['aperture']] @@ -660,6 +723,7 @@ class Gerber (Geometry): :rtype : None :return: None """ + # if len(self.buffered_paths) == 0: # self.buffer_paths() print "... buffer_paths()" @@ -669,10 +733,9 @@ class Gerber (Geometry): print "... do_flashes()" self.do_flashes() print "... cascaded_union()" - self.solid_geometry = cascaded_union( - self.buffered_paths + - [poly['polygon'] for poly in self.regions] + - self.flash_geometry) + self.solid_geometry = cascaded_union(self.buffered_paths + + [poly['polygon'] for poly in self.regions] + + self.flash_geometry) def get_bounding_box(self, margin=0.0, rounded=False): """ @@ -688,6 +751,7 @@ class Gerber (Geometry): :return: The bounding box. :rtype: Shapely.Polygon """ + bbox = self.solid_geometry.envelope.buffer(margin) if not rounded: bbox = bbox.envelope @@ -710,12 +774,14 @@ class Excellon(Geometry): tool (str) A key in ``tools`` ================ ==================================== """ + def __init__(self): """ The constructor takes no parameters. :return: Excellon object. :rtype: Excellon """ + Geometry.__init__(self) self.tools = {} @@ -820,6 +886,25 @@ class Excellon(Geometry): for drill in self.drills: drill['point'] = affinity.scale(drill['point'], factor, factor, origin=(0, 0)) + self.create_geometry() + + def offset(self, vect): + """ + Offsets geometry on the XY plane in the object by a given vector. + + :param vect: (x, y) offset vector. + :type vect: tuple + :return: None + """ + + dx, dy = vect + + # Drills + for drill in self.drills: + drill['point'] = affinity.translate(drill['point'], xoff=dx, yoff=dy) + + self.create_geometry() + def convert_units(self, units): factor = Geometry.convert_units(self, units) @@ -1095,6 +1180,8 @@ class CNCjob(Geometry): fast or feedrate speed. """ + kind = ["C", "F"] # T=travel, C=cut, F=fast, S=slow + # Results go here geometry = [] @@ -1103,22 +1190,31 @@ class CNCjob(Geometry): # Last known instruction current = {'X': 0.0, 'Y': 0.0, 'Z': 0.0, 'G': 0} - + + # Current path: temporary storage until tool is + # lifted or lowered. + path = [] + # Process every instruction for gobj in gobjs: + + # Changing height: if 'Z' in gobj: if ('X' in gobj or 'Y' in gobj) and gobj['Z'] != current['Z']: print "WARNING: Non-orthogonal motion: From", current print " To:", gobj current['Z'] = gobj['Z'] - + # Store the path into geometry and reset path + if len(path) > 1: + geometry.append({"geom": LineString(path), + "kind": kind}) + path = [path[-1]] # Start with the last point of last path. + + if 'G' in gobj: current['G'] = int(gobj['G']) if 'X' in gobj or 'Y' in gobj: - x = 0 - y = 0 - kind = ["C", "F"] # T=travel, C=cut, F=fast, S=slow if 'X' in gobj: x = gobj['X'] @@ -1129,7 +1225,9 @@ class CNCjob(Geometry): y = gobj['Y'] else: y = current['Y'] - + + kind = ["C", "F"] # T=travel, C=cut, F=fast, S=slow + if current['Z'] > 0: kind[0] = 'T' if current['G'] > 0: @@ -1137,23 +1235,26 @@ class CNCjob(Geometry): arcdir = [None, None, "cw", "ccw"] if current['G'] in [0, 1]: # line - geometry.append({'geom': LineString([(current['X'], current['Y']), - (x, y)]), 'kind': kind}) + path.append((x, y)) + # geometry.append({'geom': LineString([(current['X'], current['Y']), + # (x, y)]), 'kind': kind}) if current['G'] in [2, 3]: # arc center = [gobj['I'] + current['X'], gobj['J'] + current['Y']] radius = sqrt(gobj['I']**2 + gobj['J']**2) start = arctan2(-gobj['J'], -gobj['I']) stop = arctan2(-center[1]+y, -center[0]+x) - geometry.append({'geom': arc(center, radius, start, stop, - arcdir[current['G']], - self.steps_per_circ), - 'kind': kind}) + path += arc(center, radius, start, stop, + arcdir[current['G']], + self.steps_per_circ) + # geometry.append({'geom': arc(center, radius, start, stop, + # arcdir[current['G']], + # self.steps_per_circ), + # 'kind': kind}) # Update current instruction for code in gobj: current[code] = gobj[code] - - #self.G_geometry = geometry + self.gcode_parsed = geometry return geometry @@ -1194,7 +1295,7 @@ class CNCjob(Geometry): def plot2(self, axes, tooldia=None, dpi=75, margin=0.1, color={"T": ["#F0E24D", "#B5AB3A"], "C": ["#5E6CFF", "#4650BD"]}, - alpha={"T": 0.3, "C": 1.0}, tool_tolerance=0.001): + alpha={"T": 0.3, "C": 1.0}, tool_tolerance=0.0005): """ Plots the G-code job onto the given axes. @@ -1320,6 +1421,21 @@ class CNCjob(Geometry): self.create_geometry() + def offset(self, vect): + """ + Offsets all the geometry on the XY plane in the object by the + given vector. + + :param vect: (x, y) offset vector. + :type vect: tuple + :return: None + """ + dx, dy = vect + + for g in self.gcode_parsed: + g['geom'] = affinity.translate(g['geom'], xoff=dx, yoff=dy) + + self.create_geometry() def get_bounds(geometry_set): xmin = Inf @@ -1343,7 +1459,7 @@ def get_bounds(geometry_set): def arc(center, radius, start, stop, direction, steps_per_circ): """ - Creates a Shapely.LineString for the specified arc. + Creates a list of point along the specified arc. :param center: Coordinates of the center [x, y] :type center: list @@ -1358,9 +1474,11 @@ def arc(center, radius, start, stop, direction, steps_per_circ): :param steps_per_circ: Number of straight line segments to represent a circle. :type steps_per_circ: int - :return: The desired arc. - :rtype: Shapely.LineString + :return: The desired arc, as list of tuples + :rtype: list """ + # TODO: Resolution should be established by fraction of total length, not angle. + da_sign = {"cw": -1.0, "ccw": 1.0} points = [] if direction == "ccw" and stop <= start: @@ -1375,8 +1493,8 @@ def arc(center, radius, start, stop, direction, steps_per_circ): delta_angle = da_sign[direction]*angle*1.0/steps for i in range(steps+1): theta = start + delta_angle*i - points.append([center[0]+radius*cos(theta), center[1]+radius*sin(theta)]) - return LineString(points) + points.append((center[0]+radius*cos(theta), center[1]+radius*sin(theta))) + return points def clear_poly(poly, tooldia, overlap=0.1): diff --git a/defaults.json b/defaults.json index 4d942731..99af6afd 100644 --- a/defaults.json +++ b/defaults.json @@ -1 +1 @@ -{"geometry_paintoverlap": 0.15, "geometry_plot": true, "excellon_feedrate": 5.0, "gerber_plot": true, "gerber_mergepolys": true, "excellon_drillz": -0.1, "geometry_feedrate": 5.0, "units": "IN", "excellon_travelz": 0.1, "gerber_multicolored": false, "gerber_solid": true, "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_gaps": "4", "excellon_multicolored": false, "geometry_painttooldia": 0.0625, "cncjob_plot": true, "gerber_cutoutgapsize": 0.15, "gerber_bboxrounded": false, "geometry_multicolored": false, "gerber_noncoppermargin": 0.0, "geometry_solid": false} \ No newline at end of file +{"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 diff --git a/doc/build/.doctrees/environment.pickle b/doc/build/.doctrees/environment.pickle index 23441105..ad947bc6 100644 Binary files a/doc/build/.doctrees/environment.pickle and b/doc/build/.doctrees/environment.pickle differ diff --git a/doc/build/.doctrees/index.doctree b/doc/build/.doctrees/index.doctree index e80c18b2..07e89526 100644 Binary files a/doc/build/.doctrees/index.doctree and b/doc/build/.doctrees/index.doctree differ diff --git a/doc/build/genindex.html b/doc/build/genindex.html index ee8d020c..ba92f742 100644 --- a/doc/build/genindex.html +++ b/doc/build/genindex.html @@ -162,12 +162,16 @@ -
build_list() (FlatCAM.App method) +
buffer_paths() (FlatCAM.Gerber method)
+
build_list() (FlatCAM.App method) +
+ +
build_ui() (FlatCAM.FlatCAMObj method)
@@ -215,10 +219,6 @@
deserialize() (FlatCAM.FlatCAMObj method)
- -
digits (FlatCAM.Gerber attribute) -
-
@@ -280,7 +280,7 @@ -
fraction (FlatCAM.Gerber attribute) +
frac_digits (FlatCAM.Gerber attribute)
@@ -349,6 +349,10 @@
info() (FlatCAM.App method)
+ +
int_digits (FlatCAM.Gerber attribute) +
+
@@ -362,6 +366,12 @@ +
+
linear2gcode() (FlatCAM.CNCjob method) +
+ +
+
load_defaults() (FlatCAM.App method)
@@ -382,6 +392,20 @@ + -
+
offset() (FlatCAM.Excellon method) +
+ +
+ +
(FlatCAM.Geometry method) +
+ + +
(FlatCAM.Gerber method) +
+ +
+
on_about() (FlatCAM.App method)
@@ -485,12 +509,12 @@
on_generate_gerber_bounding_box() (FlatCAM.App method)
+
on_generate_isolation() (FlatCAM.App method)
-
on_generate_paintarea() (FlatCAM.App method)
@@ -544,10 +568,6 @@ -
on_replot() (FlatCAM.App method) -
- -
on_row_activated() (FlatCAM.App method)
@@ -564,6 +584,10 @@ +
on_toolbar_replot() (FlatCAM.App method) +
+ +
on_tools_doublesided() (FlatCAM.App method)
@@ -616,9 +640,15 @@
-
plot() (FlatCAM.FlatCAMObj method) +
plot() (FlatCAM.FlatCAMGerber method)
+
+ +
(FlatCAM.FlatCAMObj method) +
+ +
plot2() (FlatCAM.CNCjob method)
diff --git a/doc/build/index.html b/doc/build/index.html index ccb1c570..27e54ea1 100644 --- a/doc/build/index.html +++ b/doc/build/index.html @@ -1047,22 +1047,6 @@ which may be necessary when updating the UI from code and not by the user.

-
-
-on_replot(widget)
-

Callback for toolbar button. Re-plots all objects.

- --- - - - - - -
Parameters:widget – The widget from which this was called.
Returns:None
-
-
on_row_activated(widget, path, col)
@@ -1140,6 +1124,22 @@ the objects in the project.

+
+
+on_toolbar_replot(widget)
+

Callback for toolbar button. Re-plots all objects.

+ +++ + + + + + +
Parameters:widget – The widget from which this was called.
Returns:None
+
+
on_tools_doublesided(param)
@@ -1406,13 +1406,13 @@ in the GUI. This selection will in turn trigger
set_progress_bar(percentage, text='')
-

Sets the application’s progress bar to a given fraction and text.

+

Sets the application’s progress bar to a given frac_digits and text.

@@ -1569,6 +1569,34 @@ the rectangular bounding box of self.solid_geometry.

isolation_geometry(offset)

Creates contours around geometry at a given offset distance.

+
Parameters:
    -
  • percentage (float) – The fraction (0.0-1.0) of the progress.
  • +
  • percentage (float) – The frac_digits (0.0-1.0) of the progress.
  • text (str) – Text to display on the progress bar.
+++ + + + + + + + +
Parameters:offset (float) – Offset distance.
Returns:The buffered geometry.
Return type:Shapely.MultiPolygon or Shapely.Polygon
+
+ +
+
+offset(vect)
+

Offset the geometry by the given vector. Override this method.

+ +++ + + + + + +
Parameters:vect (tuple) – (x, y) vector by which to offset the object.
Returns:None
@@ -1744,6 +1772,14 @@ The following kinds and their attributes are supported:

+
+
+buffer_paths()
+

This is part of the parsing process. “Thickens” the paths +by their appertures. This will only work for circular appertures. +:return: None

+
+
create_geometry()
@@ -1755,12 +1791,6 @@ and regions naturally do as well.

:return: None

-
-
-digits = None
-

Number of integer digits in Gerber numbers. Used during parsing.

-
-
do_flashes()
@@ -1775,8 +1805,8 @@ versions if found to be invalid (according to Shapely).

-
-fraction = None
+
+frac_digits = None

Number of fraction digits in Gerber numbers. Used during parsing.

@@ -1807,6 +1837,29 @@ box in both positive and negative, x and y axes.
+
+
+int_digits = None
+

Number of integer digits in Gerber numbers. Used during parsing.

+
+ +
+
+offset(vect)
+

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

+ +

Then buffered_paths, flash_geometry and solid_geometry +are re-created with self.create_geometry(). +:param vect: (x, y) offset vector. +:type vect: tuple +:return: None

+
+
parse_file(filename)
@@ -1817,7 +1870,20 @@ read from the given file.

parse_lines(glines)
-

Main Gerber parser.

+

Main Gerber parser. Reads Gerber and populates self.paths, self.apertures, +self.flashes, self.regions and self.units.

+ +++ + + + +
Parameters:glines – Gerber code as list of strings, each
+

element being one line of the source file. +:type glines: list +:return: None +:rtype: None

@@ -1868,6 +1934,22 @@ the size (diameter). +
+
+offset(vect)
+

Offsets geometry on the XY plane in the object by a given vector.

+ +++ + + + + + +
Parameters:vect (tuple) – (x, y) offset vector.
Returns:None
+
+
parse_lines(elines)
@@ -1943,45 +2025,142 @@ different job for each tool in the excellon code.

generate_from_excellon_by_tool(exobj, tools='all')

Creates gcode for this object from an Excellon object -for the specified tools. -@param exobj: Excellon object to process -@type exobj: Excellon -@param tools: Comma separated tool names -@type: tools: str -@return: None

-
- -
-
-generate_from_geometry(geometry, append=True, tooldia=None)
-

Generates G-Code from a Geometry object.

-
- -
-
-plot2(axes, tooldia=None, dpi=75, margin=0.1, color={'C': ['#5E6CFF', '#4650BD'], 'T': ['#F0E24D', '#B5AB3A']}, alpha={'C': 1.0, 'T': 0.3})
-

Plots the G-code job onto the given axes.

-
- -
-
-polygon2gcode(polygon)
-

Creates G-Code for the exterior and all interior paths -of a polygon.

+for the specified tools.

- + + + + + + +
Parameters:polygon (Shapely.Polygon) – A Shapely.Polygon
Parameters:
    +
  • exobj (Excellon) – Excellon object to process
  • +
  • tools – Comma separated tool names
  • +
+
Type:

tools: str

+
Returns:

None

+
Return type:

None

+
+
+
+generate_from_geometry(geometry, append=True, tooldia=None, tolerance=0)
+

Generates G-Code from a Geometry object. Stores in self.gcode.

+ +++ + + + +
Parameters:
    +
  • geometry (Geometry) – Geometry defining the toolpath
  • +
  • append (bool) – Wether to append to self.gcode or re-write it.
  • +
  • tooldia – If given, sets the tooldia property but does
  • +
+
+

not affect the process in any other way. +:type tooldia: bool +:param tolerance: All points in the simplified object will be within the +tolerance distance of the original geometry. +:return: None +:rtype: None

+
+ +
+
+linear2gcode(linear, tolerance=0)
+

Generates G-code to cut along the linear feature.

+ +++ + + + + + +
Parameters:
    +
  • linear – The path to cut along.
  • +
  • tolerance – All points in the simplified object will be within the
  • +
+
Type:

Shapely.LinearRing or Shapely.Linear String

+
+

tolerance distance of the original geometry. +:type tolerance: float +:return: G-code to cut alon the linear feature. +:rtype: str

+
+ +
+
+plot2(axes, tooldia=None, dpi=75, margin=0.1, color={'C': ['#5E6CFF', '#4650BD'], 'T': ['#F0E24D', '#B5AB3A']}, alpha={'C': 1.0, 'T': 0.3}, tool_tolerance=0.001)
+

Plots the G-code job onto the given axes.

+ +++ + + + + + +
Parameters:
    +
  • axes – Matplotlib axes on which to plot.
  • +
  • tooldia – Tool diameter.
  • +
  • dpi – Not used!
  • +
  • margin – Not used!
  • +
  • color – Color specification.
  • +
  • alpha – Transparency specification.
  • +
  • tool_tolerance – Tolerance when drawing the toolshape.
  • +
+
Returns:

None

+
+
+ +
+
+polygon2gcode(polygon, tolerance=0)
+

Creates G-Code for the exterior and all interior paths +of a polygon.

+ +++ + + + +
Parameters:
    +
  • polygon (Shapely.Polygon) – A Shapely.Polygon
  • +
  • tolerance – All points in the simplified object will be within the
  • +
+
+

tolerance distance of the original geometry. +:type tolerance: float +:return: G-code to cut along polygon. +:rtype: str

+
+
pre_parse(gtext)
-

gtext is a single string with g-code

+

Separates parts of the G-Code text into a list of dictionaries. +Used by self.gcode_parse().

+ +++ + + + +
Parameters:gtext – A single string with g-code
@@ -2144,6 +2323,20 @@ and options.

+
+
+plot(figure)
+

Plots the object on to the specified figure.

+ +++ + + + +
Parameters:figure – Matplotlib figure on which to plot.
+
+
diff --git a/doc/build/objects.inv b/doc/build/objects.inv index 542c1618..61b6b583 100644 Binary files a/doc/build/objects.inv and b/doc/build/objects.inv differ diff --git a/doc/build/searchindex.js b/doc/build/searchindex.js index 8097c73e..0363d6c5 100644 --- a/doc/build/searchindex.js +++ b/doc/build/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{represent:0,all:0,code:0,replot:0,focus:0,cirkuixgerb:[],follow:0,on_key_over_plot:0,whose:0,get_ev:0,on_options_upd:0,flash:0,gerber:0,flash_geometri:0,text:0,plot_al:0,set_current_pag:0,digit:0,everi:0,string:0,far:0,mous:0,"5e6cff":0,obround:0,untouch:0,button:0,list:0,item:0,adjust:0,specal:0,round:0,get_radio_valu:0,create_geometri:0,natur:0,dimens:0,zero:0,pass:0,further:[],click:0,append:0,index:0,neg:0,current:0,delet:0,version:0,"new":0,method:0,whatev:0,widget:0,cirkuixobj:[],flatcamgeometri:0,gener:0,onli:0,matplotlib:0,adjust_ax:0,on_create_aligndril:0,path:0,becom:0,modifi:0,valu:0,box:0,convert:0,new_object:0,on_file_saveprojectcopi:0,action:0,chang:0,on_activate_nam:0,on_options_object2app:0,diamet:0,via:0,app:0,on_fileopengerb:0,filenam:0,ymin:0,unit:0,plot:0,from:0,describ:0,doubl:0,chooser:0,setup_component_editor:0,call:0,type:0,start:0,more:0,on_delet:0,factor:0,on_gerber_generate_cutout:0,parse_fil:0,known:0,hole:0,must:0,on_file_openproject:0,none:0,ser_attr:0,work:0,gtext:0,can:0,drill:0,z_move:0,overrid:0,polygon2gcod:0,give:0,process:0,share:0,stroke:0,minimum:0,tab:0,xmin:0,serial:0,z_cut:0,alwai:0,surfac:0,fix_region:0,fals:0,updat:0,b5ab3a:0,resourc:0,after:0,befor:0,plane:0,mai:0,setup_obj_class:0,data:0,subsequ:0,read:0,onto:0,correspond:0,element:0,inform:0,"switch":0,maintain:0,enter:0,on_replot:0,on_file_saveprojecta:0,travel:0,setup_plot:0,elin:0,comma:0,keyboard:0,on_excellon_tool_choos:0,paramet:0,fit:0,respresent:0,chosen:0,fix:0,gtk:0,set_list_select:0,window:0,pcb:0,on_options_app2object:0,main:[],pixel:0,non:0,within:0,"return":0,thei:0,handl:0,rectangl:0,f0e24d:0,build_list:0,project_filenam:0,choic:0,name:0,separ:0,solid_geometri:0,each:0,found:0,circular:0,gui:0,read_form:0,parse_lin:0,on_closewindow:0,continu:0,cirkuixcncjob:[],event:0,out:0,on_tree_selection_chang:0,on_eval_upd:0,generate_from_excellon_by_tool:0,content:0,geom:0,clear_polygon:0,flatcamcncjob:0,alter:0,linear:0,insid:0,precaut:0,differ:0,flatcamexcellon:0,base:0,dictionari:0,org:0,care:0,generate_from_geometri:0,thread:0,launch:0,success:0,motion:0,turn:0,notebook:0,place:0,geometri:0,treeselect:0,entry_text:0,user:0,origin:0,copper:0,on_zoom_in:0,arrai:0,file_chooser_act:0,restrict:0,done:0,fast:0,thick:0,open:0,size:0,given:0,on_toggle_unit:0,associ:0,interact:0,flatcamobj:0,attach:0,includ:0,option:0,tool:0,copi:0,specifi:0,get_empty_area:0,generate_from_excellon:0,part:0,pars:0,number:0,get_bounding_box:0,kind:0,whenev:0,tree:0,entry_ev:0,project:0,str:0,entri:0,posit:0,ani:0,do_flash:0,have:0,need:0,callback:0,rout:0,note:0,also:0,on_options_object2project:0,build:0,which:0,event_handl:0,interior:0,on_success:0,singl:0,buffer:0,object:0,pair:0,alpha:0,segment:0,"class":0,don:0,clear:0,later:0,cover:0,on_mouse_move_over_plot:0,populate_objects_combo:0,axi:0,thicken:0,show:0,on_click_over_plot:0,apertur:0,radiu:0,syntax:0,radio:0,corner:0,find:0,on_scale_object:0,load_default:0,slow:0,ratio:0,menu:0,configur:0,activ:0,state:0,should:0,comboboxtext:0,clipboard:0,dict:0,combo:0,over:0,on_options_combo_chang:0,hit:0,get:0,made:0,bar:0,on_create_mirror:0,to_dict:0,xmax:0,contain:0,where:0,dpi:0,set:0,startup:0,on_cncjob_exportgcod:0,displai:0,"4650bd":0,see:0,result:0,close:0,contour:0,statu:0,kei:0,boundari:0,figur:0,between:0,progress:0,attribut:0,accord:0,extend:0,complement:0,isol:0,job:0,entir:0,here:0,popul:0,both:0,feedrat:0,rtype:0,region:0,setup_project_list:0,instanc:0,whole:0,col:0,obj_dict:0,load:0,cncjob:0,point:0,color:0,height:0,param:0,respect:0,throughout:0,duplic:0,quit:0,do_someth:0,creat:0,addition:0,been:0,mark:0,compon:0,json:0,trigger:0,toolbar:0,open_project:0,subscrib:0,immedi:0,radio_set:0,gcode:0,imag:0,search:0,on_file_savedefault:0,coordin:0,on_options_project2object:0,func:0,present:0,inhibit:0,therefor:0,align:0,properti:0,rectangular:0,defin:0,"while":0,setup_ax:0,margin:0,howev:[],propag:0,layer:0,them:0,equal:0,exterior:0,on_fileopengcod:0,"__init__":0,gcode_pars:0,transpar:0,same:0,save_project:0,html:0,descend:0,complet:0,http:0,widget_nam:0,upon:0,pute:0,initi:0,canva:0,typic:[],appropri:0,off:0,center:0,cirkuixexcellon:[],build_ui:0,knd:[],well:0,"_app_":0,without:0,on_file_new:0,thi:[],choos:0,on_generate_paintarea:0,self:0,left:0,distanc:0,identifi:0,just:0,isolation_geometri:0,"true":0,flatcamgerb:0,rest:0,shape:0,aspect:0,linestr:0,speed:0,yet:[],wether:0,cut:0,on_tools_doublesid:0,shortcut:0,add:0,other:0,board:0,save:0,modul:0,pre_pars:0,take:0,applic:0,around:0,format:0,dest:0,on_file_saveproject:0,grid:0,background:0,press:0,bit:[],on_gerber_generate_noncopp:0,like:0,specif:0,zoom:0,integ:0,from_dict:0,necessari:0,either:0,exobj:0,on_clear_plot:0,page:0,depend:0,clear_plot:0,on_generate_isol:0,some:[],back:0,percentag:0,on_zoom_fit:0,setup_component_view:[],radiobutton:0,"export":0,mirror:0,plot2:0,on_generate_excellon_cncjob:0,scale:0,bottom:0,definit:0,overlap:0,on_update_plot:0,attac:[],buffer_path:0,cnc:0,backend:0,machin:0,previou:0,run:0,flatcam:[],usag:0,plote:0,offset:0,on_toggle_pointbox:0,about:0,actual:0,file_chooser_save_act:0,options2form:0,on_generate_cncjob:0,side:0,dialog:0,constructor:0,options_update_ignor:0,on_fileopenexcellon:0,on_about:0,regist:0,"float":0,encod:0,bound:0,excellon:0,loc:0,accordingli:0,ymax:0,area:0,transfer:0,support:0,overwrit:0,width:0,clear_poli:0,get_curr:0,editor:0,fraction:0,on_canvas_configur:0,select:0,"function":0,creation:0,form:0,on_zoom_out:0,cirkuixgeometri:[],set_progress_bar:0,line:0,on_entry_eval_activ:0,info:0,on_options_app2project:0,on_generate_gerber_bounding_box:0,"default":0,access:0,maximum:0,tooldia:0,record:0,limit:0,enlarg:0,buffered_path:0,convert_unit:0,request:0,dure:0,parser:0,aperture_pars:0,repres:0,"char":[],set_form_item:0,on_row_activ:0,exist:0,file:[],doe:0,check:0,again:0,tick:0,aplic:0,polygon:0,titl:0,to_form:0,when:0,detail:0,invalid:0,field:0,valid:0,bool:0,gline:0,geometr:0,on_options_project2app:0,read_form_item:0,deseri:0,variabl:0,draw:0,initil:[],eval:0,ignor:0,on_filequit:0},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"],titles:["Welcome to FlatCAM’s documentation!"],objects:{"":{FlatCAM:[0,0,0,"-"]},FlatCAM:{CNCjob:[0,2,1,""],FlatCAMGeometry:[0,2,1,""],Geometry:[0,2,1,""],App:[0,2,1,""],FlatCAMObj:[0,2,1,""],Gerber:[0,2,1,""],FlatCAMExcellon:[0,2,1,""],FlatCAMGerber:[0,2,1,""],Excellon:[0,2,1,""],FlatCAMCNCjob:[0,2,1,""]},"FlatCAM.FlatCAMGerber":{convert_units:[0,1,1,""]},"FlatCAM.Geometry":{convert_units:[0,1,1,""],scale:[0,1,1,""],to_dict:[0,1,1,""],bounds:[0,1,1,""],get_empty_area:[0,1,1,""],isolation_geometry:[0,1,1,""],from_dict:[0,1,1,""],clear_polygon:[0,1,1,""],size:[0,1,1,""]},"FlatCAM.App":{on_options_object2app:[0,1,1,""],setup_plot:[0,1,1,""],on_tree_selection_changed:[0,1,1,""],on_canvas_configure:[0,1,1,""],on_zoom_in:[0,1,1,""],on_delete:[0,1,1,""],on_about:[0,1,1,""],on_closewindow:[0,1,1,""],on_click_over_plot:[0,1,1,""],on_row_activated:[0,1,1,""],on_fileopengerber:[0,1,1,""],file_chooser_action:[0,1,1,""],on_zoom_out:[0,1,1,""],on_zoom_fit:[0,1,1,""],clear_plots:[0,1,1,""],on_file_savedefaults:[0,1,1,""],on_generate_excellon_cncjob:[0,1,1,""],set_form_item:[0,1,1,""],plot_all:[0,1,1,""],read_form:[0,1,1,""],on_generate_isolation:[0,1,1,""],on_key_over_plot:[0,1,1,""],on_options_project2app:[0,1,1,""],on_gerber_generate_noncopper:[0,1,1,""],on_scale_object:[0,1,1,""],new_object:[0,1,1,""],on_activate_name:[0,1,1,""],get_eval:[0,1,1,""],on_update_plot:[0,1,1,""],save_project:[0,1,1,""],on_options_object2project:[0,1,1,""],setup_component_editor:[0,1,1,""],get_current:[0,1,1,""],open_project:[0,1,1,""],on_options_update:[0,1,1,""],on_file_new:[0,1,1,""],on_options_app2object:[0,1,1,""],read_form_item:[0,1,1,""],on_entry_eval_activate:[0,1,1,""],on_tools_doublesided:[0,1,1,""],on_options_combo_change:[0,1,1,""],setup_obj_classes:[0,1,1,""],on_file_saveproject:[0,1,1,""],setup_project_list:[0,1,1,""],on_generate_gerber_bounding_box:[0,1,1,""],on_options_project2object:[0,1,1,""],on_eval_update:[0,1,1,""],on_replot:[0,1,1,""],build_list:[0,1,1,""],on_toggle_pointbox:[0,1,1,""],set_progress_bar:[0,1,1,""],on_file_saveprojectas:[0,1,1,""],info:[0,1,1,""],on_file_openproject:[0,1,1,""],on_options_app2project:[0,1,1,""],adjust_axes:[0,1,1,""],on_file_saveprojectcopy:[0,1,1,""],on_create_mirror:[0,1,1,""],file_chooser_save_action:[0,1,1,""],on_excellon_tool_choose:[0,1,1,""],on_generate_cncjob:[0,1,1,""],zoom:[0,1,1,""],on_clear_plots:[0,1,1,""],on_mouse_move_over_plot:[0,1,1,""],on_fileopengcode:[0,1,1,""],on_gerber_generate_cutout:[0,1,1,""],load_defaults:[0,1,1,""],populate_objects_combo:[0,1,1,""],on_create_aligndrill:[0,1,1,""],on_generate_paintarea:[0,1,1,""],get_radio_value:[0,1,1,""],on_filequit:[0,1,1,""],on_cncjob_exportgcode:[0,1,1,""],on_toggle_units:[0,1,1,""],options2form:[0,1,1,""],set_list_selection:[0,1,1,""],on_fileopenexcellon:[0,1,1,""]},"FlatCAM.CNCjob":{gcode_parse:[0,1,1,""],polygon2gcode:[0,1,1,""],generate_from_excellon_by_tool:[0,1,1,""],pre_parse:[0,1,1,""],generate_from_excellon:[0,1,1,""],scale:[0,1,1,""],generate_from_geometry:[0,1,1,""],plot2:[0,1,1,""]},"FlatCAM.Excellon":{parse_lines:[0,1,1,""],scale:[0,1,1,""]},"FlatCAM.FlatCAMObj":{read_form:[0,1,1,""],plot:[0,1,1,""],serialize:[0,1,1,""],deserialize:[0,1,1,""],build_ui:[0,1,1,""],to_form:[0,1,1,""],setup_axes:[0,1,1,""],set_form_item:[0,1,1,""]},"FlatCAM.Gerber":{digits:[0,3,1,""],aperture_parse:[0,1,1,""],scale:[0,1,1,""],parse_lines:[0,1,1,""],create_geometry:[0,1,1,""],fix_regions:[0,1,1,""],fraction:[0,3,1,""],parse_file:[0,1,1,""],get_bounding_box:[0,1,1,""],do_flashes:[0,1,1,""]}},titleterms:{file:[],main:[],welcom:0,indic:0,cirkuix:[],camlib:[],thi:[],tabl:0,document:0,flatcam:0}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{represent:0,all:0,code:0,toolpath:0,replot:0,focus:0,cirkuixgerb:[],follow:0,on_key_over_plot:0,whose:0,get_ev:0,on_options_upd:0,flash:0,specif:0,gerber:0,buffer_path:0,on_click_over_plot:0,plot_al:0,set_current_pag:0,digit:0,sourc:0,everi:0,string:0,far:0,mous:0,"5e6cff":0,obround:0,untouch:0,toolshap:0,button:0,list:0,item:0,adjust:0,specal:0,round:0,get_radio_valu:0,create_geometri:0,natur:0,zero:0,pass:0,further:[],rectangular:0,click:0,append:0,index:0,load_default:0,neg:0,current:0,delet:0,version:0,"new":0,method:0,whatev:0,widget:0,cirkuixobj:[],flatcamgeometri:0,gener:0,new_object:0,matplotlib:0,adjust_ax:0,on_create_aligndril:0,path:0,along:0,becom:0,modifi:0,valu:0,box:0,convert:0,on_file_saveprojectcopi:0,action:0,chang:0,on_activate_nam:0,on_options_object2app:0,diamet:0,via:0,app:0,on_fileopengerb:0,filenam:0,ymin:0,unit:0,frac_digit:0,plot:0,from:0,describ:0,doubl:0,chooser:0,setup_component_editor:0,call:0,save:0,type:0,more:0,on_toolbar_replot:0,on_delet:0,combo:0,on_gerber_generate_cutout:0,parse_fil:0,known:0,hole:0,must:0,on_file_openproject:0,none:0,ser_attr:0,work:0,gtext:0,can:0,drill:0,z_move:0,overrid:0,polygon2gcod:0,give:0,process:0,share:0,on_zoom_out:0,stroke:0,minimum:0,tab:0,xmin:0,serial:0,z_cut:0,alwai:0,surfac:0,fix_region:0,write:0,fals:0,circular:0,parse_lin:0,resourc:0,after:0,befor:0,notebook:0,mai:0,setup_obj_class:0,associ:0,entry_text:0,correspond:0,element:0,callback:0,"switch":0,maintain:0,enter:0,on_replot:[],on_file_saveprojecta:0,travel:0,copper:0,elin:0,comma:0,affect:0,on_excellon_tool_choos:0,paramet:0,fit:0,save_project:0,chosen:0,fix:0,gtk:0,set_list_select:0,window:0,pcb:0,on_options_app2object:0,main:[],pixel:0,non:0,"float":0,"return":0,thei:0,handl:0,rectangl:0,f0e24d:0,vect:0,build_list:0,project_filenam:0,choic:0,name:0,separ:0,solid_geometri:0,each:0,found:0,updat:0,gui:0,read_form:0,b5ab3a:0,on_closewindow:0,continu:0,cirkuixcncjob:[],event:0,out:0,on_tree_selection_chang:0,on_eval_upd:0,generate_from_excellon_by_tool:0,content:0,vector:0,geom:0,clear_polygon:0,flatcamcncjob:0,linear:0,insid:0,loc:0,precaut:0,given:0,flatcamexcellon:0,base:0,dictionari:0,org:0,care:0,generate_from_geometri:0,thread:0,launch:0,motion:0,turn:0,plane:0,place:0,geometri:0,treeselect:0,onto:0,origin:0,dimens:0,on_zoom_in:0,arrai:0,file_chooser_act:0,restrict:0,done:0,overwrit:0,thick:0,open:0,size:0,differ:0,on_toggle_unit:0,data:0,interact:0,flatcamobj:0,attach:0,store:0,editor:0,option:0,tool:0,copi:0,specifi:0,get_empty_area:0,generate_from_excellon:0,part:0,pars:0,number:0,get_bounding_box:0,kind:0,whenev:0,tree:0,entry_ev:0,project:0,str:0,build_ui:0,posit:0,initi:0,ani:0,do_flash:0,have:0,need:0,inform:0,rout:0,note:0,also:0,on_options_object2project:0,build:0,which:0,event_handl:0,interior:0,on_success:0,singl:0,simplifi:0,buffer:0,object:0,pair:0,alpha:0,segment:0,"class":0,don:0,appertur:0,clear:0,later:0,cover:0,on_mouse_move_over_plot:0,populate_objects_combo:0,axi:0,width:0,thicken:0,show:0,text:0,apertur:0,radiu:0,syntax:0,radio:0,corner:0,on_about:0,find:0,on_scale_object:0,onli:0,slow:0,ratio:0,menu:0,configur:0,activ:0,state:0,should:0,comboboxtext:0,clipboard:0,dict:0,factor:0,over:0,on_options_combo_chang:0,hit:0,get:0,on_entry_eval_activ:0,on_options_app2project:0,multipolygon:0,bar:0,on_create_mirror:0,to_dict:0,xmax:0,contain:0,where:0,dpi:0,set:0,keyboard:0,startup:0,on_cncjob_exportgcod:0,maximum:0,"4650bd":0,see:0,result:0,close:0,contour:0,statu:0,extend:0,boundari:0,figur:0,between:0,progress:0,attribut:0,accord:0,kei:0,complement:0,isol:0,job:0,entir:0,here:0,toler:0,popul:0,both:0,feedrat:0,rtype:0,region:0,alon:0,setup_project_list:0,instanc:0,whole:0,col:0,obj_dict:0,load:0,cncjob:0,point:0,color:0,height:0,enlarg:0,shortcut:0,respect:0,throughout:0,duplic:0,quit:0,do_someth:0,convert_unit:0,addition:0,been:0,mark:0,compon:0,json:0,trigger:0,toolbar:0,open_project:0,subscrib:0,immedi:0,radio_set:0,gcode:0,imag:0,search:0,on_file_savedefault:0,coordin:0,on_options_project2object:0,func:0,present:0,inhibit:0,therefor:0,align:0,properti:0,alter:0,dest:0,defin:0,"while":0,setup_ax:0,margin:0,howev:[],propag:0,layer:0,them:0,equal:0,exterior:0,on_fileopengcod:0,"__init__":0,around:0,format:0,same:0,respresent:0,html:0,descend:0,tool_toler:0,complet:0,http:0,widget_nam:0,upon:0,user:0,canva:0,typic:[],appropri:0,off:0,center:0,cirkuixexcellon:[],entri:0,knd:[],well:0,"_app_":0,without:0,on_file_new:0,thi:[],choos:0,on_generate_paintarea:0,self:0,left:0,distanc:0,identifi:0,just:0,isolation_geometri:0,flatcamgerb:0,rest:0,shape:0,aspect:0,linestr:0,speed:0,yet:[],wether:0,cut:0,on_tools_doublesid:0,param:0,add:0,valid:0,board:0,subsequ:0,modul:0,pre_pars:0,take:0,applic:0,gcode_pars:0,transpar:0,read:0,on_file_saveproject:0,grid:0,background:0,press:0,bit:[],on_gerber_generate_noncopp:0,like:0,success:0,zoom:0,integ:0,from_dict:0,necessari:0,either:0,exobj:0,on_clear_plot:0,page:0,depend:0,clear_plot:0,int_digit:0,on_generate_isol:0,some:[],back:0,percentag:0,on_zoom_fit:0,setup_component_view:[],radiobutton:0,"export":0,mirror:0,plot2:0,on_generate_excellon_cncjob:0,scale:0,bottom:0,definit:0,overlap:0,on_update_plot:0,attac:[],flash_geometri:0,cnc:0,backend:0,machin:0,previou:0,run:0,flatcam:[],usag:0,plote:0,offset:0,on_toggle_pointbox:0,about:0,actual:0,file_chooser_save_act:0,options2form:0,on_generate_cncjob:0,side:0,dialog:0,constructor:0,options_update_ignor:0,on_fileopenexcellon:0,setup_plot:0,regist:0,within:0,encod:0,bound:0,excellon:0,pute:0,accordingli:0,ymax:0,wai:0,area:0,transfer:0,support:0,fast:0,start:0,clear_poli:0,get_curr:0,includ:0,fraction:0,on_canvas_configur:0,select:0,"function":0,creation:0,linear2gcod:0,form:0,tupl:0,cirkuixgeometri:[],set_progress_bar:0,line:0,"true":0,info:0,made:0,on_generate_gerber_bounding_box:0,"default":0,access:0,displai:0,tooldia:0,record:0,limit:0,featur:0,buffered_path:0,creat:0,request:0,dure:0,parser:0,aperture_pars:0,repres:0,"char":[],set_form_item:0,on_row_activ:0,exist:0,file:[],doe:0,check:0,again:0,tick:0,aplic:0,polygon:0,titl:0,to_form:0,when:0,detail:0,invalid:0,field:0,other:0,bool:0,gline:0,ignor:0,on_options_project2app:0,read_form_item:0,deseri:0,variabl:0,draw:0,initil:[],eval:0,geometr:0,on_filequit:0},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"],titles:["Welcome to FlatCAM’s documentation!"],objects:{"":{FlatCAM:[0,0,0,"-"]},FlatCAM:{CNCjob:[0,2,1,""],FlatCAMExcellon:[0,2,1,""],Geometry:[0,2,1,""],App:[0,2,1,""],FlatCAMObj:[0,2,1,""],Gerber:[0,2,1,""],FlatCAMGeometry:[0,2,1,""],FlatCAMGerber:[0,2,1,""],Excellon:[0,2,1,""],FlatCAMCNCjob:[0,2,1,""]},"FlatCAM.FlatCAMGerber":{convert_units:[0,1,1,""],plot:[0,1,1,""]},"FlatCAM.Geometry":{convert_units:[0,1,1,""],scale:[0,1,1,""],to_dict:[0,1,1,""],bounds:[0,1,1,""],get_empty_area:[0,1,1,""],isolation_geometry:[0,1,1,""],from_dict:[0,1,1,""],clear_polygon:[0,1,1,""],offset:[0,1,1,""],size:[0,1,1,""]},"FlatCAM.App":{on_options_object2app:[0,1,1,""],setup_plot:[0,1,1,""],on_tree_selection_changed:[0,1,1,""],on_canvas_configure:[0,1,1,""],on_zoom_in:[0,1,1,""],on_delete:[0,1,1,""],on_about:[0,1,1,""],on_closewindow:[0,1,1,""],on_click_over_plot:[0,1,1,""],on_row_activated:[0,1,1,""],on_fileopengerber:[0,1,1,""],file_chooser_action:[0,1,1,""],on_zoom_out:[0,1,1,""],on_zoom_fit:[0,1,1,""],clear_plots:[0,1,1,""],on_file_savedefaults:[0,1,1,""],on_generate_excellon_cncjob:[0,1,1,""],set_form_item:[0,1,1,""],plot_all:[0,1,1,""],read_form:[0,1,1,""],on_generate_isolation:[0,1,1,""],on_key_over_plot:[0,1,1,""],on_options_project2app:[0,1,1,""],on_gerber_generate_noncopper:[0,1,1,""],on_scale_object:[0,1,1,""],new_object:[0,1,1,""],on_activate_name:[0,1,1,""],get_eval:[0,1,1,""],on_update_plot:[0,1,1,""],save_project:[0,1,1,""],on_options_object2project:[0,1,1,""],setup_component_editor:[0,1,1,""],get_current:[0,1,1,""],open_project:[0,1,1,""],on_options_update:[0,1,1,""],on_file_new:[0,1,1,""],on_options_app2object:[0,1,1,""],read_form_item:[0,1,1,""],on_toolbar_replot:[0,1,1,""],on_entry_eval_activate:[0,1,1,""],on_tools_doublesided:[0,1,1,""],on_options_combo_change:[0,1,1,""],setup_obj_classes:[0,1,1,""],on_file_saveproject:[0,1,1,""],setup_project_list:[0,1,1,""],on_generate_gerber_bounding_box:[0,1,1,""],on_options_project2object:[0,1,1,""],on_eval_update:[0,1,1,""],build_list:[0,1,1,""],on_toggle_pointbox:[0,1,1,""],set_progress_bar:[0,1,1,""],on_file_saveprojectas:[0,1,1,""],info:[0,1,1,""],on_file_openproject:[0,1,1,""],on_options_app2project:[0,1,1,""],adjust_axes:[0,1,1,""],on_file_saveprojectcopy:[0,1,1,""],on_create_mirror:[0,1,1,""],file_chooser_save_action:[0,1,1,""],on_excellon_tool_choose:[0,1,1,""],on_generate_cncjob:[0,1,1,""],zoom:[0,1,1,""],on_clear_plots:[0,1,1,""],on_mouse_move_over_plot:[0,1,1,""],on_fileopengcode:[0,1,1,""],on_gerber_generate_cutout:[0,1,1,""],load_defaults:[0,1,1,""],populate_objects_combo:[0,1,1,""],on_create_aligndrill:[0,1,1,""],on_generate_paintarea:[0,1,1,""],get_radio_value:[0,1,1,""],on_filequit:[0,1,1,""],on_cncjob_exportgcode:[0,1,1,""],on_toggle_units:[0,1,1,""],options2form:[0,1,1,""],set_list_selection:[0,1,1,""],on_fileopenexcellon:[0,1,1,""]},"FlatCAM.CNCjob":{gcode_parse:[0,1,1,""],polygon2gcode:[0,1,1,""],generate_from_excellon_by_tool:[0,1,1,""],linear2gcode:[0,1,1,""],pre_parse:[0,1,1,""],generate_from_excellon:[0,1,1,""],scale:[0,1,1,""],generate_from_geometry:[0,1,1,""],plot2:[0,1,1,""]},"FlatCAM.Excellon":{parse_lines:[0,1,1,""],scale:[0,1,1,""],offset:[0,1,1,""]},"FlatCAM.FlatCAMObj":{read_form:[0,1,1,""],plot:[0,1,1,""],serialize:[0,1,1,""],deserialize:[0,1,1,""],build_ui:[0,1,1,""],to_form:[0,1,1,""],setup_axes:[0,1,1,""],set_form_item:[0,1,1,""]},"FlatCAM.Gerber":{aperture_parse:[0,1,1,""],scale:[0,1,1,""],frac_digits:[0,3,1,""],buffer_paths:[0,1,1,""],parse_lines:[0,1,1,""],create_geometry:[0,1,1,""],fix_regions:[0,1,1,""],int_digits:[0,3,1,""],offset:[0,1,1,""],parse_file:[0,1,1,""],get_bounding_box:[0,1,1,""],do_flashes:[0,1,1,""]}},titleterms:{document:0,welcom:0,thi:[],indic:0,cirkuix:[],camlib:[],file:[],tabl:0,main:[],flatcam:0}}) \ No newline at end of file