From 21da78d654882cc6558df5e29361a38c91edc331 Mon Sep 17 00:00:00 2001 From: Juan Pablo Caram Date: Wed, 12 Mar 2014 23:30:19 -0400 Subject: [PATCH] Small fixes in ApertureMacro and updated docs. --- FlatCAM.py | 67 +-- camlib.py | 112 ++++- doc/build/.doctrees/camlib.doctree | Bin 131939 -> 184511 bytes doc/build/.doctrees/environment.pickle | Bin 10699 -> 29823 bytes doc/build/.doctrees/index.doctree | Bin 5575 -> 5600 bytes doc/build/_sources/camlib.txt | 22 +- doc/build/_sources/index.txt | 1 + doc/build/camlib.html | 403 ++++++++++++++++- doc/build/genindex.html | 593 ++++++++++++++++++++++++- doc/build/index.html | 52 ++- doc/build/objects.inv | Bin 550 -> 1598 bytes doc/build/py-modindex.html | 37 +- doc/build/search.html | 26 +- doc/build/searchindex.js | 2 +- doc/source/app.rst | 22 +- doc/source/camlib.rst | 22 +- doc/source/devman.rst | 15 + doc/source/flatcamobj.rst | 15 + doc/source/index.rst | 1 + 19 files changed, 1273 insertions(+), 117 deletions(-) create mode 100644 doc/source/devman.rst diff --git a/FlatCAM.py b/FlatCAM.py index 711fb9e7..3f807e0d 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -19,7 +19,7 @@ import simplejson as json from matplotlib.figure import Figure from numpy import arange, sin, pi from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas -from mpl_toolkits.axes_grid.anchored_artists import AnchoredText +#from mpl_toolkits.axes_grid.anchored_artists import AnchoredText from camlib import * import sys @@ -218,7 +218,7 @@ class FlatCAMObj: :param obj_dict: Dictionary representing a FlatCAMObj :type obj_dict: dict - :return None + :return: None """ return @@ -310,8 +310,8 @@ class FlatCAMGerber(FlatCAMObj, Gerber): geometry = self.solid_geometry else: geometry = self.buffered_paths + \ - [poly['polygon'] for poly in self.regions] + \ - self.flash_geometry + [poly['polygon'] for poly in self.regions] + \ + self.flash_geometry if self.options["multicolored"]: linespec = '-' @@ -418,7 +418,8 @@ class FlatCAMExcellon(FlatCAMObj, Excellon): x, y = ints.coords.xy self.axes.plot(x, y, 'g-') - self.app.plotcanvas.auto_adjust_axes() + #self.app.plotcanvas.auto_adjust_axes() + GLib.idle_add(self.app.plotcanvas.auto_adjust_axes) def show_tool_chooser(self): win = Gtk.Window() @@ -435,9 +436,9 @@ class FlatCAMExcellon(FlatCAMObj, Excellon): def on_accept(widget): win.destroy() tool_list = [] - for tool in self.tool_cbs: - if self.tool_cbs[tool].get_active(): - tool_list.append(tool) + for toolx in self.tool_cbs: + if self.tool_cbs[toolx].get_active(): + tool_list.append(toolx) self.options["toolselection"] = ", ".join(tool_list) self.to_form() @@ -758,10 +759,10 @@ class App: t1.start() #### For debugging only ### - def someThreadFunc(app_obj): + def somethreadfunc(app_obj): print "Hello World!" - t = threading.Thread(target=someThreadFunc, args=(self,)) + t = threading.Thread(target=somethreadfunc, args=(self,)) t.daemon = True t.start() @@ -1060,7 +1061,9 @@ class App: # Plot # TODO: (Thread-safe?) obj.plot() - self.on_zoom_fit(None) + + # TODO: Threading dissaster! + GLib.idle_add(lambda: self.on_zoom_fit(None)) return obj @@ -1420,19 +1423,26 @@ class App: def on_create_mirror(self, widget): """ - Creates a mirror image of a Gerber object to be used as a bottom - copper layer. + Creates a mirror image of an object to be used as a bottom layer. :param widget: Ignored. :return: None """ + # TODO: Move (some of) this to camlib! - # Layer to mirror - gerb_name = self.builder.get_object("comboboxtext_bottomlayer").get_active_text() - gerb = self.stuff[gerb_name] + # Object to mirror + try: + obj_name = self.builder.get_object("comboboxtext_bottomlayer").get_active_text() + fcobj = self.stuff[obj_name] + except KeyError: + self.info("WARNING: Cannot mirror that object.") + return - # For now, lets limit to Gerbers. - assert isinstance(gerb, FlatCAMGerber) + # For now, lets limit to Gerbers and Excellons. + # assert isinstance(gerb, FlatCAMGerber) + if not isinstance(fcobj, FlatCAMGerber) and not isinstance(fcobj, FlatCAMExcellon): + self.info("ERROR: Only Gerber and Excellon objects can be mirrored.") + return # Mirror axis "X" or "Y axis = self.get_radio_value({"rb_mirror_x": "X", @@ -1450,13 +1460,17 @@ class App: py = 0.5*(ymin+ymax) # Do the mirroring - xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] - mirrored = affinity.scale(gerb.solid_geometry, xscale, yscale, origin=(px, py)) + # xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] + # mirrored = affinity.scale(fcobj.solid_geometry, xscale, yscale, origin=(px, py)) + # + # def obj_init(obj_inst, app_inst): + # obj_inst.solid_geometry = mirrored + # + # self.new_object("gerber", fcobj.options["name"] + "_mirror", obj_init) - def obj_init(obj_inst, app_inst): - obj_inst.solid_geometry = mirrored - - self.new_object("gerber", gerb.options["name"] + "_mirror", obj_init) + fcobj.mirror(axis, [px, py]) + fcobj.plot() + #self.on_update_plot(None) def on_create_aligndrill(self, widget): """ @@ -1484,7 +1498,8 @@ class App: xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] # Tools - tools = {"1": self.get_eval("entry_dblsided_alignholediam")} + dia = self.get_eval("entry_dblsided_alignholediam") + tools = {"1": {"C": dia}} # Parse hole list # TODO: Better parsing @@ -1967,7 +1982,7 @@ class App: Callback for button on form for all kinds of objects. Re-plots the current object only. - :param widget: The widget from which this was called. + :param widget: The widget from which this was called. Ignored. :return: None """ diff --git a/camlib.py b/camlib.py index 16ccb453..79d2b175 100644 --- a/camlib.py +++ b/camlib.py @@ -237,7 +237,7 @@ class ApertureMacro: val = re.sub(r'\$[0-9a-zA-Z](?![0-9a-zA-Z])', "0", val) # Change x with * - val = re.sub(r'x', "\*", val) + val = re.sub(r'[xX]', "*", val) # Eval() and store. self.locvars[var] = eval(val) @@ -258,7 +258,7 @@ class ApertureMacro: part = re.sub(r'\$[0-9a-zA-Z](?![0-9a-zA-Z])', "0", part) # Change x with * - part = re.sub(r'x', "\*", part) + part = re.sub(r'[xX]', "*", part) ## Store elements = part.split(",") @@ -391,7 +391,7 @@ class ApertureMacro: pol, nverts, x, y, dia, angle = ApertureMacro.default2zero(6, mods) points = [(0, 0)]*nverts - for i in nverts: + for i in range(nverts): points[i] = (x + 0.5 * dia * cos(2*pi * i/nverts), y + 0.5 * dia * sin(2*pi * i/nverts)) @@ -483,8 +483,8 @@ class ApertureMacro: modifiers = modifiers or [] modifiers = [float(m) for m in modifiers] self.locvars = {} - for i in range(1, len(modifiers)+1): - self.locvars[str(i)] = modifiers[i] + for i in range(0, len(modifiers)): + self.locvars[str(i+1)] = modifiers[i] ## Parse self.primitives = [] # Cleanup @@ -543,7 +543,7 @@ class Gerber (Geometry): +------------+------------------------------------------------+ | Key | Value | +============+================================================+ - | loc | (list) [x (float), y (float)] coordinates. | + | loc | (Point) Shapely Point indicating location. | +------------+------------------------------------------------+ | aperture | (str) The key for an aperture in apertures. | +------------+------------------------------------------------+ @@ -560,6 +560,11 @@ class Gerber (Geometry): | aperture | (str) The key for an aperture in apertures. | +------------+-----------------------------------------------------+ + * ``aperture_macros`` (dictionary): Are predefined geometrical structures + that can be instanciated with different parameters in an aperture + definition. See ``apertures`` above. The key is the name of the macro, + and the macro itself, the value, is a ``Aperture_Macro`` object. + * ``flash_geometry`` (list): List of (Shapely) geometric object resulting from ``flashes``. These are generated from ``flashes`` in ``do_flashes()``. @@ -574,7 +579,6 @@ class Gerber (Geometry): g.create_geometry() do_something(s.solid_geometry) - """ def __init__(self): @@ -738,9 +742,7 @@ class Gerber (Geometry): ## Flashes for fl in self.flashes: - # TODO: Shouldn't 'loc' be a numpy.array()? - fl['loc'][0] *= factor - fl['loc'][1] *= factor + fl['loc'] = affinity.scale(fl['loc'], factor, factor, origin=(0, 0)) ## Regions for reg in self.regions: @@ -776,9 +778,7 @@ class Gerber (Geometry): ## Flashes for fl in self.flashes: - # TODO: Shouldn't 'loc' be a numpy.array()? - fl['loc'][0] += dx - fl['loc'][1] += dy + fl['loc'] = affinity.translate(fl['loc'], xoff=dx, yoff=dy) ## Regions for reg in self.regions: @@ -788,6 +788,36 @@ class Gerber (Geometry): # Now buffered_paths, flash_geometry and solid_geometry self.create_geometry() + def mirror(self, axis, point): + """ + + :param axis: "X" or "Y" indicates around which axis to mirror. + :type axis: str + :param point: [x, y] point belonging to the mirror axis. + :type point: list + :return: None + """ + + px, py = point + xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] + + ## Paths + for path in self.paths: + path['linestring'] = affinity.scale(path['linestring'], xscale, yscale, + origin=(px, py)) + + ## Flashes + for fl in self.flashes: + fl['loc'] = affinity.scale(fl['loc'], xscale, yscale, origin=(px, py)) + + ## Regions + for reg in self.regions: + reg['polygon'] = affinity.scale(reg['polygon'], xscale, yscale, + origin=(px, py)) + + # Now buffered_paths, flash_geometry and solid_geometry + self.create_geometry() + def fix_regions(self): """ Overwrites the region polygons with fixed @@ -1005,7 +1035,7 @@ class Gerber (Geometry): # Flash elif current_operation_code == 3: - self.flashes.append({"loc": [current_x, current_y], + self.flashes.append({"loc": Point([current_x, current_y]), "aperture": current_aperture}) continue @@ -1202,12 +1232,13 @@ class Gerber (Geometry): continue if aperture['type'] == 'C': # Circles - circle = Point(flash['loc']).buffer(aperture['size']/2) + #circle = Point(flash['loc']).buffer(aperture['size']/2) + circle = flash['loc'].buffer(aperture['size']/2) self.flash_geometry.append(circle) continue if aperture['type'] == 'R': # Rectangles - loc = flash['loc'] + loc = flash['loc'].coords[0] width = aperture['width'] height = aperture['height'] minx = loc[0] - width/2 @@ -1219,7 +1250,7 @@ class Gerber (Geometry): continue if aperture['type'] == 'O': # Obround - loc = flash['loc'] + loc = flash['loc'].coords[0] width = aperture['width'] height = aperture['height'] if width > height: @@ -1237,7 +1268,7 @@ class Gerber (Geometry): continue if aperture['type'] == 'P': # Regular polygon - loc = flash['loc'] + loc = flash['loc'].coords[0] diam = aperture['diam'] n_vertices = aperture['nVertices'] points = [] @@ -1252,7 +1283,7 @@ class Gerber (Geometry): continue if aperture['type'] == 'AM': # Aperture Macro - loc = flash['loc'] + loc = flash['loc'].coords[0] flash_geo = aperture['macro'].make_geometry(aperture['modifiers']) flash_geo_final = affinity.translate(flash_geo, xoff=loc[0], yoff=loc[1]) self.flash_geometry.append(flash_geo_final) @@ -1307,7 +1338,14 @@ class Excellon(Geometry): *ATTRIBUTES* * ``tools`` (dict): The key is the tool name and the value is - the size (diameter). + a dictionary specifying the tool: + + ================ ==================================== + Key Value + ================ ==================================== + C Diameter of the tool + Others Not supported (Ignored). + ================ ==================================== * ``drills`` (list): Each is a dictionary: @@ -1524,14 +1562,20 @@ class Excellon(Geometry): print "WARNING: Line ignored:", eline def create_geometry(self): + """ + Creates circles of the tool diameter at every point + specified in ``self.drills``. + + :return: None + """ self.solid_geometry = [] for drill in self.drills: - poly = Point(drill['point']).buffer(self.tools[drill['tool']]["C"]/2.0) + #poly = drill['point'].buffer(self.tools[drill['tool']]["C"]/2.0) + tooldia = self.tools[drill['tool']]['C'] + poly = drill['point'].buffer(tooldia/2.0) self.solid_geometry.append(poly) - #self.solid_geometry = cascaded_union(self.solid_geometry) - def scale(self, factor): """ Scales geometry on the XY plane in the object by a given factor. @@ -1564,6 +1608,27 @@ class Excellon(Geometry): for drill in self.drills: drill['point'] = affinity.translate(drill['point'], xoff=dx, yoff=dy) + # Recreate geometry + self.create_geometry() + + def mirror(self, axis, point): + """ + + :param axis: "X" or "Y" indicates around which axis to mirror. + :type axis: str + :param point: [x, y] point belonging to the mirror axis. + :type point: list + :return: None + """ + + px, py = point + xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis] + + # Modify data + for drill in self.drills: + drill['point'] = affinity.scale(drill['point'], xscale, yscale, origin=(px, py)) + + # Recreate geometry self.create_geometry() def convert_units(self, units): @@ -2258,6 +2323,7 @@ def plotg(geo): print "Cannot plot:", str(type(g)) continue + def parse_gerber_number(strnumber, frac_digits): """ Parse a single number of Gerber coordinates. diff --git a/doc/build/.doctrees/camlib.doctree b/doc/build/.doctrees/camlib.doctree index e4445f1c4abcdda06b3b69ddb8b793ddab8b10c7..6eafcfdda73c6524a8bff8bee05830b7cfd15556 100644 GIT binary patch literal 184511 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

{(xoX3@1Ibmg1Whl--S7{h>1ijmo*J{%Yn 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 VYob5LGqlNm$RJLPYq_=Q{{Sy4XYc?3 literal 131939 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 diff --git a/doc/build/.doctrees/index.doctree b/doc/build/.doctrees/index.doctree index 2b6da0493cb576c53707ee1d74d519a5f23cd462..2a44d653b239e49f2717dffc3e7e344d0b93a47e 100644 GIT binary patch delta 2765 zcmZ{md2l3E9mg}fn`CB^nPeuJ-H^>@FBWDuW@VS<$O?a0RIN~{8j31kRjRb@?dg7* z*QAg6z4v-|g0yj6z^n(?LtPaQ!~+#%@fH;o5Kur-LB$IYPdwHG5b*rH?wM?|RaPZk zZ+`uI-}n7}-qrU{JUMYJ=-pSF>FMg~a_9ly3ZQWnFiLuu>o_z3_Xz2C1KW!nI_r8= zz@-MvRhh+XMp=WBtZ%g(+LR1DbyM%Ui~SgaDjOkP>=d?&jj|1FBiq9^#}HQ8=?1GB z>@;e=y62n_`Jv#qzo4~7d z(pxowOGY)Yx7nh}+@Q77a-7sjlLn3(G|U!`nuoWe&ebto)6qH79=Csa8eFSYuT#f! zV*}SOk{tGw7H?1qN{!|>XKql(`!=j4Js8Kb;T`O?DGeO|ohrO=byKz=tpp)u-?u|ClC!a||EG^kv}v5P2lvKXL**OK5*Iq5ZLh_AN1d zT>IBaH!r9C2~GRF_1fSkndW(G47YVMZ)s;H1V2?Jy_(&8lg_NhIIUt~%>+_yP% zJ3<^^XtPVyjxo*cju<|jsv)<}bhv%C%5G%0uORlhmBen9KWwinY|PxZ99yDxe}e6S7`~ONA+~RKusx`; z-M0eULo2b}qYXWb*z}>7mJHuPXy1+D5!6edJ+Km5-BRm|>leOPBZb*8ltCz|iBl`! z`!W20WU(1oJ|2#b#_$*!6!U&P^vq7CfFBz0BT}*=8Fpf6?;jiRI2k@EJ$>~P1Aae8SwK3efW@mJK~%M`sfNM{Gvw6l3Rh84Y_Zk2VphP$P)%UseLs=E-8nn zY9#AArocTd;g{1HQdn+Az|#i&iWEAdr4D`_!*9qS?i-g=TbkIlg6DyN-x}~ck`+`+ zJYxj>UR^XWcHuK2{2_)vR!MoO!n$S8p~X1?f5HKWP$cAziFXB_PBgGxbou8R>F2Yy zS+@i=BksX*b=$!B!e2-ZOR}j}fWI!1Vv{ztCyHg;*zIpMQWTQAP16p2A5jSSJI;&@ zwNhu$XGu4{;q&kuDR@@Uh>#2BI~1NLtMFp`2gx~>q=>|C!VB6+0?YL1)B)CvjTSS6^klB(%`-P9&)`SR8 z9l^J%r-p_yr>f_Mwr$;}2f*VdkXFlNZi9LFFZpRYyv7TW$m#0*;Vn~D3|yKlr=s5X z=83wt>(o`Q!*}RL5%2cp{3q1W;Vo-lhOcmY;pWjR!c0B``J{Sec*F2ce6>jWxOET- zSapv&{N*ZBsbtPj>nh_H?!wp8U1YWE2)-NJF+UTZRaRoVS(*6}DdU9W4wLvD6$WN< shVng0;#v5_Psa)TEa7LXxUyr@IT$hcx%f;zL$u~plDZe4QGMtC0M=N@JOBUy delta 2722 zcmZ{md2k#@6^A9+l6Gb7>Xt2AvLq)?R#Idf+kwPDRjR1sC>8oEU8ss|jb>+B+hfhn z?Cb8aS0RHi5F$eYaT*K+5->-AkdTBU2PDCPkZ>p5H!(Ni3ila~_j-42si;&*TQjfU zd;NP~zwVyXGmp&N5p~XU)*%Al=Mj{TvF;%9!o=rGLC6(|A_N8D3Qus(G8MPx^Qsnb zXs#_0({nj7P)tg0QsPNTTsU7h_^vJXcJnpv`1% z@S-zW5;6O9p@*+J3P)0?VRk`jz+9Wz)whCkUXjAf(8^jUxjB^?Ja8qYP7AD~l!PJI z@bZOL)H96*P#N`lri!G0q^W<^WU`}~S75rMDZJ8Lkli-+D$I99T`bFnfznQ(c?Dig z$*(eQc68!3;&~WwbqZ^wiu{i@ihBV$9i!qpMhMSq&E47Ym%I+WuSwzBruWs2?A=w4 ztfI10lY9wYPqA+(uugo@D^ZTOl(Oi=g*jZwnWtvmN zJ8i3Bx8a{4j7kV%BV4j0G(ZR(^j65*gBE0+TDhP}IJr@0YE&7{NcpvE}r<3c^ zzn{=QXFCb}fFSI*r0~I}=gkdI3;Ndo2Q98!6UWWzEt9RcA=I5spf=lw1aZ4Pg*)om zklUS2ZXYg)8^moJh<#)uv0F&cM;pYNHNwXb*j*{yjTvnd-)@14CZ^mOPWPm6uer5* zB;RPuI*^YOkbR%9K<-Q7eoV8FJ3~@&S9)R*9zaC*tVi@oi)aTaI%N?(n8K&1DDu2- zJ)%!P9U{n$w?4EUkY&E6;^B)3 z=u0Vlxe4gujett7*^}RK*`xC;w-m=ZiZyqzixfPT!dF-ZA0xMdr_WbY_!{d~E0t0l zI!#XnUoXNpSf88dxM{0Lf3pbRGB@V8u70}+-(guV(5?>RNWpiD@I5*=Shtr*$s_HA zLB!$v^Q>P>H&RQntT;HKa?3dD4~pbt%<`N#CXPLlv6mDJ(r{`K(ZvD&(epG}X zvs`mBQZl9BCn@}t_2P~QB=@va-}nlCR)n9kjN)43;i2Fc=JKA=&R@pxL<+w$t3AUr zzsCFn7!ph0!2=&p86J57iu%nw>y}HNQ*sq|5*fm8&8eQ9tG{DetiaN=)O-ZElXR`5sGjw5mf{={;j8U+|5G<-ySd;}0f1hVv!VM8KCx?H`wXykIBzme-|(T$ zc4&y`(e+D&9lSeG61G4)&5^;e+1+~&__Bju`*J9$=5yO1IkBEN+r2P8!tYHgdy2 z{D^Rl1ilt>q_xHD9~hk2P9yE?vgf0Q9rWDk)J4cqdb`wI*>>ra9HZwRyec)XY3kgn zi%Y!|t$2^(y~U+VEXU1b14C02XvUsY72KZ=BzTr6If*v>prYk$ZWy`Cwcp8VW=^CtTcPTkzo){dPz5s{T*cRy?LE;3|m$PW1BgVFF^PG@- z%-*4$FMI}#wXjWrujF2QPUVI8TM&I>pXe9M3F}u$2{)m}&xbg2>=7#WS;zhOi(hav j_@N>Xm=i -

  • Camlib
  • -
  • FlatCAM Objects
  • +
  • Camlib +
  • +
  • FlatCAM Objects +
  • FlatCAM Application +
  • +
  • FlatCAM Developer Manual
  • @@ -124,6 +142,8 @@

    Camlib

    +
    +

    Geometry

    class camlib.Geometry
    @@ -262,6 +282,9 @@ Attributes to include are listed in +

    Gerber

    class camlib.Gerber(Geometry)
    @@ -283,7 +306,7 @@ type key is always present and the rest depend on the key: type -(str) “C”, “R”, or “O” +(str) “C”, “R”, “O”, “P”, or “AP” others Depend on type @@ -329,7 +352,7 @@ is a dictionary: loc -(list) [x (float), y (float)] coordinates. +(Point) Shapely Point indicating location. aperture (str) The key for an aperture in apertures. @@ -361,6 +384,10 @@ associated with a region. Each is a dictionary:
      +
    • aperture_macros (dictionary): Are predefined geometrical structures +that can be instanciated with different parameters in an aperture +definition. See apertures above. The key is the name of the macro, +and the macro itself, the value, is a Aperture_Macro object.
    • flash_geometry (list): List of (Shapely) geometric object resulting from flashes. These are generated from flashes in do_flashes().
    • buffered_paths (list): List of (Shapely) polygons resulting from @@ -376,23 +403,32 @@ generated from paths
    -aperture_parse(gline)
    +aperture_parse(apertureId, apertureType, apParameters)

    Parse gerber aperture definition into dictionary of apertures. The following kinds and their attributes are supported:

    • Circular (C): size (float)
    • Rectangle (R): width (float), height (float)
    • Obround (O): width (float), height (float).
    • +
    • Polygon (P): diameter(float), vertices(int), [rotation(float)]
    • +
    • Aperture Macro (AM): macro (ApertureMacro), modifiers (list)
    - + - + - +
    Parameters:gline (str) – Line of Gerber code known to have an aperture definition.
    Parameters:
      +
    • apertureId (str) – Id of the aperture being defined.
    • +
    • apertureType (str) – Type of the aperture.
    • +
    • apParameters (str) – Parameters of the aperture.
    • +
    +
    Returns:Identifier of the aperture.
    Returns:

    Identifier of the aperture.

    +
    Return type:str
    Return type:

    str

    +
    @@ -402,8 +438,15 @@ 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

    +by their appertures. This will only work for circular appertures.

    + +++ + + + +
    Returns:None
    @@ -428,6 +471,14 @@ and regions naturally do as well.

    fix_regions()

    Overwrites the region polygons with fixed versions if found to be invalid (according to Shapely).

    + +++ + + + +
    Returns:None
    @@ -469,6 +520,26 @@ box in both positive and negative, x and y axes.

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

    +
    +
    +mirror(axis, point)
    +
    +++ + + + + + +
    Parameters:
      +
    • axis (str) – “X” or “Y” indicates around which axis to mirror.
    • +
    • point (list) – [x, y] point belonging to the mirror axis.
    • +
    +
    Returns:

    None

    +
    +
    +
    offset(vect)
    @@ -480,10 +551,17 @@ These are:

  • 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

    +are re-created with self.create_geometry().

    + +++ + + + + + +
    Parameters:vect (tuple) – (x, y) offset vector.
    Returns:None
    @@ -491,6 +569,16 @@ are re-created with self.create_g parse_file(filename)

    Calls Gerber.parse_lines() with array of lines read from the given file.

    + +++ + + + + + +
    Parameters:filename (str) – Gerber file to parse.
    Returns:None
    @@ -533,13 +621,251 @@ are re-created with self.create_g
    +
    +
    +

    ApertureMacro

    +
    +
    +class camlib.ApertureMacro(name=None)
    +
    +
    +append(data)
    +

    Appends a string to the raw macro.

    + +++ + + + + + +
    Parameters:data (str) – Part of the macro.
    Returns:None
    +
    + +
    +
    +static default2zero(n, mods)
    +

    Pads the mods list with zeros resulting in an +list of length n.

    + +++ + + + + + + + +
    Parameters:
      +
    • n (int) – Length of the resulting list.
    • +
    • mods (list) – List to be padded.
    • +
    +
    Returns:

    Zero-padded list.

    +
    Return type:

    list

    +
    +
    + +
    +
    +static make_centerline(mods)
    +
    +++ + + + + + +
    Parameters:mods – (Exposure 0/1, width >=0, height >=0, x-center, y-center, +rotation angle around origin in degrees)
    Returns:
    +
    + +
    +
    +static make_circle(mods)
    +
    +++ + + + + + +
    Parameters:mods – (Exposure 0/1, Diameter >=0, X-coord, Y-coord)
    Returns:
    +
    + +
    +
    +make_geometry(modifiers)
    +

    Runs the macro for the given modifiers and generates +the corresponding geometry.

    + +++ + + + +
    Parameters:modifiers (list) – Modifiers (parameters) for this macro
    +
    + +
    +
    +static make_lowerleftline(mods)
    +
    +++ + + + + + +
    Parameters:mods – (exposure 0/1, width >=0, height >=0, x-lowerleft, y-lowerleft, +rotation angle around origin in degrees)
    Returns:
    +
    + +
    +
    +static make_moire(mods)
    +

    Note: Specs indicate that rotation is only allowed if the center +(x, y) == (0, 0). I will tolerate breaking this rule.

    + +++ + + + + + +
    Parameters:mods – (x-center, y-center, outer_dia_outer_ring, ring thickness, +gap, max_rings, crosshair_thickness, crosshair_len, rotation +angle around origin in degrees)
    Returns:
    +
    + +
    +
    +static make_outline(mods)
    +
    +++ + + + + + +
    Parameters:mods
    Returns:
    +
    + +
    +
    +static make_polygon(mods)
    +

    Note: Specs indicate that rotation is only allowed if the center +(x, y) == (0, 0). I will tolerate breaking this rule.

    + +++ + + + + + +
    Parameters:mods – (exposure 0/1, n_verts 3<=n<=12, x-center, y-center, +diameter of circumscribed circle >=0, rotation angle around origin)
    Returns:
    +
    + +
    +
    +static make_thermal(mods)
    +

    Note: Specs indicate that rotation is only allowed if the center +(x, y) == (0, 0). I will tolerate breaking this rule.

    + +++ + + + + + +
    Parameters:mods – [x-center, y-center, diameter-outside, diameter-inside, +gap-thickness, rotation angle around origin]
    Returns:
    +
    + +
    +
    +static make_vectorline(mods)
    +
    +++ + + + + + +
    Parameters:mods – (Exposure 0/1, Line width >= 0, X-start, Y-start, X-end, Y-end, +rotation angle around origin in degrees)
    Returns:
    +
    + +
    +
    +parse_content()
    +

    Creates numerical lists for all primitives in the aperture +macro (in self.raw) by replacing all variables by their +values iteratively and evaluating expressions. Results +are stored in self.primitives.

    + +++ + + + +
    Returns:None
    +
    + +
    + +
    +
    +

    Excellon

    -class camlib.Excellon
    +class camlib.Excellon(Geometry)

    ATTRIBUTES

    • tools (dict): The key is the tool name and the value is -the size (diameter).
    • +a dictionary specifying the tool: +
    + ++++ + + + + + + + + + + + + + +
    KeyValue
    CDiameter of the tool
    OthersNot supported (Ignored).
    +
    • drills (list): Each is a dictionary:
    @@ -561,6 +887,41 @@ the size (diameter).
    +
    +
    +create_geometry()
    +

    Creates circles of the tool diameter at every point +specified in self.drills.

    + +++ + + + +
    Returns:None
    +
    + +
    +
    +mirror(axis, point)
    +
    +++ + + + + + +
    Parameters:
      +
    • axis (str) – “X” or “Y” indicates around which axis to mirror.
    • +
    • point (list) – [x, y] point belonging to the mirror axis.
    • +
    +
    Returns:

    None

    +
    +
    +
    offset(vect)
    @@ -631,9 +992,12 @@ Tool sizes, feedrates an Z-plane dimensions are untouched.

    +
    +
    +

    CNCJob

    -class camlib.CNCjob(units='in', kind='generic', z_move=0.1, feedrate=3.0, z_cut=-0.002, tooldia=0.0)
    +class camlib.CNCjob(Geometry)

    Represents work to be done by a CNC machine.

    ATTRIBUTES

      @@ -865,6 +1229,7 @@ not altered.

    +
    diff --git a/doc/build/genindex.html b/doc/build/genindex.html index a710b245..09641e6a 100644 --- a/doc/build/genindex.html +++ b/doc/build/genindex.html @@ -80,11 +80,29 @@ @@ -132,19 +150,46 @@ | G | I | L + | M + | N | O | P + | R | S | T + | V + | Z

    A

    +
    +
    adjust_axes() (FlatCAM.PlotCanvas method) +
    + +
    aperture_parse() (camlib.Gerber method)
    + +
    ApertureMacro (class in camlib) +
    + +
    + +
    App (class in FlatCAM) +
    + + +
    append() (camlib.ApertureMacro method) +
    + + +
    auto_adjust_axes() (FlatCAM.PlotCanvas method) +
    +
    @@ -155,10 +200,18 @@
    bounds() (camlib.Geometry method)
    + +
    buffer_paths() (camlib.Gerber method) +
    +
    -
    buffer_paths() (camlib.Gerber method) +
    build_list() (FlatCAM.App method) +
    + + +
    build_ui() (FlatCAM.FlatCAMObj method)
    @@ -172,6 +225,10 @@ +
    clear() (FlatCAM.PlotCanvas method) +
    + +
    clear_polygon() (camlib.Geometry method)
    @@ -182,13 +239,29 @@
    -
    convert_units() (camlib.Geometry method) +
    connect() (FlatCAM.PlotCanvas method)
    -
    create_geometry() (camlib.Gerber method) +
    convert_units() (camlib.Geometry method)
    +
    + +
    (FlatCAM.FlatCAMGerber method) +
    + +
    + +
    create_geometry() (camlib.Excellon method) +
    + +
    + +
    (camlib.Gerber method) +
    + +
    @@ -196,6 +269,16 @@ + +
    +
    default2zero() (camlib.ApertureMacro static method) +
    + + +
    deserialize() (FlatCAM.FlatCAMObj method) +
    + +
    +
    do_flashes() (camlib.Gerber method)
    @@ -216,15 +299,47 @@ + - - +
    +
    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)
    @@ -251,8 +366,6 @@
    generate_from_geometry() (camlib.CNCjob method)
    -
    Geometry (class in camlib)
    @@ -261,14 +374,28 @@
    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) +
    +
    @@ -276,6 +403,10 @@ + +
    +
    info() (FlatCAM.App method) +
    + +
    int_digits (camlib.Gerber attribute)
    @@ -295,6 +426,86 @@
    linear2gcode() (camlib.CNCjob method)
    +
    + +
    load_defaults() (FlatCAM.App method) +
    + +
    + +

    M

    + + + +
    + +
    make_centerline() (camlib.ApertureMacro static method) +
    + + +
    make_circle() (camlib.ApertureMacro static method) +
    + + +
    make_geometry() (camlib.ApertureMacro method) +
    + + +
    make_lowerleftline() (camlib.ApertureMacro static method) +
    + + +
    make_moire() (camlib.ApertureMacro static method) +
    + + +
    make_outline() (camlib.ApertureMacro static method) +
    + +
    + +
    make_polygon() (camlib.ApertureMacro static method) +
    + + +
    make_thermal() (camlib.ApertureMacro static method) +
    + + +
    make_vectorline() (camlib.ApertureMacro static method) +
    + + +
    mirror() (camlib.Excellon method) +
    + +
    + +
    (camlib.Gerber method) +
    + +
    + +
    mpl_connect() (FlatCAM.PlotCanvas method) +
    + +
    + +

    N

    + + +
    + +
    new_axes() (FlatCAM.PlotCanvas method) +
    + +
    + +
    new_object() (FlatCAM.App method) +
    +
    @@ -307,6 +518,10 @@
    +
    (FlatCAM.FlatCAMGeometry method) +
    + +
    (camlib.Excellon method)
    @@ -319,6 +534,236 @@
    + +
    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) +
    +
    @@ -326,6 +771,10 @@
    +
    parse_content() (camlib.ApertureMacro method) +
    + +
    parse_file() (camlib.Excellon method)
    @@ -346,31 +795,89 @@
    +
    plot() (FlatCAM.FlatCAMGeometry method) +
    + +
    + +
    (FlatCAM.FlatCAMObj 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)
    @@ -383,9 +890,47 @@
    + +
    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)
    @@ -399,6 +944,32 @@
    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 6c3d79de..1b9a0320 100644 --- a/doc/build/index.html +++ b/doc/build/index.html @@ -80,11 +80,29 @@ @@ -126,11 +144,29 @@

    Contents:

    diff --git a/doc/build/objects.inv b/doc/build/objects.inv index c6a6fd8deb99d1c18c742ad96dafe77f6f297009..4813174880665682863593dca7648a66dbbac94b 100644 GIT binary patch delta 1495 zcmV;|1t|Ka1ilQAd4E~KZsax$z3*2H&|Wj>=D4>YXp0`wF3=AUWQq1DktJ7>Cz*VG zDcR%L9*<4=ve`JIC6SNhdvtB3G7>%xKFA-M7oZOh-w(~@q3-{1JcU~Sa(J<_)o}PL zKKfRHSunaj?Jc^c9=H>y>B8<=zwF;`!B1YnH^FPI3f%oi-G6QO+o5~Zt?eE@{Car! z_J`)-`RQe{w8Uq)+!n9*mLH#*=GfS##b1HpLJ+|-Ve7)CH$gaAdH8Pk#-#&^mbG!X>u}&AngPZ8&FlvSS5-LEVH4<9KG$L3@`7jUZu-w!xF# z2pGZu$K8^Q$e6UT_ULIXPs@t>sEiep#tc$hq4PePINi zcRL0@5t`53oVg#T{yNV3EtI$TmmG**fzkowaWk!^zE8=^QqV~*`MTOPCpY(-RK#P= z-++Y^xPO`_Wcq-Y7Sw=nOyYA&M_v;uPR!CM_hs`5Ey@{M@TT6a^jMf?TqmOG} zNDA8;qzo0yDFtmK<15Goj|94uuwBJ>DRGlmGjP{em|8h!9XSZU_Z??^#x>86@W$n9 zi$(mV4X>cPvHDV3^LX2$)({qZu;Wr$cILXJ1AnaBlzOu%zt{^(%>S~C_Bs8bXqA?! zCDPU#c;9^gw2LgDVvG3}ltMb5P0@$Z zV}DXrs@sT%;8f9KMAlEZ(i_%}_y(68LOP=`Th(H6u{9wvBfO|r5FCv)h)f1j1xu%_ z9nC>;&{!Ap*!>llxQ5JF2aj}8%^GxOV69QX)2UsuE!77irHUumMJI0}NUYykc5}j< zofC=l((7@5x0LNt%}h2>L`jGK6-$ksUVpQ-eFvwZ3{iOGSMDq9I;KQ-O0Su}8U|f# zEAd82`zb(+wk)Fw52vhp@9g`~S0p(Ud$rtLdh(7^=F)qioY0hD&ZE*X8X9>RY1Wug zd#)L46?qsj)ju9DOOV!AHtKSe*0lpVfUm(t-|OX`cowmPD z%tWZ;f;fFx;m#=AQ4rBGd+{|LC&o?}@KqVdm)OHGb50wQVR6r1%07NV_t7(x_alAS z6sXg~(v`wY6Xj|JQ6!z$*Fd>%*0$JKw-h)gQsuyVR&e43N14*ni6R-^g9que-NA(Z zh3{*8g++;_8crDZFJ#aet5A>4%%G*A+}c4CBsg6FF2jKpm&66KzE6nOxp`u*Nl!fK xV-DbxsLByJv(J#LGlRuXAXKh=i7a1J~^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_)pVJCrrHD*bo2! diff --git a/doc/build/py-modindex.html b/doc/build/py-modindex.html index 6a942a4e..765eb2ff 100644 --- a/doc/build/py-modindex.html +++ b/doc/build/py-modindex.html @@ -86,11 +86,29 @@ @@ -129,7 +147,8 @@

    Python Module Index

    - c + c | + f
    @@ -141,6 +160,14 @@ + + + + +
    camlib
     
    + f
    + FlatCAM +
    diff --git a/doc/build/search.html b/doc/build/search.html index 37fd385e..4be7b0b0 100644 --- a/doc/build/search.html +++ b/doc/build/search.html @@ -87,11 +87,29 @@ diff --git a/doc/build/searchindex.js b/doc/build/searchindex.js index e04bdf17..ec8e1fa1 100644 --- a/doc/build/searchindex.js +++ b/doc/build/searchindex.js @@ -1 +1 @@ -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 +Search.setIndex({envversion:42,terms:{represent:2,all:[1,2,3,4],code:[1,2,3],toolpath:3,replot:1,focus:1,follow:3,on_key_over_plot:1,make_outlin:3,whose:[1,4],make_circl:3,get_ev:1,on_options_upd:[1,4],flash:3,gerber:1,program:1,text:[1,3],plot_al:1,geom:3,spec:3,cnc:[1,3],digit:3,sourc:3,everi:3,string:[1,3],far:1,mous:1,"5e6cff":3,obround:3,affect:3,on_cb_plot_toggl:1,toolshap:3,button:1,list:[1,3],iter:[3,4],item:1,vector:[1,2,3],specal:1,vertic:3,round:[1,3],get_radio_valu:1,create_geometri:3,natur:3,dimens:[2,3],resourc:1,zero:3,pass:[1,3],rectangular:3,click:1,append:[2,3],index:0,what:4,load_default:1,new_ax:1,neg:[1,3],current:1,delet:1,clipboard:1,"new":[1,2,4],method:[1,2,3],whatev:1,widget:[1,4],default2zero:3,flatcamgeometri:1,gener:[1,2,3],onli:[1,3],matplotlib:[1,2,3],adjust_ax:1,on_create_aligndril:1,path:[1,3],along:[3,4],do_someth:3,modifi:[1,2,3,4],make_moir:3,valu:[1,3,4],box:[1,3],convert:[2,3],on_file_saveprojectcopi:1,action:1,chang:[1,3,4],on_activate_nam:1,on_options_object2app:1,diamet:3,via:1,primit:3,modul:0,on_fileopengerb:1,filenam:[1,3],ymin:[1,3],select:1,frac_digit:[1,3],plot:[1,2,3],from:[1,2,3,4],describ:3,doubl:1,regist:1,setup_component_editor:1,call:[1,2,3,4],flash_geometri:3,dict:[1,2,3],type:[1,2,3,4],start:[1,3],toggl:1,more:3,on_toolbar_replot:1,on_delet:1,combo:1,on_gerber_generate_cutout:1,parse_fil:3,known:1,hole:1,must:[1,3,4],on_file_openproject:1,none:[1,2,3],left:1,ser_attr:3,work:3,uniqu:1,gtext:3,crosshair_thick:3,can:[1,2,3,4],drill:[2,3],z_move:2,fetch:[2,4],overrid:[2,3],meant:1,polygon2gcod:3,give:3,process:[1,3],share:1,indic:3,stroke:3,minimum:1,tab:[1,4],xmin:[1,3],serial:2,z_cut:2,apertureid:3,alwai:3,surfac:3,end:3,hadler:1,fix_region:3,write:3,fals:3,circular:3,b5ab3a:3,recogn:4,make_polygon:3,after:1,befor:[1,2],plane:3,mai:1,circumscrib:3,data:[1,3],subsequ:1,entry_text:1,correspond:[1,3],element:[3,4],callback:1,"switch":1,maintain:1,allow:3,enter:1,on_fileopenexcellon:1,on_file_saveprojecta:1,parse_cont:3,travel:3,checkbox:1,rotat:3,over:[1,4],through:[1,4],untouch: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,creat:[1,2,3],pcb:1,on_options_app2object:1,main:[1,3],alter:3,on_zoom_out:1,non:3,"float":[1,2,3],"return":[1,2,3],thei:[2,3,4],handl:[1,2],rectangl:3,number:[1,3],"break":3,vect:[2,3],build_list:1,project_filenam:1,choic:1,name:[1,2,3,4],edit:4,separ:[1,3],solid_geometri:3,each:[3,4],found:3,updat:[1,4],gui:[1,2,4],read_form:[1,2],parse_lin:3,on_closewindow:1,replac:3,continu:[1,2],"static":3,connect:1,aperturetyp:3,event:1,out:1,variabl:[1,3],on_eval_upd:1,generate_from_excellon_by_tool:3,content:[0,1],adjust:1,set_current_pag:1,clear_polygon:3,on_scrol:1,flatcamcncjob:1,linear:3,insid:3,written:4,precaut:1,given:[1,2,3],flatcamexcellon:1,base:[1,2],dictionari:[1,2,3],org:1,care:1,file_chooser_act:1,generate_from_geometri:3,thread:1,launch:1,angl:3,success:1,motion:1,turn:1,length:3,notebook:1,place:[1,4],outsid:3,geometri:1,treeselect:1,onto:3,support:3,first:4,origin:[1,3],copper:1,on_zoom_in:1,arrai:3,independ:4,f0e24d:3,restrict:1,saepar:1,done:[1,3,4],overwrit:3,thick:3,open:[1,4],predefin:3,size:[1,3],differ:3,setup_obj_class:1,on_toggle_unit:1,associ:[1,2,3],interact:2,flatcamobj:1,attach:[1,2],circl:3,store:[3,4],editor:1,option:[1,3],ratio:[1,2],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,exposur:3,kind:[1,2,3,4],whenev:1,tree:1,entry_ev:1,structur:3,project:[1,4],str:[1,2,3],macro:3,posit:3,"function":[1,4],thereaft:4,ani:[1,3],compon:1,do_flash:3,raw:3,"_app_":[1,4],have:[1,3],inform:1,self:[1,2,3],note:[1,3],also:3,on_options_object2project:1,build:[1,2],which:[1,2,3,4],event_handl:1,interior:3,on_success:1,singl:3,simplifi:3,buffer:3,previou:1,on_mouse_mov:1,pair:[1,3],alpha:3,segment:3,"class":[1,2,3],set_progress_bar:1,appertur:3,clear:[1,2],later:2,cover:[1,3],on_mouse_move_over_plot:1,populate_objects_combo:1,make_centerlin:3,axi:[1,3],thicken:3,show:1,on_click_over_plot:1,apertur:3,radiu:3,syntax:[1,4],radio:1,corner:[1,3],find:1,crosshair_len:3,on_scale_object:1,new_object:1,slow:3,locat:3,menu:1,configur:[1,2],activ:1,state:1,comboboxtext:1,version:[1,2,3],suppos:4,factor:[1,2,3],elin:3,on_options_combo_chang:1,overwritten:4,hit:1,get:[1,2,4],express:3,nativ:1,on_options_app2project:1,mpl_connect:1,multipolygon:3,bar:1,on_create_mirror:1,coord:3,"default":[1,3,4],to_dict:3,xmax:[1,3],contain:[1,4],comma:3,movement:1,where:[1,3,4],dpi:3,user:[1,2],set:[1,2,3],noth:1,keyboard:1,startup:[1,4],on_cncjob_exportgcod:1,displai:1,"4650bd":3,see:[1,3],result:[1,3],arg:1,transpar:[2,3],close:1,contour:3,statu:1,detect:4,kei:[1,2,3,4],boundari:3,label:1,figur:[1,2],max_r:3,between:1,progress:1,wether:3,attribut:3,accord:3,extend:2,numer:3,complement:3,isol:1,job:[1,3],entir:3,here:1,extent:1,toler:3,auto_adjust_ax:1,popul:[1,3,4],both:3,feedrat:[2,3],rtype:[1,3],options2form:1,alon:3,setup_project_list:1,on_generate_gerber_bounding_box:1,lowerleft:3,whole:[1,3],col:1,obj_dict:2,load:1,cncjob:1,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],convert_unit:[2,3],addition:3,been:1,mark:1,pute:1,json:[1,2,4],get_curr:1,toolbar:1,open_project:1,subscrib:1,immedi:1,radio_set:1,gcode:3,imag:1,search:0,gap:3,on_file_savedefault:[1,4],coordin:[1,3],on_options_project2object:1,func:1,present:3,versioncheck:1,inhibit:1,therefor:[1,4],apparamet:3,look:3,align:1,properti:[1,3],pixel:1,dest:1,defin:[1,3],"while":1,setup_ax:2,abov:3,margin:3,region:3,propag:1,layer:1,them:2,equal:3,itself:3,exterior:3,on_fileopengcod:1,"__init__":1,around:[1,3],make_lowerleftlin:3,belong:3,same:[1,4],respresent:3,instanc:1,pad:3,descend:[2,3],tool_toler:3,complet:1,http:1,widget_nam:1,upon:[1,4],alert:1,initi:1,canva:[1,2],implement:2,appropri:[1,3],off:1,center:[1,3],build_ui:2,well:3,inherit:4,without:1,on_file_new:1,thi:[1,2,3,4],choos:1,on_generate_paintarea:1,make_vectorlin:3,rout:1,latest:1,distanc:3,identifi:[3,4],entri:1,isolation_geometri:3,"true":[1,3],flatcamgerb:1,rest:3,shape:3,aspect:[1,2],linestr:3,speed:3,previous:4,cut:[1,3],on_tools_doublesid:1,trigger:1,shortcut:1,add:2,other:[1,3],board:1,save:[1,3,4],pre_pars:3,take:1,gcode_pars:3,format:2,read:[1,2,3,4],on_file_saveproject:1,background:2,press:1,height:3,mod:3,like:1,specif:[1,2,3],ring:3,zoom:1,integ:3,instanci:3,from_dict:3,necessari:1,either:1,exobj:3,on_clear_plot:1,page:[0,1],depend:[1,2,3],int_digit:3,creation:[1,4],back:1,percentag:1,on_zoom_fit:1,radiobutton:1,"export":2,mirror:[1,3],set_form_item:[1,2],on_generate_excellon_cncjob:1,scale:[1,2,3],bottom:1,definit:3,overlap:3,on_update_plot:1,buffer_path:3,unit:[1,2,3],duplic:1,refer:4,machin:3,object:[1,3,4],run:[1,3],usag:3,how:4,offset:[1,2,3],on_toggle_pointbox:1,about:1,actual:[2,3],file_chooser_save_act:1,on_generate_cncjob:1,side:1,degre:3,dialog:1,constructor:1,options_update_ignor:1,make_therm:3,on_about:1,chooser:1,within:3,encod:3,bound:[1,3],excellon:1,loc:3,accordingli:1,ymax:[1,3],wai:[3,4],area:[1,3],outer_dia_outer_r:3,transfer:1,n_vert:3,fast:3,make_geometri:3,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,whether:2,access:1,maximum:1,tooldia:[2,3],record:1,limit:1,featur:3,buffered_path:3,evalu:3,"int":3,request:1,dure:3,parser:3,aperture_pars:3,repres:[2,3],plot2:3,on_row_activ:1,exist:2,file:[1,3,4],doe:[1,3],check:1,again:3,aplic:1,polygon:[1,3],titl:1,to_form:2,when:[1,3,4],detail:1,invalid:3,field:1,valid:1,bool:[2,3],gline:3,ignor:[1,3],on_options_project2app:1,read_form_item:[1,2],deseri:[2,3],on_tree_selection_chang:1,draw:[1,3],event_nam:1,eval:1,outdat:1,rule:3,geometr:[2,3],aperture_macro:3,on_filequit:1,scroll:1},objtypes:{"0":"py:module","1":"py:method","2":"py:class","3":"py:staticmethod","4":"py:attribute"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","class","Python class"],"3":["py","staticmethod","Python static method"],"4":["py","attribute","Python attribute"]},filenames:["index","app","flatcamobj","camlib","devman"],titles:["Welcome to FlatCAM’s documentation!","FlatCAM Application","FlatCAM Objects","Camlib","FlatCAM Developer Manual"],objects:{"":{camlib:[3,0,0,"-"],FlatCAM:[2,0,0,"-"]},"camlib.CNCjob":{scale:[3,1,1,""],polygon2gcode:[3,1,1,""],generate_from_excellon_by_tool:[3,1,1,""],linear2gcode:[3,1,1,""],pre_parse:[3,1,1,""],generate_from_excellon:[3,1,1,""],gcode_parse:[3,1,1,""],generate_from_geometry:[3,1,1,""],offset:[3,1,1,""],plot2:[3,1,1,""]},FlatCAM:{PlotCanvas:[1,2,1,""],FlatCAMGeometry:[2,2,1,""],App:[1,2,1,""],FlatCAMObj:[2,2,1,""],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,4,1,""],mirror:[3,1,1,""],aperture_parse:[3,1,1,""],offset:[3,1,1,""],create_geometry:[3,1,1,""],parse_file:[3,1,1,""],do_flashes:[3,1,1,""],buffer_paths:[3,1,1,""],fix_regions:[3,1,1,""],get_bounding_box:[3,1,1,""],int_digits:[3,4,1,""]},"camlib.ApertureMacro":{make_geometry:[3,1,1,""],default2zero:[3,3,1,""],make_vectorline:[3,3,1,""],make_polygon:[3,3,1,""],make_moire:[3,3,1,""],make_outline:[3,3,1,""],make_circle:[3,3,1,""],make_thermal:[3,3,1,""],make_centerline:[3,3,1,""],parse_content:[3,1,1,""],append:[3,1,1,""],make_lowerleftline:[3,3,1,""]},"FlatCAM.FlatCAMGeometry":{plot:[2,1,1,""],scale:[2,1,1,""],offset:[2,1,1,""]},"FlatCAM.PlotCanvas":{on_mouse_move:[1,1,1,""],on_scroll:[1,1,1,""],adjust_axes:[1,1,1,""],clear:[1,1,1,""],zoom:[1,1,1,""],connect:[1,1,1,""],new_axes:[1,1,1,""],auto_adjust_axes:[1,1,1,""],mpl_connect:[1,1,1,""]},camlib:{Excellon:[3,2,1,""],ApertureMacro:[3,2,1,""],Geometry:[3,2,1,""],CNCjob:[3,2,1,""],Gerber:[3,2,1,""]},"camlib.Excellon":{parse_lines:[3,1,1,""],scale:[3,1,1,""],offset:[3,1,1,""],create_geometry:[3,1,1,""],mirror:[3,1,1,""],parse_file:[3,1,1,""]},"FlatCAM.FlatCAMObj":{read_form:[2,1,1,""],plot:[2,1,1,""],serialize:[2,1,1,""],deserialize:[2,1,1,""],build_ui:[2,1,1,""],to_form:[2,1,1,""],setup_axes:[2,1,1,""],set_form_item:[2,1,1,""],read_form_item:[2,1,1,""]}},titleterms:{cncjob:3,flatcamgerb:2,app:1,indic:0,aperturemacro:3,tabl:0,excellon:3,flatcam:[0,1,2,4],flatcamgeometri:2,develop:4,welcom:0,flatcamobj:2,gerber:3,camlib:3,document:0,flatcamcncjob:2,applic:1,option:4,object:2,flatcamexcellon:2,plotcanva:1,manual:4,geometri:3}}) \ No newline at end of file diff --git a/doc/source/app.rst b/doc/source/app.rst index 346e8d29..323ee535 100644 --- a/doc/source/app.rst +++ b/doc/source/app.rst @@ -1,26 +1,16 @@ 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 +App +~~~ + .. autoclass:: App :members: +PlotCanvas +~~~~~~~~~~ + .. autoclass:: PlotCanvas :members: diff --git a/doc/source/camlib.rst b/doc/source/camlib.rst index 67a5341d..6d18fa6e 100644 --- a/doc/source/camlib.rst +++ b/doc/source/camlib.rst @@ -3,14 +3,32 @@ Camlib .. automodule:: camlib +Geometry +~~~~~~~~ + .. autoclass:: Geometry :members: +Gerber +~~~~~~ + .. autoclass:: Gerber(Geometry) :members: -.. autoclass:: Excellon +ApertureMacro +~~~~~~~~~~~~~ + +.. autoclass:: ApertureMacro :members: -.. autoclass:: CNCjob +Excellon +~~~~~~~~ + +.. autoclass:: Excellon(Geometry) + :members: + +CNCJob +~~~~~~ + +.. autoclass:: CNCjob(Geometry) :members: diff --git a/doc/source/devman.rst b/doc/source/devman.rst new file mode 100644 index 00000000..0edff32b --- /dev/null +++ b/doc/source/devman.rst @@ -0,0 +1,15 @@ +FlatCAM Developer Manual +======================== + +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. \ No newline at end of file diff --git a/doc/source/flatcamobj.rst b/doc/source/flatcamobj.rst index 9bc0192e..f7cf1c91 100644 --- a/doc/source/flatcamobj.rst +++ b/doc/source/flatcamobj.rst @@ -3,17 +3,32 @@ FlatCAM Objects .. automodule:: FlatCAM +FlatCAMObj +~~~~~~~~~~ + .. autoclass:: FlatCAMObj :members: +FlatCAMGerber +~~~~~~~~~~~~~ + .. autoclass:: FlatCAMGerber :members: +FlatCAMExcellon +~~~~~~~~~~~~~~~ + .. autoclass:: FlatCAMExcellon :members: +FlatCAMCNCjob +~~~~~~~~~~~~~ + .. autoclass:: FlatCAMCNCjob :members: +FlatCAMGeometry +~~~~~~~~~~~~~~~ + .. autoclass:: FlatCAMGeometry :members: diff --git a/doc/source/index.rst b/doc/source/index.rst index a022f95e..ad3a7349 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -16,6 +16,7 @@ Contents: camlib flatcamobj app + devman