Procházet zdrojové kódy

Fixed Gerber parser: Now buffers current path with previous tool on tool change.

Juan Pablo Caram před 11 roky
rodič
revize
5659c3e7bd
69 změnil soubory, kde provedl 1930 přidání a 5903 odebrání
  1. 77 17
      FlatCAMApp.py
  2. 1 0
      FlatCAMGUI.py
  3. 19 4
      FlatCAMObj.py
  4. 31 0
      ObjectCollection.py
  5. binární
      bugs/.doctrees/active.doctree
  6. binární
      bugs/.doctrees/index.doctree
  7. 177 0
      bugs/Makefile
  8. binární
      bugs/_images/drill_parse_problem1.png
  9. binární
      bugs/_images/drill_parse_problem2.png
  10. 79 0
      bugs/_sources/active.txt
  11. 5 11
      bugs/_sources/index.txt
  12. 0 0
      bugs/_static/ajax-loader.gif
  13. 0 0
      bugs/_static/basic.css
  14. 0 0
      bugs/_static/comment-bright.png
  15. 0 0
      bugs/_static/comment-close.png
  16. 0 0
      bugs/_static/comment.png
  17. 256 0
      bugs/_static/default.css
  18. 0 0
      bugs/_static/doctools.js
  19. 0 0
      bugs/_static/down-pressed.png
  20. 0 0
      bugs/_static/down.png
  21. 0 0
      bugs/_static/file.png
  22. 0 0
      bugs/_static/jquery.js
  23. 0 0
      bugs/_static/minus.png
  24. 0 0
      bugs/_static/plus.png
  25. 0 0
      bugs/_static/pygments.css
  26. 0 0
      bugs/_static/searchtools.js
  27. 159 0
      bugs/_static/sidebar.js
  28. 0 0
      bugs/_static/underscore.js
  29. 0 0
      bugs/_static/up-pressed.png
  30. 0 0
      bugs/_static/up.png
  31. 0 0
      bugs/_static/websupport.js
  32. 173 0
      bugs/active.html
  33. 79 0
      bugs/active.rst
  34. 258 0
      bugs/conf.py
  35. binární
      bugs/drill_parse_problem1.png
  36. binární
      bugs/drill_parse_problem2.png
  37. 92 0
      bugs/genindex.html
  38. 125 0
      bugs/index.html
  39. 23 0
      bugs/index.rst
  40. 242 0
      bugs/make.bat
  41. 99 0
      bugs/search.html
  42. 17 6
      camlib.py
  43. 1 1
      defaults.json
  44. 0 4
      doc/build/.buildinfo
  45. binární
      doc/build/.doctrees/camlib.doctree
  46. binární
      doc/build/.doctrees/environment.pickle
  47. binární
      doc/build/.doctrees/index.doctree
  48. 0 34
      doc/build/_sources/camlib.txt
  49. 0 0
      doc/build/_static/css/badge_only.css
  50. 0 0
      doc/build/_static/css/theme.css
  51. binární
      doc/build/_static/font/fontawesome_webfont.eot
  52. 0 195
      doc/build/_static/font/fontawesome_webfont.svg
  53. binární
      doc/build/_static/font/fontawesome_webfont.ttf
  54. binární
      doc/build/_static/font/fontawesome_webfont.woff
  55. 0 47
      doc/build/_static/js/theme.js
  56. 0 1894
      doc/build/app.html
  57. 0 1329
      doc/build/camlib.html
  58. 0 231
      doc/build/devman.html
  59. 0 451
      doc/build/flatcamobj.html
  60. 0 1065
      doc/build/genindex.html
  61. 0 223
      doc/build/index.html
  62. binární
      doc/build/objects.inv
  63. 0 201
      doc/build/py-modindex.html
  64. 0 188
      doc/build/search.html
  65. 0 0
      doc/build/searchindex.js
  66. 11 0
      doc/source/bugs.rst
  67. 1 0
      doc/source/index.rst
  68. 4 1
      manual/editor.rst
  69. 1 1
      recent.json

+ 77 - 17
FlatCAMApp.py

@@ -175,7 +175,18 @@ class App(QtCore.QObject):
             "geometry_paintmargin": 0.0,
             "cncjob_plot": True,
             "cncjob_tooldia": 0.016,
-            "cncjob_append": ""
+            "cncjob_append": "",
+
+            # Constants...
+            "defaults_save_period_ms": 20000,   # Time between default saves.
+            "shell_shape": [500, 300],          # Shape of the shell in pixels.
+            "shell_at_startup": False,          # Show the shell at startup.
+            "recent_limit": 10,                 # Max. items in recent list.
+            "fit_key": '1',
+            "zoom_out_key": '2',
+            "zoom_in_key": '3',
+            "zoom_ratio": 1.5,
+            "point_clipboard_format": "(%.4f, %.4f)"
         })
         self.load_defaults()
 
@@ -188,9 +199,9 @@ class App(QtCore.QObject):
             try:
                 self.save_defaults()
             finally:
-                QtCore.QTimer.singleShot(20000, auto_save_defaults)
+                QtCore.QTimer.singleShot(self.defaults["defaults_save_period_ms"], auto_save_defaults)
 
-        QtCore.QTimer.singleShot(20000, auto_save_defaults)
+        QtCore.QTimer.singleShot(self.defaults["defaults_save_period_ms"], auto_save_defaults)
 
         self.options_form = GlobalOptionsUI()
         self.options_form_fields = {
@@ -286,9 +297,10 @@ class App(QtCore.QObject):
         self.thr2 = QtCore.QThread()
         self.worker2.moveToThread(self.thr2)
         self.connect(self.thr2, QtCore.SIGNAL("started()"), self.worker2.run)
-        self.connect(self.thr2, QtCore.SIGNAL("started()"), lambda: self.worker_task.emit({'fcn': self.version_check,
-                                                                                           'params': [],
-                                                                                           'worker_name': "worker2"}))
+        self.connect(self.thr2, QtCore.SIGNAL("started()"),
+                     lambda: self.worker_task.emit({'fcn': self.version_check,
+                                                    'params': [],
+                                                    'worker_name': "worker2"}))
         self.thr2.start()
 
         ### Signal handling ###
@@ -314,6 +326,7 @@ class App(QtCore.QObject):
         self.ui.menueditnew.triggered.connect(lambda: self.new_object('geometry', 'New Geometry', lambda x, y: None))
         self.ui.menueditedit.triggered.connect(self.edit_geometry)
         self.ui.menueditok.triggered.connect(self.editor2geometry)
+        self.ui.menueditjoin.triggered.connect(self.on_edit_join)
         self.ui.menueditdelete.triggered.connect(self.on_delete)
         self.ui.menuoptions_transfer_a2o.triggered.connect(self.on_options_app2object)
         self.ui.menuoptions_transfer_a2p.triggered.connect(self.on_options_app2project)
@@ -370,8 +383,9 @@ class App(QtCore.QObject):
         self.shell = FCShell(self)
         self.shell.setWindowIcon(self.ui.app_icon)
         self.shell.setWindowTitle("FlatCAM Shell")
-        self.shell.show()
-        self.shell.resize(550, 300)
+        if self.defaults["shell_at_startup"]:
+            self.shell.show()
+        self.shell.resize(*self.defaults["shell_shape"])
         self.shell.append_output("FlatCAM %s\n(c) 2014 Juan Pablo Caram\n\n" % self.version)
         self.shell.append_output("Type help to get started.\n\n")
         self.tcl = Tkinter.Tcl()
@@ -448,7 +462,7 @@ class App(QtCore.QObject):
         """
         Transfers the geometry in the editor to the current geometry object.
 
-        :return:
+        :return: None
         """
         geo = self.collection.get_active()
         if not isinstance(geo, FlatCAMGeometry):
@@ -476,7 +490,7 @@ class App(QtCore.QObject):
 
     def exec_command(self, text):
         """
-        Hadles input from the shell. See FlatCAMApp.setup_shell for shell commands.
+        Handles input from the shell. See FlatCAMApp.setup_shell for shell commands.
 
         :param text: Input command
         :return: None
@@ -530,6 +544,12 @@ class App(QtCore.QObject):
             #self.shell.append_error("?\n")
 
     def info(self, text):
+        """
+        Writes on the status bar.
+
+        :param text: Text to write.
+        :return: None
+        """
         self.ui.info_label.setText(QtCore.QString(text))
 
     def load_defaults(self):
@@ -577,7 +597,7 @@ class App(QtCore.QObject):
 
         self.recent.insert(0, record)
 
-        if len(self.recent) > 10:  # Limit reached
+        if len(self.recent) > self.defaults['recent_limit']:  # Limit reached
             self.recent.pop()
 
         try:
@@ -790,6 +810,20 @@ class App(QtCore.QObject):
 
         self.inform.emit("Defaults saved.")
 
+    def on_edit_join(self):
+        """
+        Callback for Edit->Join. Joins the selected geometry objects into
+        a new one.
+
+        :return: None
+        """
+        objs = self.collection.get_selected()
+
+        def initialize(obj, app):
+            FlatCAMGeometry.merge(objs, obj)
+
+        self.new_object("geometry", "Combo", initialize)
+
     def on_options_app2project(self):
         """
         Callback for Options->Transfer Options->App=>Project. Copies options
@@ -1122,16 +1156,16 @@ class App(QtCore.QObject):
         :return: None
         """
 
-        if event.key == '1':  # 1
+        if event.key == self.defaults['fit_key']:  # 1
             self.on_zoom_fit(None)
             return
 
-        if event.key == '2':  # 2
-            self.plotcanvas.zoom(1 / 1.5, self.mouse)
+        if event.key == self.defaults['zoom_out_key']:  # 2
+            self.plotcanvas.zoom(1 / self.defaults['zoom_ratio'], self.mouse)
             return
 
-        if event.key == '3':  # 3
-            self.plotcanvas.zoom(1.5, self.mouse)
+        if event.key == self.defaults['zoom_in_key']:  # 3
+            self.plotcanvas.zoom(self.defaults['zoom_ratio'], self.mouse)
             return
 
         # if event.key == 'm':
@@ -1163,7 +1197,7 @@ class App(QtCore.QObject):
             App.log.debug('button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (
                 event.button, event.x, event.y, event.xdata, event.ydata))
 
-            self.clipboard.setText("(%.4f, %.4f)" % (event.xdata, event.ydata))
+            self.clipboard.setText(self.defaults["point_clipboard_format"] % (event.xdata, event.ydata))
 
         except Exception, e:
             App.log.debug("Outside plot?")
@@ -1905,6 +1939,19 @@ class App(QtCore.QObject):
             except Exception, e:
                 return "ERROR: %s" % str(e)
 
+        def get_sys(param):
+            if param in self.defaults:
+                return self.defaults[param]
+
+            return "ERROR: No such system parameter."
+
+        def set_sys(param, value):
+            if param in self.defaults:
+                self.defaults[param] = value
+                return
+
+            return "ERROR: No such system parameter."
+
         commands = {
             'help': {
                 'fcn': shelp,
@@ -2063,6 +2110,19 @@ class App(QtCore.QObject):
                         '> follow <name> [-outname <oname>]\n' +
                         '   name: Name of the gerber object.\n' +
                         '   outname: Name of the output geometry object.'
+            },
+            'get_sys': {
+                'fcn': get_sys,
+                'help': 'Get the value of a system parameter (FlatCAM constant)\n' +
+                        '> get_sys <sysparam>\n' +
+                        '   sysparam: Name of the parameter.'
+            },
+            'set_sys': {
+                'fcn': set_sys,
+                'help': 'Set the value of a system parameter (FlatCAM constant)\n' +
+                        '> set_sys <sysparam> <paramvalue>\n' +
+                        '   sysparam: Name of the parameter.\n' +
+                        '   paramvalue: Value to set.'
             }
         }
 

+ 1 - 0
FlatCAMGUI.py

@@ -71,6 +71,7 @@ class FlatCAMGUI(QtGui.QMainWindow):
         self.menueditedit = self.menuedit.addAction(QtGui.QIcon('share/edit16.png'), 'Edit Geometry')
         self.menueditok = self.menuedit.addAction(QtGui.QIcon('share/edit_ok16.png'), 'Update Geometry')
         #self.menueditcancel = self.menuedit.addAction(QtGui.QIcon('share/cancel_edit16.png'), "Cancel Edit")
+        self.menueditjoin = self.menuedit.addAction(QtGui.QIcon('share/join16.png'), 'Join Geometry')
         self.menueditdelete = self.menuedit.addAction(QtGui.QIcon('share/trash16.png'), 'Delete')
 
         ### Options ###

+ 19 - 4
FlatCAMObj.py

@@ -539,8 +539,6 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
                     self.axes.plot(x, y, linespec)
 
         self.app.plotcanvas.auto_adjust_axes()
-        #GLib.idle_add(self.app.plotcanvas.auto_adjust_axes)
-        #self.emit(QtCore.SIGNAL("plotChanged"), self)
 
     def serialize(self):
         return {
@@ -857,6 +855,25 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
 
     ui_type = GeometryObjectUI
 
+    @staticmethod
+    def merge(geo_list, geo_final):
+        """
+        Merges the geometry of objects in geo_list into
+        the geometry of geo_final.
+
+        :param geo_list: List of FlatCAMGeometry Objects to join.
+        :param geo_final: Destination FlatCAMGeometry object.
+        :return: None
+        """
+        geo_final.solid_geometry = []
+
+        for geo in geo_list:
+            try:
+                for shape in geo.solid_geometry:
+                    geo_final.solid_geometry.append(shape)
+            except:
+                geo_final.solid_geometry.append(geo)
+
     def __init__(self, name):
         FlatCAMObj.__init__(self, name)
         Geometry.__init__(self)
@@ -884,8 +901,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
     def build_ui(self):
         FlatCAMObj.build_ui(self)
 
-
-
     def set_ui(self, ui):
         FlatCAMObj.set_ui(self, ui)
 

+ 31 - 0
ObjectCollection.py

@@ -28,13 +28,23 @@ class ObjectCollection(QtCore.QAbstractListModel):
         for kind in ObjectCollection.icon_files:
             self.icons[kind] = QtGui.QPixmap(ObjectCollection.icon_files[kind])
 
+        ### Data ###
         self.object_list = []
+        self.checked_indexes = []
 
+        ### View
         self.view = QtGui.QListView()
+        self.view.setSelectionMode(Qt.QAbstractItemView.ExtendedSelection)
         self.view.setModel(self)
+
+        self.click_modifier = None
+
         self.view.selectionModel().selectionChanged.connect(self.on_list_selection_change)
         self.view.activated.connect(self.on_item_activated)
 
+    def on_mouse_down(self, event):
+        print "Mouse button pressed on list"
+
     def rowCount(self, parent=QtCore.QModelIndex(), *args, **kwargs):
         return len(self.object_list)
 
@@ -49,6 +59,11 @@ class ObjectCollection(QtCore.QAbstractListModel):
             return self.object_list[row].options["name"]
         if role == Qt.Qt.DecorationRole:
             return self.icons[self.object_list[row].kind]
+        # if role == Qt.Qt.CheckStateRole:
+        #     if row in self.checked_indexes:
+        #         return Qt.Qt.Checked
+        #     else:
+        #         return Qt.Qt.Unchecked
 
     def print_list(self):
         for obj in self.object_list:
@@ -62,6 +77,7 @@ class ObjectCollection(QtCore.QAbstractListModel):
         # Required before appending
         self.beginInsertRows(QtCore.QModelIndex(), len(self.object_list), len(self.object_list))
 
+        # Simply append to the python list
         self.object_list.append(obj)
 
         # Required after appending
@@ -146,6 +162,14 @@ class ObjectCollection(QtCore.QAbstractListModel):
         row = selections[0].row()
         return self.object_list[row]
 
+    def get_selected(self):
+        """
+        Returns list of objects selected in the view.
+
+        :return: List of objects
+        """
+        return [self.object_list[sel.row()] for sel in self.view.selectedIndexes()]
+
     def set_active(self, name):
         """
         Selects object by name from the project list. This triggers the
@@ -169,6 +193,12 @@ class ObjectCollection(QtCore.QAbstractListModel):
         self.object_list[selection_index].build_ui()
 
     def on_item_activated(self, index):
+        """
+        Double-click or Enter on item.
+
+        :param index: Index of the item in the list.
+        :return: None
+        """
         self.object_list[index.row()].build_ui()
 
     def delete_all(self):
@@ -177,6 +207,7 @@ class ObjectCollection(QtCore.QAbstractListModel):
         self.beginResetModel()
 
         self.object_list = []
+        self.checked_indexes = []
 
         self.endResetModel()
 

binární
bugs/.doctrees/active.doctree


binární
bugs/.doctrees/index.doctree


+ 177 - 0
bugs/Makefile

@@ -0,0 +1,177 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# User-friendly check for sphinx-build
+ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
+$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
+endif
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  xml        to make Docutils-native XML files"
+	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/FlatCAMBugs.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/FlatCAMBugs.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/FlatCAMBugs"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/FlatCAMBugs"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+latexpdfja:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through platex and dvipdfmx..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
+
+xml:
+	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
+	@echo
+	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+
+pseudoxml:
+	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
+	@echo
+	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

binární
bugs/_images/drill_parse_problem1.png


binární
bugs/_images/drill_parse_problem2.png


+ 79 - 0
bugs/_sources/active.txt

@@ -0,0 +1,79 @@
+Active Bugs
+===================
+
+Drill number parsing
+--------------------
+
+The screenshot below show the problematic file:
+
+.. image:: drill_parse_problem1.png
+   :align: center
+
+The file reads::
+
+    G81
+    M48
+    METRIC
+    T1C00.127
+    T2C00.889
+    T3C00.900
+    T4C01.524
+    T5C01.600
+    T6C02.032
+    T7C02.540
+    %
+    T002
+    X03874Y08092
+    X03874Y23333
+    X06414Y08092
+    X06414Y23333
+    X08954Y08092
+    ...
+    T007
+    X02664Y03518
+    X02664Y41618
+    X76324Y03518
+    X76324Y41618
+    ...
+
+After scaling by 10.0:
+
+.. image:: drill_parse_problem2.png
+   :align: center
+
+The code involved is:
+
+.. code-block:: python
+
+    def __init__(self):
+        ...
+        self.zeros = "T"
+        ...
+
+    def parse_number(self, number_str):
+
+        if self.zeros == "L":
+            match = self.leadingzeros_re.search(number_str)
+            return float(number_str)/(10**(len(match.group(2))-2+len(match.group(1))))
+        else:  # Trailing
+            return float(number_str)/10000
+
+The numbers are being divided by 10000. If "L" had been specified,
+the following regex would have applied:
+
+.. code-block:: python
+
+    # Parse coordinates
+    self.leadingzeros_re = re.compile(r'^(0*)(\d*)')
+
+Then the number 02664 would have been divided by 10**(4-2+1) = 10**3 = 1000,
+which is what is desired.
+
+Leading zeros weren't specified, but www.excellon.com says:
+
+    The CNC-7 uses leading zeros unless you specify
+    otherwise through a part program or the console.
+
+.. note::
+    The parser has been modified to default to leading
+    zeros.

+ 5 - 11
doc/build/_sources/index.txt → bugs/_sources/index.txt

@@ -1,23 +1,17 @@
-.. Cirkuix documentation master file, created by
-   sphinx-quickstart on Fri Jan 24 22:13:35 2014.
+.. FlatCAM Bugs documentation master file, created by
+   sphinx-quickstart on Thu Nov 13 12:42:40 2014.
    You can adapt this file completely to your liking, but it should at least
    contain the root `toctree` directive.
 
-
-
-Welcome to FlatCAM's documentation!
-===================================
+Welcome to FlatCAM Bugs's documentation!
+========================================
 
 Contents:
 
 .. toctree::
    :maxdepth: 2
 
-   camlib
-   flatcamobj
-   app
-   devman
-
+   active
 
 
 Indices and tables

+ 0 - 0
doc/build/_static/ajax-loader.gif → bugs/_static/ajax-loader.gif


+ 0 - 0
doc/build/_static/basic.css → bugs/_static/basic.css


+ 0 - 0
doc/build/_static/comment-bright.png → bugs/_static/comment-bright.png


+ 0 - 0
doc/build/_static/comment-close.png → bugs/_static/comment-close.png


+ 0 - 0
doc/build/_static/comment.png → bugs/_static/comment.png


+ 256 - 0
bugs/_static/default.css

@@ -0,0 +1,256 @@
+/*
+ * default.css_t
+ * ~~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- default theme.
+ *
+ * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: sans-serif;
+    font-size: 100%;
+    background-color: #11303d;
+    color: #000;
+    margin: 0;
+    padding: 0;
+}
+
+div.document {
+    background-color: #1c4e63;
+}
+
+div.documentwrapper {
+    float: left;
+    width: 100%;
+}
+
+div.bodywrapper {
+    margin: 0 0 0 230px;
+}
+
+div.body {
+    background-color: #ffffff;
+    color: #000000;
+    padding: 0 20px 30px 20px;
+}
+
+div.footer {
+    color: #ffffff;
+    width: 100%;
+    padding: 9px 0 9px 0;
+    text-align: center;
+    font-size: 75%;
+}
+
+div.footer a {
+    color: #ffffff;
+    text-decoration: underline;
+}
+
+div.related {
+    background-color: #133f52;
+    line-height: 30px;
+    color: #ffffff;
+}
+
+div.related a {
+    color: #ffffff;
+}
+
+div.sphinxsidebar {
+}
+
+div.sphinxsidebar h3 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: #ffffff;
+    font-size: 1.4em;
+    font-weight: normal;
+    margin: 0;
+    padding: 0;
+}
+
+div.sphinxsidebar h3 a {
+    color: #ffffff;
+}
+
+div.sphinxsidebar h4 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: #ffffff;
+    font-size: 1.3em;
+    font-weight: normal;
+    margin: 5px 0 0 0;
+    padding: 0;
+}
+
+div.sphinxsidebar p {
+    color: #ffffff;
+}
+
+div.sphinxsidebar p.topless {
+    margin: 5px 10px 10px 10px;
+}
+
+div.sphinxsidebar ul {
+    margin: 10px;
+    padding: 0;
+    color: #ffffff;
+}
+
+div.sphinxsidebar a {
+    color: #98dbcc;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+
+
+/* -- hyperlink styles ------------------------------------------------------ */
+
+a {
+    color: #355f7c;
+    text-decoration: none;
+}
+
+a:visited {
+    color: #355f7c;
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+
+
+/* -- body styles ----------------------------------------------------------- */
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+    font-family: 'Trebuchet MS', sans-serif;
+    background-color: #f2f2f2;
+    font-weight: normal;
+    color: #20435c;
+    border-bottom: 1px solid #ccc;
+    margin: 20px -20px 10px -20px;
+    padding: 3px 0 3px 10px;
+}
+
+div.body h1 { margin-top: 0; font-size: 200%; }
+div.body h2 { font-size: 160%; }
+div.body h3 { font-size: 140%; }
+div.body h4 { font-size: 120%; }
+div.body h5 { font-size: 110%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+    color: #c60f0f;
+    font-size: 0.8em;
+    padding: 0 4px 0 4px;
+    text-decoration: none;
+}
+
+a.headerlink:hover {
+    background-color: #c60f0f;
+    color: white;
+}
+
+div.body p, div.body dd, div.body li {
+    text-align: justify;
+    line-height: 130%;
+}
+
+div.admonition p.admonition-title + p {
+    display: inline;
+}
+
+div.admonition p {
+    margin-bottom: 5px;
+}
+
+div.admonition pre {
+    margin-bottom: 5px;
+}
+
+div.admonition ul, div.admonition ol {
+    margin-bottom: 5px;
+}
+
+div.note {
+    background-color: #eee;
+    border: 1px solid #ccc;
+}
+
+div.seealso {
+    background-color: #ffc;
+    border: 1px solid #ff6;
+}
+
+div.topic {
+    background-color: #eee;
+}
+
+div.warning {
+    background-color: #ffe4e4;
+    border: 1px solid #f66;
+}
+
+p.admonition-title {
+    display: inline;
+}
+
+p.admonition-title:after {
+    content: ":";
+}
+
+pre {
+    padding: 5px;
+    background-color: #eeffcc;
+    color: #333333;
+    line-height: 120%;
+    border: 1px solid #ac9;
+    border-left: none;
+    border-right: none;
+}
+
+tt {
+    background-color: #ecf0f3;
+    padding: 0 1px 0 1px;
+    font-size: 0.95em;
+}
+
+th {
+    background-color: #ede;
+}
+
+.warning tt {
+    background: #efc2c2;
+}
+
+.note tt {
+    background: #d6d6d6;
+}
+
+.viewcode-back {
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    background-color: #f4debf;
+    border-top: 1px solid #ac9;
+    border-bottom: 1px solid #ac9;
+}

+ 0 - 0
doc/build/_static/doctools.js → bugs/_static/doctools.js


+ 0 - 0
doc/build/_static/down-pressed.png → bugs/_static/down-pressed.png


+ 0 - 0
doc/build/_static/down.png → bugs/_static/down.png


+ 0 - 0
doc/build/_static/file.png → bugs/_static/file.png


+ 0 - 0
doc/build/_static/jquery.js → bugs/_static/jquery.js


+ 0 - 0
doc/build/_static/minus.png → bugs/_static/minus.png


+ 0 - 0
doc/build/_static/plus.png → bugs/_static/plus.png


+ 0 - 0
doc/build/_static/pygments.css → bugs/_static/pygments.css


+ 0 - 0
doc/build/_static/searchtools.js → bugs/_static/searchtools.js


+ 159 - 0
bugs/_static/sidebar.js

@@ -0,0 +1,159 @@
+/*
+ * sidebar.js
+ * ~~~~~~~~~~
+ *
+ * This script makes the Sphinx sidebar collapsible.
+ *
+ * .sphinxsidebar contains .sphinxsidebarwrapper.  This script adds
+ * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
+ * used to collapse and expand the sidebar.
+ *
+ * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
+ * and the width of the sidebar and the margin-left of the document
+ * are decreased. When the sidebar is expanded the opposite happens.
+ * This script saves a per-browser/per-session cookie used to
+ * remember the position of the sidebar among the pages.
+ * Once the browser is closed the cookie is deleted and the position
+ * reset to the default (expanded).
+ *
+ * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+$(function() {
+  
+  
+  
+  
+  
+  
+  
+
+  // global elements used by the functions.
+  // the 'sidebarbutton' element is defined as global after its
+  // creation, in the add_sidebar_button function
+  var bodywrapper = $('.bodywrapper');
+  var sidebar = $('.sphinxsidebar');
+  var sidebarwrapper = $('.sphinxsidebarwrapper');
+
+  // for some reason, the document has no sidebar; do not run into errors
+  if (!sidebar.length) return;
+
+  // original margin-left of the bodywrapper and width of the sidebar
+  // with the sidebar expanded
+  var bw_margin_expanded = bodywrapper.css('margin-left');
+  var ssb_width_expanded = sidebar.width();
+
+  // margin-left of the bodywrapper and width of the sidebar
+  // with the sidebar collapsed
+  var bw_margin_collapsed = '.8em';
+  var ssb_width_collapsed = '.8em';
+
+  // colors used by the current theme
+  var dark_color = $('.related').css('background-color');
+  var light_color = $('.document').css('background-color');
+
+  function sidebar_is_collapsed() {
+    return sidebarwrapper.is(':not(:visible)');
+  }
+
+  function toggle_sidebar() {
+    if (sidebar_is_collapsed())
+      expand_sidebar();
+    else
+      collapse_sidebar();
+  }
+
+  function collapse_sidebar() {
+    sidebarwrapper.hide();
+    sidebar.css('width', ssb_width_collapsed);
+    bodywrapper.css('margin-left', bw_margin_collapsed);
+    sidebarbutton.css({
+        'margin-left': '0',
+        'height': bodywrapper.height()
+    });
+    sidebarbutton.find('span').text('»');
+    sidebarbutton.attr('title', _('Expand sidebar'));
+    document.cookie = 'sidebar=collapsed';
+  }
+
+  function expand_sidebar() {
+    bodywrapper.css('margin-left', bw_margin_expanded);
+    sidebar.css('width', ssb_width_expanded);
+    sidebarwrapper.show();
+    sidebarbutton.css({
+        'margin-left': ssb_width_expanded-12,
+        'height': bodywrapper.height()
+    });
+    sidebarbutton.find('span').text('«');
+    sidebarbutton.attr('title', _('Collapse sidebar'));
+    document.cookie = 'sidebar=expanded';
+  }
+
+  function add_sidebar_button() {
+    sidebarwrapper.css({
+        'float': 'left',
+        'margin-right': '0',
+        'width': ssb_width_expanded - 28
+    });
+    // create the button
+    sidebar.append(
+        '<div id="sidebarbutton"><span>&laquo;</span></div>'
+    );
+    var sidebarbutton = $('#sidebarbutton');
+    light_color = sidebarbutton.css('background-color');
+    // find the height of the viewport to center the '<<' in the page
+    var viewport_height;
+    if (window.innerHeight)
+ 	  viewport_height = window.innerHeight;
+    else
+	  viewport_height = $(window).height();
+    sidebarbutton.find('span').css({
+        'display': 'block',
+        'margin-top': (viewport_height - sidebar.position().top - 20) / 2
+    });
+
+    sidebarbutton.click(toggle_sidebar);
+    sidebarbutton.attr('title', _('Collapse sidebar'));
+    sidebarbutton.css({
+        'color': '#FFFFFF',
+        'border-left': '1px solid ' + dark_color,
+        'font-size': '1.2em',
+        'cursor': 'pointer',
+        'height': bodywrapper.height(),
+        'padding-top': '1px',
+        'margin-left': ssb_width_expanded - 12
+    });
+
+    sidebarbutton.hover(
+      function () {
+          $(this).css('background-color', dark_color);
+      },
+      function () {
+          $(this).css('background-color', light_color);
+      }
+    );
+  }
+
+  function set_position_from_cookie() {
+    if (!document.cookie)
+      return;
+    var items = document.cookie.split(';');
+    for(var k=0; k<items.length; k++) {
+      var key_val = items[k].split('=');
+      var key = key_val[0].replace(/ /, "");  // strip leading spaces
+      if (key == 'sidebar') {
+        var value = key_val[1];
+        if ((value == 'collapsed') && (!sidebar_is_collapsed()))
+          collapse_sidebar();
+        else if ((value == 'expanded') && (sidebar_is_collapsed()))
+          expand_sidebar();
+      }
+    }
+  }
+
+  add_sidebar_button();
+  var sidebarbutton = $('#sidebarbutton');
+  set_position_from_cookie();
+});

+ 0 - 0
doc/build/_static/underscore.js → bugs/_static/underscore.js


+ 0 - 0
doc/build/_static/up-pressed.png → bugs/_static/up-pressed.png


+ 0 - 0
doc/build/_static/up.png → bugs/_static/up.png


+ 0 - 0
doc/build/_static/websupport.js → bugs/_static/websupport.js


+ 173 - 0
bugs/active.html

@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Active Bugs &mdash; FlatCAM Bugs 1 documentation</title>
+    
+    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '1',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <link rel="top" title="FlatCAM Bugs 1 documentation" href="index.html" />
+    <link rel="prev" title="Welcome to FlatCAM Bugs’s documentation!" href="index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="index.html" title="Welcome to FlatCAM Bugs’s documentation!"
+             accesskey="P">previous</a> |</li>
+        <li><a href="index.html">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="active-bugs">
+<h1>Active Bugs<a class="headerlink" href="#active-bugs" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="drill-number-parsing">
+<h2>Drill number parsing<a class="headerlink" href="#drill-number-parsing" title="Permalink to this headline">¶</a></h2>
+<p>The screenshot below show the problematic file:</p>
+<img alt="_images/drill_parse_problem1.png" class="align-center" src="_images/drill_parse_problem1.png" />
+<p>The file reads:</p>
+<div class="highlight-python"><pre>G81
+M48
+METRIC
+T1C00.127
+T2C00.889
+T3C00.900
+T4C01.524
+T5C01.600
+T6C02.032
+T7C02.540
+%
+T002
+X03874Y08092
+X03874Y23333
+X06414Y08092
+X06414Y23333
+X08954Y08092
+...
+T007
+X02664Y03518
+X02664Y41618
+X76324Y03518
+X76324Y41618
+...</pre>
+</div>
+<p>After scaling by 10.0:</p>
+<img alt="_images/drill_parse_problem2.png" class="align-center" src="_images/drill_parse_problem2.png" />
+<p>The code involved is:</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+    <span class="o">...</span>
+    <span class="bp">self</span><span class="o">.</span><span class="n">zeros</span> <span class="o">=</span> <span class="s">&quot;T&quot;</span>
+    <span class="o">...</span>
+
+<span class="k">def</span> <span class="nf">parse_number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">number_str</span><span class="p">):</span>
+
+    <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">zeros</span> <span class="o">==</span> <span class="s">&quot;L&quot;</span><span class="p">:</span>
+        <span class="n">match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">leadingzeros_re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">number_str</span><span class="p">)</span>
+        <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">number_str</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mi">10</span><span class="o">**</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span><span class="o">-</span><span class="mi">2</span><span class="o">+</span><span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">))))</span>
+    <span class="k">else</span><span class="p">:</span>  <span class="c"># Trailing</span>
+        <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">number_str</span><span class="p">)</span><span class="o">/</span><span class="mi">10000</span>
+</pre></div>
+</div>
+<p>The numbers are being divided by 10000. If &#8220;L&#8221; had been specified,
+the following regex would have applied:</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="c"># Parse coordinates</span>
+<span class="bp">self</span><span class="o">.</span><span class="n">leadingzeros_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">r&#39;^(0*)(\d*)&#39;</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>Then the number 02664 would have been divided by 10**(4-2+1) = 10**3 = 1000,
+which is what is desired.</p>
+<p>Leading zeros weren&#8217;t specified, but www.excellon.com says:</p>
+<blockquote>
+<div>The CNC-7 uses leading zeros unless you specify
+otherwise through a part program or the console.</div></blockquote>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">The parser has been modified to default to leading
+zeros.</p>
+</div>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">Active Bugs</a><ul>
+<li><a class="reference internal" href="#drill-number-parsing">Drill number parsing</a></li>
+</ul>
+</li>
+</ul>
+
+  <h4>Previous topic</h4>
+  <p class="topless"><a href="index.html"
+                        title="previous chapter">Welcome to FlatCAM Bugs&#8217;s documentation!</a></p>
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="_sources/active.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="index.html" title="Welcome to FlatCAM Bugs’s documentation!"
+             >previous</a> |</li>
+        <li><a href="index.html">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Juan Pablo Caram.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
+    </div>
+  </body>
+</html>

+ 79 - 0
bugs/active.rst

@@ -0,0 +1,79 @@
+Active Bugs
+===================
+
+Drill number parsing
+--------------------
+
+The screenshot below show the problematic file:
+
+.. image:: drill_parse_problem1.png
+   :align: center
+
+The file reads::
+
+    G81
+    M48
+    METRIC
+    T1C00.127
+    T2C00.889
+    T3C00.900
+    T4C01.524
+    T5C01.600
+    T6C02.032
+    T7C02.540
+    %
+    T002
+    X03874Y08092
+    X03874Y23333
+    X06414Y08092
+    X06414Y23333
+    X08954Y08092
+    ...
+    T007
+    X02664Y03518
+    X02664Y41618
+    X76324Y03518
+    X76324Y41618
+    ...
+
+After scaling by 10.0:
+
+.. image:: drill_parse_problem2.png
+   :align: center
+
+The code involved is:
+
+.. code-block:: python
+
+    def __init__(self):
+        ...
+        self.zeros = "T"
+        ...
+
+    def parse_number(self, number_str):
+
+        if self.zeros == "L":
+            match = self.leadingzeros_re.search(number_str)
+            return float(number_str)/(10**(len(match.group(2))-2+len(match.group(1))))
+        else:  # Trailing
+            return float(number_str)/10000
+
+The numbers are being divided by 10000. If "L" had been specified,
+the following regex would have applied:
+
+.. code-block:: python
+
+    # Parse coordinates
+    self.leadingzeros_re = re.compile(r'^(0*)(\d*)')
+
+Then the number 02664 would have been divided by 10**(4-2+1) = 10**3 = 1000,
+which is what is desired.
+
+Leading zeros weren't specified, but www.excellon.com says:
+
+    The CNC-7 uses leading zeros unless you specify
+    otherwise through a part program or the console.
+
+.. note::
+    The parser has been modified to default to leading
+    zeros.

+ 258 - 0
bugs/conf.py

@@ -0,0 +1,258 @@
+# -*- coding: utf-8 -*-
+#
+# FlatCAM Bugs documentation build configuration file, created by
+# sphinx-quickstart on Thu Nov 13 12:42:40 2014.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = []
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'FlatCAM Bugs'
+copyright = u'2014, Juan Pablo Caram'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '1'
+# The full version, including alpha/beta/rc tags.
+release = '1'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'FlatCAMBugsdoc'
+
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+  ('index', 'FlatCAMBugs.tex', u'FlatCAM Bugs Documentation',
+   u'Juan Pablo Caram', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'flatcambugs', u'FlatCAM Bugs Documentation',
+     [u'Juan Pablo Caram'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  ('index', 'FlatCAMBugs', u'FlatCAM Bugs Documentation',
+   u'Juan Pablo Caram', 'FlatCAMBugs', 'One line description of project.',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False

binární
bugs/drill_parse_problem1.png


binární
bugs/drill_parse_problem2.png


+ 92 - 0
bugs/genindex.html

@@ -0,0 +1,92 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Index &mdash; FlatCAM Bugs 1 documentation</title>
+    
+    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '1',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <link rel="top" title="FlatCAM Bugs 1 documentation" href="index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="#" title="General Index"
+             accesskey="I">index</a></li>
+        <li><a href="index.html">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ 
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+
+   
+
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="#" title="General Index"
+             >index</a></li>
+        <li><a href="index.html">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Juan Pablo Caram.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
+    </div>
+  </body>
+</html>

+ 125 - 0
bugs/index.html

@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Welcome to FlatCAM Bugs’s documentation! &mdash; FlatCAM Bugs 1 documentation</title>
+    
+    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '1',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <link rel="top" title="FlatCAM Bugs 1 documentation" href="#" />
+    <link rel="next" title="Active Bugs" href="active.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="active.html" title="Active Bugs"
+             accesskey="N">next</a> |</li>
+        <li><a href="#">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="welcome-to-flatcam-bugs-s-documentation">
+<h1>Welcome to FlatCAM Bugs&#8217;s documentation!<a class="headerlink" href="#welcome-to-flatcam-bugs-s-documentation" title="Permalink to this headline">¶</a></h1>
+<p>Contents:</p>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="active.html">Active Bugs</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="active.html#drill-number-parsing">Drill number parsing</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
+<ul class="simple">
+<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
+<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
+<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
+</ul>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="#">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">Welcome to FlatCAM Bugs&#8217;s documentation!</a><ul>
+</ul>
+</li>
+<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
+</ul>
+
+  <h4>Next topic</h4>
+  <p class="topless"><a href="active.html"
+                        title="next chapter">Active Bugs</a></p>
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="_sources/index.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="active.html" title="Active Bugs"
+             >next</a> |</li>
+        <li><a href="#">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Juan Pablo Caram.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
+    </div>
+  </body>
+</html>

+ 23 - 0
bugs/index.rst

@@ -0,0 +1,23 @@
+.. FlatCAM Bugs documentation master file, created by
+   sphinx-quickstart on Thu Nov 13 12:42:40 2014.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to FlatCAM Bugs's documentation!
+========================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   active
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+

+ 242 - 0
bugs/make.bat

@@ -0,0 +1,242 @@
+@ECHO OFF
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set BUILDDIR=_build
+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
+set I18NSPHINXOPTS=%SPHINXOPTS% .
+if NOT "%PAPER%" == "" (
+	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+	set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+	:help
+	echo.Please use `make ^<target^>` where ^<target^> is one of
+	echo.  html       to make standalone HTML files
+	echo.  dirhtml    to make HTML files named index.html in directories
+	echo.  singlehtml to make a single large HTML file
+	echo.  pickle     to make pickle files
+	echo.  json       to make JSON files
+	echo.  htmlhelp   to make HTML files and a HTML help project
+	echo.  qthelp     to make HTML files and a qthelp project
+	echo.  devhelp    to make HTML files and a Devhelp project
+	echo.  epub       to make an epub
+	echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
+	echo.  text       to make text files
+	echo.  man        to make manual pages
+	echo.  texinfo    to make Texinfo files
+	echo.  gettext    to make PO message catalogs
+	echo.  changes    to make an overview over all changed/added/deprecated items
+	echo.  xml        to make Docutils-native XML files
+	echo.  pseudoxml  to make pseudoxml-XML files for display purposes
+	echo.  linkcheck  to check all external links for integrity
+	echo.  doctest    to run all doctests embedded in the documentation if enabled
+	goto end
+)
+
+if "%1" == "clean" (
+	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
+	del /q /s %BUILDDIR%\*
+	goto end
+)
+
+
+%SPHINXBUILD% 2> nul
+if errorlevel 9009 (
+	echo.
+	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+	echo.installed, then set the SPHINXBUILD environment variable to point
+	echo.to the full path of the 'sphinx-build' executable. Alternatively you
+	echo.may add the Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+	echo.http://sphinx-doc.org/
+	exit /b 1
+)
+
+if "%1" == "html" (
+	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
+	goto end
+)
+
+if "%1" == "dirhtml" (
+	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
+	goto end
+)
+
+if "%1" == "singlehtml" (
+	%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
+	goto end
+)
+
+if "%1" == "pickle" (
+	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can process the pickle files.
+	goto end
+)
+
+if "%1" == "json" (
+	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can process the JSON files.
+	goto end
+)
+
+if "%1" == "htmlhelp" (
+	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in %BUILDDIR%/htmlhelp.
+	goto end
+)
+
+if "%1" == "qthelp" (
+	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in %BUILDDIR%/qthelp, like this:
+	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\FlatCAMBugs.qhcp
+	echo.To view the help file:
+	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\FlatCAMBugs.ghc
+	goto end
+)
+
+if "%1" == "devhelp" (
+	%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished.
+	goto end
+)
+
+if "%1" == "epub" (
+	%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The epub file is in %BUILDDIR%/epub.
+	goto end
+)
+
+if "%1" == "latex" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "latexpdf" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	cd %BUILDDIR%/latex
+	make all-pdf
+	cd %BUILDDIR%/..
+	echo.
+	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "latexpdfja" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	cd %BUILDDIR%/latex
+	make all-pdf-ja
+	cd %BUILDDIR%/..
+	echo.
+	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "text" (
+	%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The text files are in %BUILDDIR%/text.
+	goto end
+)
+
+if "%1" == "man" (
+	%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The manual pages are in %BUILDDIR%/man.
+	goto end
+)
+
+if "%1" == "texinfo" (
+	%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
+	goto end
+)
+
+if "%1" == "gettext" (
+	%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
+	goto end
+)
+
+if "%1" == "changes" (
+	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.The overview file is in %BUILDDIR%/changes.
+	goto end
+)
+
+if "%1" == "linkcheck" (
+	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Link check complete; look for any errors in the above output ^
+or in %BUILDDIR%/linkcheck/output.txt.
+	goto end
+)
+
+if "%1" == "doctest" (
+	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Testing of doctests in the sources finished, look at the ^
+results in %BUILDDIR%/doctest/output.txt.
+	goto end
+)
+
+if "%1" == "xml" (
+	%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The XML files are in %BUILDDIR%/xml.
+	goto end
+)
+
+if "%1" == "pseudoxml" (
+	%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
+	goto end
+)
+
+:end

+ 99 - 0
bugs/search.html

@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Search &mdash; FlatCAM Bugs 1 documentation</title>
+    
+    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '1',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="_static/searchtools.js"></script>
+    <link rel="top" title="FlatCAM Bugs 1 documentation" href="index.html" />
+  <script type="text/javascript">
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script type="text/javascript" id="searchindexloader"></script>
+   
+
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li><a href="index.html">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1 id="search-documentation">Search</h1>
+  <div id="fallback" class="admonition warning">
+  <script type="text/javascript">$('#fallback').hide();</script>
+  <p>
+    Please activate JavaScript to enable the search
+    functionality.
+  </p>
+  </div>
+  <p>
+    From here you can search these documents. Enter your search
+    words into the box below and click "search". Note that the search
+    function will automatically search for all of the words. Pages
+    containing fewer words won't appear in the result list.
+  </p>
+  <form action="" method="get">
+    <input type="text" name="q" value="" />
+    <input type="submit" value="search" />
+    <span id="search-progress" style="padding-left: 10px"></span>
+  </form>
+  
+  <div id="search-results">
+  
+  </div>
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="General Index"
+             >index</a></li>
+        <li><a href="index.html">FlatCAM Bugs 1 documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Juan Pablo Caram.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
+    </div>
+  </body>
+</html>

+ 17 - 6
camlib.py

@@ -46,9 +46,13 @@ class Geometry(object):
     Base geometry class.
     """
 
+    defaults = {
+        "init_units": 'in'
+    }
+
     def __init__(self):
         # Units (in or mm)
-        self.units = 'in'
+        self.units = Geometry.defaults["init_units"]
         
         # Final geometry: MultiPolygon
         self.solid_geometry = None
@@ -1493,7 +1497,7 @@ class Excellon(Geometry):
     ================  ====================================
     """
 
-    def __init__(self):
+    def __init__(self, zeros="L"):
         """
         The constructor takes no parameters.
 
@@ -1508,7 +1512,8 @@ class Excellon(Geometry):
         self.drills = []
 
         # Trailing "T" or leading "L" (default)
-        self.zeros = "T"
+        #self.zeros = "T"
+        self.zeros = zeros
 
         # Attributes to be included in serialization
         # Always append to it because it carries contents
@@ -1581,7 +1586,7 @@ class Excellon(Geometry):
         self.stop_re = re.compile(r'^((G04)|(M09)|(M06)|(M00)|(M30))')
 
         # Parse coordinates
-        self.leadingzeros_re = re.compile(r'^(0*)(\d*)')
+        self.leadingzeros_re = re.compile(r'^[-\+]?(0*)(\d*)')
         
     def parse_file(self, filename):
         """
@@ -1612,6 +1617,7 @@ class Excellon(Geometry):
         current_x = None
         current_y = None
 
+        #### Parsing starts here ####
         line_num = 0  # Line number
         for eline in elines:
             line_num += 1
@@ -1704,7 +1710,7 @@ class Excellon(Geometry):
                 ## Units and number format ##
                 match = self.units_re.match(eline)
                 if match:
-                    self.zeros = match.group(2)  # "T" or "L"
+                    self.zeros = match.group(2) or self.zeros  # "T" or "L". Might be empty
                     self.units = {"INCH": "IN", "METRIC": "MM"}[match.group(1)]
                     continue
 
@@ -1722,8 +1728,13 @@ class Excellon(Geometry):
         :rtype: foat
         """
         if self.zeros == "L":
+            # r'^[-\+]?(0*)(\d*)'
+            # 6 digits are divided by 10^4
+            # If less than size digits, they are automatically added,
+            # 5 digits then are divided by 10^3
             match = self.leadingzeros_re.search(number_str)
-            return float(number_str)/(10**(len(match.group(2))-2+len(match.group(1))))
+            return float(number_str)/(10**(len(match.group(1)) + len(match.group(2)) - 2))
+
         else:  # Trailing
             return float(number_str)/10000
 

+ 1 - 1
defaults.json

@@ -1 +1 @@
-{}
+{"cncjob_append": "", "gerber_noncopperrounded": false, "geometry_paintoverlap": 0.15, "geometry_plot": true, "zoom_ratio": 1.5, "shell_at_startup": "1", "gerber_isotooldia": 0.016, "serial": "nuaxe92x4v5f2jeft4kr", "shell_shape": [500, 300], "zoom_in_key": "3", "zoom_out_key": "2", "stats": {"on_toggle_units": 6, "on_options_app2project": 32, "save_defaults": 4569, "on_delete": 29, "on_file_openproject": 1, "on_fileopengerber": 10, "obj_on_scale_button": 5, "on_file_saveproject": 2, "geometry_on_generatecnc_button": 2, "on_file_new": 32, "gerber_on_iso_button": 1, "exec_command": 4, "on_fileopenexcellon": 12}, "recent_limit": 10, "gerber_plot": true, "defaults_save_period_ms": 20000, "gerber_cutoutgapsize": 0.15, "geometry_feedrate": 3.0, "units": "IN", "excellon_travelz": 0.1, "gerber_multicolored": false, "gerber_solid": true, "gerber_isopasses": 1, "fit_key": "1", "excellon_plot": true, "excellon_feedrate": 3.0, "cncjob_tooldia": 0.016, "geometry_travelz": 0.1, "gerber_cutoutmargin": 0.1, "excellon_solid": false, "geometry_paintmargin": 0.0, "geometry_cutz": -0.002, "gerber_noncoppermargin": 0.0, "gerber_cutouttooldia": 0.07, "gerber_gaps": "4", "gerber_bboxmargin": 0.0, "point_clipboard_format": "(%.4f, %.4f)", "cncjob_plot": true, "excellon_drillz": -0.1, "gerber_isooverlap": 0.15, "gerber_bboxrounded": false, "geometry_cnctooldia": 0.016, "geometry_painttooldia": 0.07}

+ 0 - 4
doc/build/.buildinfo

@@ -1,4 +0,0 @@
-# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 5d14861db364fd07def06ca8fd4c733a
-tags: 645f666f9bcd5a90fca523b33c5a78b7

binární
doc/build/.doctrees/camlib.doctree


binární
doc/build/.doctrees/environment.pickle


binární
doc/build/.doctrees/index.doctree


+ 0 - 34
doc/build/_sources/camlib.txt

@@ -1,34 +0,0 @@
-Camlib
-======
-
-.. automodule:: camlib
-
-Geometry
-~~~~~~~~
-
-.. autoclass:: Geometry
-    :members:
-
-Gerber
-~~~~~~
-
-.. autoclass:: Gerber(Geometry)
-    :members:
-
-ApertureMacro
-~~~~~~~~~~~~~
-
-.. autoclass:: ApertureMacro
-    :members:
-
-Excellon
-~~~~~~~~
-
-.. autoclass:: Excellon(Geometry)
-    :members:
-
-CNCJob
-~~~~~~
-
-.. autoclass:: CNCjob(Geometry)
-    :members:

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
doc/build/_static/css/badge_only.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
doc/build/_static/css/theme.css


binární
doc/build/_static/font/fontawesome_webfont.eot


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 195
doc/build/_static/font/fontawesome_webfont.svg


binární
doc/build/_static/font/fontawesome_webfont.ttf


binární
doc/build/_static/font/fontawesome_webfont.woff


+ 0 - 47
doc/build/_static/js/theme.js

@@ -1,47 +0,0 @@
-$( document ).ready(function() {
-    // Shift nav in mobile when clicking the menu.
-    $(document).on('click', "[data-toggle='wy-nav-top']", function() {
-      $("[data-toggle='wy-nav-shift']").toggleClass("shift");
-      $("[data-toggle='rst-versions']").toggleClass("shift");
-    });
-    // Close menu when you click a link.
-    $(document).on('click', ".wy-menu-vertical .current ul li a", function() {
-      $("[data-toggle='wy-nav-shift']").removeClass("shift");
-      $("[data-toggle='rst-versions']").toggleClass("shift");
-    });
-    $(document).on('click', "[data-toggle='rst-current-version']", function() {
-      $("[data-toggle='rst-versions']").toggleClass("shift-up");
-    });  
-    // Make tables responsive
-    $("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
-});
-
-window.SphinxRtdTheme = (function (jquery) {
-    var stickyNav = (function () {
-        var navBar,
-            win,
-            stickyNavCssClass = 'stickynav',
-            applyStickNav = function () {
-                if (navBar.height() <= win.height()) {
-                    navBar.addClass(stickyNavCssClass);
-                } else {
-                    navBar.removeClass(stickyNavCssClass);
-                }
-            },
-            enable = function () {
-                applyStickNav();
-                win.on('resize', applyStickNav);
-            },
-            init = function () {
-                navBar = jquery('nav.wy-nav-side:first');
-                win    = jquery(window);
-            };
-        jquery(init);
-        return {
-            enable : enable
-        };
-    }());
-    return {
-        StickyNav : stickyNav
-    };
-}($));

+ 0 - 1894
doc/build/app.html

@@ -1,1894 +0,0 @@
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>FlatCAM Application &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="index.html"/>
-        <link rel="next" title="FlatCAM Developer Manual" href="devman.html"/>
-        <link rel="prev" title="FlatCAM Objects" href="flatcamobj.html"/> 
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="index.html" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1 current"><a class="current reference internal" href="">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="index.html">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="index.html">Docs</a> &raquo;</li>
-      
-    <li>FlatCAM Application</li>
-      <li class="wy-breadcrumbs-aside">
-        
-          <a href="_sources/app.txt" rel="nofollow"> View page source</a>
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-  <div class="section" id="module-FlatCAM">
-<span id="flatcam-application"></span><h1>FlatCAM Application<a class="headerlink" href="#module-FlatCAM" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="app">
-<h2>App<a class="headerlink" href="#app" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.App">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">App</tt><a class="headerlink" href="#FlatCAM.App" title="Permalink to this definition">¶</a></dt>
-<dd><p>The main application class. The constructor starts the GUI.</p>
-<dl class="method">
-<dt id="FlatCAM.App.disable_plots">
-<tt class="descname">disable_plots</tt><big>(</big><em>except_current=False</em><big>)</big><a class="headerlink" href="#FlatCAM.App.disable_plots" title="Permalink to this definition">¶</a></dt>
-<dd><p>Disables all plots with exception of the current object if specified.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>except_current</strong> &#8211; Wether to skip the current object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name" colspan="2">Rtype except_current:</th></tr>
-<tr class="field-even field"><td>&nbsp;</td><td class="field-body">boolean</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.file_chooser_action">
-<tt class="descname">file_chooser_action</tt><big>(</big><em>on_success</em><big>)</big><a class="headerlink" href="#FlatCAM.App.file_chooser_action" title="Permalink to this definition">¶</a></dt>
-<dd><p>Opens the file chooser and runs on_success on a separate thread
-upon completion of valid file choice.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>on_success</strong> (<em>func</em>) &#8211; A function to run upon completion of a valid file
-selection. Takes 2 parameters: The app instance and the filename.
-Note that it is run on a separate thread, therefore it must take the
-appropriate precautions  when accessing shared resources.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.file_chooser_save_action">
-<tt class="descname">file_chooser_save_action</tt><big>(</big><em>on_success</em><big>)</big><a class="headerlink" href="#FlatCAM.App.file_chooser_save_action" title="Permalink to this definition">¶</a></dt>
-<dd><p>Opens the file chooser and runs on_success upon completion of valid file choice.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>on_success</strong> &#8211; A function to run upon selection of a filename. Takes 2
-parameters: The instance of the application (App) and the chosen filename. This
-gets run immediately in the same thread.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.get_eval">
-<tt class="descname">get_eval</tt><big>(</big><em>widget_name</em><big>)</big><a class="headerlink" href="#FlatCAM.App.get_eval" title="Permalink to this definition">¶</a></dt>
-<dd><p>Runs eval() on the on the text entry of name &#8216;widget_name&#8217;
-and returns the results.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget_name</strong> (<em>str</em>) &#8211; Name of Gtk.Entry</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Depends on contents of the entry text.</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.get_radio_value">
-<tt class="descname">get_radio_value</tt><big>(</big><em>radio_set</em><big>)</big><a class="headerlink" href="#FlatCAM.App.get_radio_value" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the radio_set[key] of the radiobutton
-whose name is key is active.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>radio_set</strong> (<em>dict</em>) &#8211; A dictionary containing widget_name: value pairs.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">radio_set[key]</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.info">
-<tt class="descname">info</tt><big>(</big><em>text</em><big>)</big><a class="headerlink" href="#FlatCAM.App.info" title="Permalink to this definition">¶</a></dt>
-<dd><p>Show text on the status bar. This method is thread safe.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>text</strong> (<em>str</em>) &#8211; Text to display.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.load_defaults">
-<tt class="descname">load_defaults</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.App.load_defaults" title="Permalink to this definition">¶</a></dt>
-<dd><p>Loads the aplication&#8217;s default settings from defaults.json into
-<tt class="docutils literal"><span class="pre">self.defaults</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.new_object">
-<tt class="descname">new_object</tt><big>(</big><em>kind</em>, <em>name</em>, <em>initialize</em><big>)</big><a class="headerlink" href="#FlatCAM.App.new_object" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates a new specalized FlatCAMObj and attaches it to the application,
-this is, updates the GUI accordingly, any other records and plots it.
-This method is thread-safe.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>kind</strong> (<em>str</em>) &#8211; The kind of object to create. One of &#8216;gerber&#8217;,
-&#8216;excellon&#8217;, &#8216;cncjob&#8217; and &#8216;geometry&#8217;.</li>
-<li><strong>name</strong> (<em>str</em>) &#8211; Name for the object.</li>
-<li><strong>initialize</strong> (<em>function</em>) &#8211; Function to run after creation of the object
-but before it is attached to the application. The function is
-called with 2 parameters: the new object and the App instance.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">None</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_about">
-<tt class="descname">on_about</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_about" title="Permalink to this definition">¶</a></dt>
-<dd><p>Opens the &#8216;About&#8217; dialog box.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_activate_name">
-<tt class="descname">on_activate_name</tt><big>(</big><em>entry</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_activate_name" title="Permalink to this definition">¶</a></dt>
-<dd><p>Hitting &#8216;Enter&#8217; after changing the name of an item
-updates the item dictionary and re-builds the item list.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>entry</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_canvas_configure">
-<tt class="descname">on_canvas_configure</tt><big>(</big><em>widget</em>, <em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_canvas_configure" title="Permalink to this definition">¶</a></dt>
-<dd><p>Called whenever the canvas changes size. The axes are updated such
-as to use the whole canvas.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>widget</strong> &#8211; Ignored.</li>
-<li><strong>event</strong> &#8211; Ignored.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_cb_plot_toggled">
-<tt class="descname">on_cb_plot_toggled</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_cb_plot_toggled" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for toggling the &#8220;Plot&#8221; checkbox. Re-plots.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_clear_plots">
-<tt class="descname">on_clear_plots</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_clear_plots" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for toolbar button. Clears all plots.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_click_over_plot">
-<tt class="descname">on_click_over_plot</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_click_over_plot" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for the mouse click event over the plot. This event is generated
-by the Matplotlib backend and has been registered in <tt class="docutils literal"><span class="pre">self.__init__()</span></tt>.
-For details, see: <a class="reference external" href="http://matplotlib.org/users/event_handling.html">http://matplotlib.org/users/event_handling.html</a></p>
-<p>Default actions are:</p>
-<ul class="simple">
-<li>Copy coordinates to clipboard. Ex.: (65.5473, -13.2679)</li>
-</ul>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; Contains information about the event, like which button
-was clicked, the pixel coordinates and the axes coordinates.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_closewindow">
-<tt class="descname">on_closewindow</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_closewindow" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for closing the main window.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Whatever is passed by the event. Ignore.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_cncjob_exportgcode">
-<tt class="descname">on_cncjob_exportgcode</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_cncjob_exportgcode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Called from button on CNCjob form to save the G-Code from the object.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_create_aligndrill">
-<tt class="descname">on_create_aligndrill</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_create_aligndrill" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates alignment holes Excellon object. Creates mirror duplicates
-of the specified holes around the specified axis.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_create_mirror">
-<tt class="descname">on_create_mirror</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_create_mirror" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates a mirror image of an object to be used as a bottom layer.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_delete">
-<tt class="descname">on_delete</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_delete" title="Permalink to this definition">¶</a></dt>
-<dd><p>Delete the currently selected FlatCAMObj.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called. Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_entry_eval_activate">
-<tt class="descname">on_entry_eval_activate</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_entry_eval_activate" title="Permalink to this definition">¶</a></dt>
-<dd><p>Called when an entry is activated (eg. by hitting enter) if
-set to do so. Its text is eval()&#8217;d and set to the returned value.
-The current object is updated.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; </td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_eval_update">
-<tt class="descname">on_eval_update</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_eval_update" title="Permalink to this definition">¶</a></dt>
-<dd><p>Modifies the content of a Gtk.Entry by running
-eval() on its contents and puting it back as a
-string.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_excellon_tool_choose">
-<tt class="descname">on_excellon_tool_choose</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_excellon_tool_choose" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button on Excellon form to open up a window for
-selecting tools.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_file_new">
-<tt class="descname">on_file_new</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_file_new" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;New. Returns the application to its
-startup state. This method is thread-safe.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Whatever is passed by the event. Ignore.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_file_openproject">
-<tt class="descname">on_file_openproject</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_file_openproject" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Open Project. Opens a file chooser and calls
-<tt class="docutils literal"><span class="pre">self.open_project()</span></tt> after successful selection of a filename.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_file_savedefaults">
-<tt class="descname">on_file_savedefaults</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_file_savedefaults" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Save Defaults. Saves application default options
-<tt class="docutils literal"><span class="pre">self.defaults</span></tt> to defaults.json.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_file_saveproject">
-<tt class="descname">on_file_saveproject</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_file_saveproject" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Save Project. Saves the project to
-<tt class="docutils literal"><span class="pre">self.project_filename</span></tt> or calls <tt class="docutils literal"><span class="pre">self.on_file_saveprojectas()</span></tt>
-if set to None. The project is saved by calling <tt class="docutils literal"><span class="pre">self.save_project()</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_file_saveprojectas">
-<tt class="descname">on_file_saveprojectas</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_file_saveprojectas" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Save Project As... Opens a file
-chooser and saves the project to the given file via
-<tt class="docutils literal"><span class="pre">self.save_project()</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_file_saveprojectcopy">
-<tt class="descname">on_file_saveprojectcopy</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_file_saveprojectcopy" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Save Project Copy... Opens a file
-chooser and saves the project to the given file via
-<tt class="docutils literal"><span class="pre">self.save_project</span></tt>. It does not update <tt class="docutils literal"><span class="pre">self.project_filename</span></tt> so
-subsequent save requests are done on the previous known filename.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignore.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_fileopenexcellon">
-<tt class="descname">on_fileopenexcellon</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_fileopenexcellon" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Open Excellon. Defines a function that is then passed
-to <tt class="docutils literal"><span class="pre">self.file_chooser_action()</span></tt>. It requests the creation of a FlatCAMExcellon object
-and updates the progress bar throughout the process.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignore</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_fileopengcode">
-<tt class="descname">on_fileopengcode</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_fileopengcode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Open G-Code. Defines a function that is then passed
-to <tt class="docutils literal"><span class="pre">self.file_chooser_action()</span></tt>. It requests the creation of a FlatCAMCNCjob object
-and updates the progress bar throughout the process.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignore</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_fileopengerber">
-<tt class="descname">on_fileopengerber</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_fileopengerber" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Open Gerber. Defines a function that is then passed
-to <tt class="docutils literal"><span class="pre">self.file_chooser_action()</span></tt>. It requests the creation of a FlatCAMGerber object
-and updates the progress bar throughout the process.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignore</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_filequit">
-<tt class="descname">on_filequit</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_filequit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item File-&gt;Quit. Closes the application.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Whatever is passed by the event. Ignore.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_generate_cncjob">
-<tt class="descname">on_generate_cncjob</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_generate_cncjob" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button on geometry form to generate CNC job.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_generate_excellon_cncjob">
-<tt class="descname">on_generate_excellon_cncjob</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_generate_excellon_cncjob" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button active/click on Excellon form to
-create a CNC Job for the Excellon file.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_generate_gerber_bounding_box">
-<tt class="descname">on_generate_gerber_bounding_box</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_generate_gerber_bounding_box" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for request from the Gerber form to generate a bounding box for the
-geometry in the object. Creates a FlatCAMGeometry with the bounding box.
-The box can have rounded corners if specified in the form.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_generate_isolation">
-<tt class="descname">on_generate_isolation</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_generate_isolation" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button on Gerber form to create isolation routing geometry.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_generate_paintarea">
-<tt class="descname">on_generate_paintarea</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_generate_paintarea" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button on geometry form.
-Subscribes to the &#8220;Click on plot&#8221; event and continues
-after the click. Finds the polygon containing
-the clicked point and runs clear_poly() on it, resulting
-in a new FlatCAMGeometry object.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The  widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_gerber_generate_cutout">
-<tt class="descname">on_gerber_generate_cutout</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_gerber_generate_cutout" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button on Gerber form to create geometry with lines
-for cutting off the board.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_gerber_generate_noncopper">
-<tt class="descname">on_gerber_generate_noncopper</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_gerber_generate_noncopper" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button on Gerber form to create a geometry object
-with polygons covering the area without copper or negative of the
-Gerber.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_key_over_plot">
-<tt class="descname">on_key_over_plot</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_key_over_plot" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for the key pressed event when the canvas is focused. Keyboard
-shortcuts are handled here. So far, these are the shortcuts:</p>
-<table border="1" class="docutils">
-<colgroup>
-<col width="19%" />
-<col width="81%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Action</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>&#8216;1&#8217;</td>
-<td>Zoom-fit. Fits the axes limits to the data.</td>
-</tr>
-<tr class="row-odd"><td>&#8216;2&#8217;</td>
-<td>Zoom-out.</td>
-</tr>
-<tr class="row-even"><td>&#8216;3&#8217;</td>
-<td>Zoom-in.</td>
-</tr>
-<tr class="row-odd"><td>&#8216;m&#8217;</td>
-<td>Toggle on-off the measuring tool.</td>
-</tr>
-</tbody>
-</table>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_mouse_move_over_plot">
-<tt class="descname">on_mouse_move_over_plot</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_mouse_move_over_plot" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for the mouse motion event over the plot. This event is generated
-by the Matplotlib backend and has been registered in <tt class="docutils literal"><span class="pre">self.__init__()</span></tt>.
-For details, see: <a class="reference external" href="http://matplotlib.org/users/event_handling.html">http://matplotlib.org/users/event_handling.html</a></p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; Contains information about the event.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_offset_object">
-<tt class="descname">on_offset_object</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_offset_object" title="Permalink to this definition">¶</a></dt>
-<dd><p>Offsets the object&#8217;s geometry by the vector specified
-in the form. Re-plots.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_app2object">
-<tt class="descname">on_options_app2object</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_app2object" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for Options-&gt;Transfer Options-&gt;App=&gt;Object. Copies options
-from application defaults to the currently selected object.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_app2project">
-<tt class="descname">on_options_app2project</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_app2project" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for Options-&gt;Transfer Options-&gt;App=&gt;Project. Copies options
-from application defaults to project defaults.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_combo_change">
-<tt class="descname">on_options_combo_change</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_combo_change" title="Permalink to this definition">¶</a></dt>
-<dd><p>Called when the combo box to choose between application defaults and
-project option changes value. The corresponding variables are
-copied to the UI.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called. Ignore.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_object2app">
-<tt class="descname">on_options_object2app</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_object2app" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for Options-&gt;Transfer Options-&gt;Object=&gt;App. Copies options
-from the currently selected object to application defaults.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_object2project">
-<tt class="descname">on_options_object2project</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_object2project" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for Options-&gt;Transfer Options-&gt;Object=&gt;Project. Copies options
-from the currently selected object to project defaults.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_project2app">
-<tt class="descname">on_options_project2app</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_project2app" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for Options-&gt;Transfer Options-&gt;Project=&gt;App. Copies options
-from project defaults to application defaults.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_project2object">
-<tt class="descname">on_options_project2object</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_project2object" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for Options-&gt;Transfer Options-&gt;Project=&gt;Object. Copies options
-from project defaults to the currently selected object.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_options_update">
-<tt class="descname">on_options_update</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_options_update" title="Permalink to this definition">¶</a></dt>
-<dd><p>Called whenever a value in the options/defaults form changes.
-All values are updated. Can be inhibited by setting <tt class="docutils literal"><span class="pre">self.options_update_ignore</span> <span class="pre">=</span> <span class="pre">True</span></tt>,
-which may be necessary when updating the UI from code and not by the user.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called. Ignore.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_row_activated">
-<tt class="descname">on_row_activated</tt><big>(</big><em>widget</em>, <em>path</em>, <em>col</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_row_activated" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for selection activation (Enter or double-click) on the Project list.
-Switches the notebook page to the object properties form. Calls
-<tt class="docutils literal"><span class="pre">self.notebook.set_current_page(1)</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>widget</strong> &#8211; Ignored.</li>
-<li><strong>path</strong> &#8211; Ignored.</li>
-<li><strong>col</strong> &#8211; Ignored.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_scale_object">
-<tt class="descname">on_scale_object</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_scale_object" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for request to change an objects geometry scale. The object
-is re-scaled and replotted.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_toggle_pointbox">
-<tt class="descname">on_toggle_pointbox</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_toggle_pointbox" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for radio selection change between point and box in the
-Double-sided PCB tool. Updates the UI accordingly.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_toggle_units">
-<tt class="descname">on_toggle_units</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_toggle_units" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for the Units radio-button change in the Options tab.
-Changes the application&#8217;s default units or the current project&#8217;s units.
-If changing the project&#8217;s units, the change propagates to all of
-the objects in the project.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_toolbar_replot">
-<tt class="descname">on_toolbar_replot</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_toolbar_replot" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for toolbar button. Re-plots all objects.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_tools_doublesided">
-<tt class="descname">on_tools_doublesided</tt><big>(</big><em>param</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_tools_doublesided" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for menu item Tools-&gt;Double Sided PCB Tool. Launches the
-tool placing its UI in the &#8220;Tool&#8221; tab in the notebook.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>param</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_update_plot">
-<tt class="descname">on_update_plot</tt><big>(</big><em>widget</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_update_plot" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for button on form for all kinds of objects.
-Re-plots the current object only.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>widget</strong> &#8211; The widget from which this was called. Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_zoom_fit">
-<tt class="descname">on_zoom_fit</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_zoom_fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for zoom-out request. This can be either from the corresponding
-toolbar button or the &#8216;1&#8217; key when the canvas is focused. Calls <tt class="docutils literal"><span class="pre">self.adjust_axes()</span></tt>
-with axes limits from the geometry bounds of all objects.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_zoom_in">
-<tt class="descname">on_zoom_in</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_zoom_in" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for zoom-in request. This can be either from the corresponding
-toolbar button or the &#8216;3&#8217; key when the canvas is focused. Calls <tt class="docutils literal"><span class="pre">self.zoom()</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.on_zoom_out">
-<tt class="descname">on_zoom_out</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.App.on_zoom_out" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for zoom-out request. This can be either from the corresponding
-toolbar button or the &#8216;2&#8217; key when the canvas is focused. Calls <tt class="docutils literal"><span class="pre">self.zoom()</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.open_project">
-<tt class="descname">open_project</tt><big>(</big><em>filename</em><big>)</big><a class="headerlink" href="#FlatCAM.App.open_project" title="Permalink to this definition">¶</a></dt>
-<dd><p>Loads a project from the specified file.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) &#8211; Name of the file from which to load.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.options2form">
-<tt class="descname">options2form</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.App.options2form" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets the &#8216;Project Options&#8217; or &#8216;Application Defaults&#8217; form with values from
-<tt class="docutils literal"><span class="pre">self.options</span></tt> or <tt class="docutils literal"><span class="pre">self.defaults</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.plot_all">
-<tt class="descname">plot_all</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.App.plot_all" title="Permalink to this definition">¶</a></dt>
-<dd><p>Re-generates all plots from all objects.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.populate_objects_combo">
-<tt class="descname">populate_objects_combo</tt><big>(</big><em>combo</em><big>)</big><a class="headerlink" href="#FlatCAM.App.populate_objects_combo" title="Permalink to this definition">¶</a></dt>
-<dd><p>Populates a Gtk.Comboboxtext with the list of the object in the project.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>combo</strong> (<em>str or Gtk.ComboBoxText</em>) &#8211; Name or instance of the comboboxtext.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.read_form">
-<tt class="descname">read_form</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.App.read_form" title="Permalink to this definition">¶</a></dt>
-<dd><p>Reads the options form into self.defaults/self.options.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.read_form_item">
-<tt class="descname">read_form_item</tt><big>(</big><em>name</em>, <em>dest</em><big>)</big><a class="headerlink" href="#FlatCAM.App.read_form_item" title="Permalink to this definition">¶</a></dt>
-<dd><p>Reads the value of a form item in the defaults/options form and
-saves it to the corresponding dictionary.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>name</strong> (<em>str</em>) &#8211; Name of the form item. A key in <tt class="docutils literal"><span class="pre">self.defaults</span></tt> or
-<tt class="docutils literal"><span class="pre">self.options</span></tt>.</li>
-<li><strong>dest</strong> (<em>dict</em>) &#8211; Dictionary to which to save the value.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.save_project">
-<tt class="descname">save_project</tt><big>(</big><em>filename</em><big>)</big><a class="headerlink" href="#FlatCAM.App.save_project" title="Permalink to this definition">¶</a></dt>
-<dd><p>Saves the current project to the specified file.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) &#8211; Name of the file in which to save.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.set_form_item">
-<tt class="descname">set_form_item</tt><big>(</big><em>name</em>, <em>value</em><big>)</big><a class="headerlink" href="#FlatCAM.App.set_form_item" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets a form item &#8216;name&#8217; in the GUI with the given &#8216;value&#8217;. The syntax of
-form names in the GUI is &lt;kind&gt;_app_&lt;name&gt;, where kind is one of: rb (radio button),
-cb (check button), entry_eval or entry_text (entry), combo (combo box). name is
-whatever name it&#8217;s been given. For self.defaults, name is a key in the dictionary.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>name</strong> (<em>str</em>) &#8211; Name of the form field.</li>
-<li><strong>value</strong> (<em>Depends on field kind.</em>) &#8211; The value to set the form field to.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.set_progress_bar">
-<tt class="descname">set_progress_bar</tt><big>(</big><em>percentage</em>, <em>text=''</em><big>)</big><a class="headerlink" href="#FlatCAM.App.set_progress_bar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets the application&#8217;s progress bar to a given frac_digits and text.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>percentage</strong> (<em>float</em>) &#8211; The frac_digits (0.0-1.0) of the progress.</li>
-<li><strong>text</strong> (<em>str</em>) &#8211; Text to display on the progress bar.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.setup_component_editor">
-<tt class="descname">setup_component_editor</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.App.setup_component_editor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initial configuration of the component editor. Creates
-a page titled &#8220;Selection&#8221; on the notebook on the left
-side of the main window.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.setup_obj_classes">
-<tt class="descname">setup_obj_classes</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.App.setup_obj_classes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets up application specifics on the FlatCAMObj class.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.App.version_check">
-<tt class="descname">version_check</tt><big>(</big><em>*args</em><big>)</big><a class="headerlink" href="#FlatCAM.App.version_check" title="Permalink to this definition">¶</a></dt>
-<dd><p>Checks for the latest version of the program. Alerts the
-user if theirs is outdated. This method is meant to be run
-in a saeparate thread.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="plotcanvas">
-<h2>PlotCanvas<a class="headerlink" href="#plotcanvas" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.PlotCanvas">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">PlotCanvas</tt><big>(</big><em>container</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas" title="Permalink to this definition">¶</a></dt>
-<dd><p>Class handling the plotting area in the application.</p>
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.adjust_axes">
-<tt class="descname">adjust_axes</tt><big>(</big><em>xmin</em>, <em>ymin</em>, <em>xmax</em>, <em>ymax</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.adjust_axes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Adjusts all axes while maintaining the use of the whole canvas
-and an aspect ratio to 1:1 between x and y axes. The parameters are an original
-request that will be modified to fit these restrictions.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>xmin</strong> (<em>float</em>) &#8211; Requested minimum value for the X axis.</li>
-<li><strong>ymin</strong> (<em>float</em>) &#8211; Requested minimum value for the Y axis.</li>
-<li><strong>xmax</strong> (<em>float</em>) &#8211; Requested maximum value for the X axis.</li>
-<li><strong>ymax</strong> (<em>float</em>) &#8211; Requested maximum value for the Y axis.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.auto_adjust_axes">
-<tt class="descname">auto_adjust_axes</tt><big>(</big><em>*args</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.auto_adjust_axes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Calls <tt class="docutils literal"><span class="pre">adjust_axes()</span></tt> using the extents of the base axes.</p>
-<p>:rtype : None
-:return: None</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.clear">
-<tt class="descname">clear</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.clear" title="Permalink to this definition">¶</a></dt>
-<dd><p>Clears axes and figure.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.connect">
-<tt class="descname">connect</tt><big>(</big><em>event_name</em>, <em>callback</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.connect" title="Permalink to this definition">¶</a></dt>
-<dd><p>Attach an event handler to the canvas through the native GTK interface.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>event_name</strong> (<em>str</em>) &#8211; Name of the event</li>
-<li><strong>callback</strong> (<em>function</em>) &#8211; Function to call</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">Nothing</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.mpl_connect">
-<tt class="descname">mpl_connect</tt><big>(</big><em>event_name</em>, <em>callback</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.mpl_connect" title="Permalink to this definition">¶</a></dt>
-<dd><p>Attach an event handler to the canvas through the Matplotlib interface.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>event_name</strong> (<em>str</em>) &#8211; Name of the event</li>
-<li><strong>callback</strong> (<em>func</em>) &#8211; Function to call</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">Connection id</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">int</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.mpl_disconnect">
-<tt class="descname">mpl_disconnect</tt><big>(</big><em>cid</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.mpl_disconnect" title="Permalink to this definition">¶</a></dt>
-<dd><p>Disconnect callback with the give id.
-:param cid: Callback id.
-:return: None</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.new_axes">
-<tt class="descname">new_axes</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.new_axes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates and returns an Axes object attached to this object&#8217;s Figure.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> &#8211; Unique label for the axes.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Axes attached to the figure.</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">Axes</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.on_key_down">
-<tt class="descname">on_key_down</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.on_key_down" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; </td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.on_key_up">
-<tt class="descname">on_key_up</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.on_key_up" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; </td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.on_mouse_move">
-<tt class="descname">on_mouse_move</tt><big>(</big><em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.on_mouse_move" title="Permalink to this definition">¶</a></dt>
-<dd><p>Mouse movement event hadler.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>event</strong> &#8211; Contains information about the event.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.on_scroll">
-<tt class="descname">on_scroll</tt><big>(</big><em>canvas</em>, <em>event</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.on_scroll" title="Permalink to this definition">¶</a></dt>
-<dd><p>Scroll event handler.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>canvas</strong> &#8211; The widget generating the event. Ignored.</li>
-<li><strong>event</strong> &#8211; Event object containing the event information.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.PlotCanvas.zoom">
-<tt class="descname">zoom</tt><big>(</big><em>factor</em>, <em>center=None</em><big>)</big><a class="headerlink" href="#FlatCAM.PlotCanvas.zoom" title="Permalink to this definition">¶</a></dt>
-<dd><p>Zooms the plot by factor around a given
-center point. Takes care of re-drawing.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>factor</strong> (<em>float</em>) &#8211; Number by which to scale the plot.</li>
-<li><strong>center</strong> (<em>list</em>) &#8211; Coordinates [x, y] of the point around which to scale the plot.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="objectcollection">
-<h2>ObjectCollection<a class="headerlink" href="#objectcollection" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.ObjectCollection">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">ObjectCollection</tt><a class="headerlink" href="#FlatCAM.ObjectCollection" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="FlatCAM.ObjectCollection.append">
-<tt class="descname">append</tt><big>(</big><em>obj</em>, <em>active=False</em><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.append" title="Permalink to this definition">¶</a></dt>
-<dd><p>Add a FlatCAMObj the the collection. This method is thread-safe.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>obj</strong> (<em>FlatCAMObj</em>) &#8211; FlatCAMObj to append</li>
-<li><strong>active</strong> (<em>bool</em>) &#8211; If it is to become the active object after appending</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.change_name">
-<tt class="descname">change_name</tt><big>(</big><em>old_name</em>, <em>new_name</em><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.change_name" title="Permalink to this definition">¶</a></dt>
-<dd><p>Changes the name of <cite>FlatCAMObj</cite> named <cite>old_name</cite> to <cite>new_name</cite>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>old_name</strong> (<em>str</em>) &#8211; Name of the object to change.</li>
-<li><strong>new_name</strong> (<em>str</em>) &#8211; New name.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">True if name change succeeded, False otherwise. Will fail
-if no object with <cite>old_name</cite> is found.</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">bool</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.get_bounds">
-<tt class="descname">get_bounds</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.get_bounds" title="Permalink to this definition">¶</a></dt>
-<dd><p>Finds coordinates bounding all objects in the collection.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">[xmin, ymin, xmax, ymax]</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.get_by_name">
-<tt class="descname">get_by_name</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.get_by_name" title="Permalink to this definition">¶</a></dt>
-<dd><p>Fetches the FlatCAMObj with the given <cite>name</cite>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<em>str</em>) &#8211; The name of the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">The requested object or None if no such object.</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">FlatCAMObj or None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.get_list">
-<tt class="descname">get_list</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.get_list" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a list with all FlatCAMObj.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">List with all FlatCAMObj.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.get_names">
-<tt class="descname">get_names</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.get_names" title="Permalink to this definition">¶</a></dt>
-<dd><p>Gets a list of the names of all objects in the collection.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">List of names.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">list</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.on_list_selection_change">
-<tt class="descname">on_list_selection_change</tt><big>(</big><em>selection</em><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.on_list_selection_change" title="Permalink to this definition">¶</a></dt>
-<dd><p>Callback for change in selection on the objects&#8217; list.
-Instructs the new selection to build the UI for its options.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>selection</strong> &#8211; Ignored.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.on_row_activated">
-<tt class="descname">on_row_activated</tt><big>(</big><em>*args</em><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.on_row_activated" title="Permalink to this definition">¶</a></dt>
-<dd><p>Does nothing right now.
-:param args: Ignored.
-:return: None</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.set_active">
-<tt class="descname">set_active</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.set_active" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets an object as the active object in the program. Same
-as <cite>set_list_selection()</cite>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<em>str</em>) &#8211; Name of the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.ObjectCollection.set_list_selection">
-<tt class="descname">set_list_selection</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.ObjectCollection.set_list_selection" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets which object should be selected in the list.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> &#8211; Name of the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Rtype name:</th><td class="field-body">str</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="measurement">
-<h2>Measurement<a class="headerlink" href="#measurement" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.Measurement">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">Measurement</tt><big>(</big><em>container</em>, <em>plotcanvas</em>, <em>update=None</em><big>)</big><a class="headerlink" href="#FlatCAM.Measurement" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-</div>
-
-
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="devman.html" class="btn btn-neutral float-right" title="FlatCAM Developer Manual"/>Next <span class="icon icon-circle-arrow-right"></span></a>
-      
-      
-        <a href="flatcamobj.html" class="btn btn-neutral" title="FlatCAM Objects"><span class="icon icon-circle-arrow-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

+ 0 - 1329
doc/build/camlib.html

@@ -1,1329 +0,0 @@
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Camlib &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="index.html"/>
-        <link rel="next" title="FlatCAM Objects" href="flatcamobj.html"/>
-        <link rel="prev" title="Welcome to FlatCAM’s documentation!" href="index.html"/> 
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="index.html" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="index.html">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="index.html">Docs</a> &raquo;</li>
-      
-    <li>Camlib</li>
-      <li class="wy-breadcrumbs-aside">
-        
-          <a href="_sources/camlib.txt" rel="nofollow"> View page source</a>
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-  <div class="section" id="module-camlib">
-<span id="camlib"></span><h1>Camlib<a class="headerlink" href="#module-camlib" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="geometry">
-<h2>Geometry<a class="headerlink" href="#geometry" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="camlib.Geometry">
-<em class="property">class </em><tt class="descclassname">camlib.</tt><tt class="descname">Geometry</tt><a class="headerlink" href="#camlib.Geometry" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="camlib.Geometry.bounds">
-<tt class="descname">bounds</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Geometry.bounds" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns coordinates of rectangular bounds
-of geometry: (xmin, ymin, xmax, ymax).</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.clear_polygon">
-<tt class="descname">clear_polygon</tt><big>(</big><em>polygon</em>, <em>tooldia</em>, <em>overlap=0.15</em><big>)</big><a class="headerlink" href="#camlib.Geometry.clear_polygon" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates geometry inside a polygon for a tool to cover
-the whole area.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.convert_units">
-<tt class="descname">convert_units</tt><big>(</big><em>units</em><big>)</big><a class="headerlink" href="#camlib.Geometry.convert_units" title="Permalink to this definition">¶</a></dt>
-<dd><p>Converts the units of the object to <tt class="docutils literal"><span class="pre">units</span></tt> by scaling all
-the geometry appropriately. This call <tt class="docutils literal"><span class="pre">scale()</span></tt>. Don&#8217;t call
-it again in descendents.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>units</strong> (<em>str</em>) &#8211; &#8220;IN&#8221; or &#8220;MM&#8221;</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">Scaling factor resulting from unit change.</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">float</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.from_dict">
-<tt class="descname">from_dict</tt><big>(</big><em>d</em><big>)</big><a class="headerlink" href="#camlib.Geometry.from_dict" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets object&#8217;s attributes from a dictionary.
-Attributes to include are listed in <tt class="docutils literal"><span class="pre">self.ser_attrs</span></tt>.
-This method will look only for only and all the
-attributes in <tt class="docutils literal"><span class="pre">self.ser_attrs</span></tt>. They must all
-be present. Use only for deserializing saved
-objects.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>d</strong> (<em>dict</em>) &#8211; Dictionary of attributes to set in the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.get_empty_area">
-<tt class="descname">get_empty_area</tt><big>(</big><em>boundary=None</em><big>)</big><a class="headerlink" href="#camlib.Geometry.get_empty_area" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the complement of self.solid_geometry within
-the given boundary polygon. If not specified, it defaults to
-the rectangular bounding box of self.solid_geometry.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.isolation_geometry">
-<tt class="descname">isolation_geometry</tt><big>(</big><em>offset</em><big>)</big><a class="headerlink" href="#camlib.Geometry.isolation_geometry" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates contours around geometry at a given
-offset distance.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>offset</strong> (<em>float</em>) &#8211; Offset distance.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">The buffered geometry.</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">Shapely.MultiPolygon or Shapely.Polygon</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.offset">
-<tt class="descname">offset</tt><big>(</big><em>vect</em><big>)</big><a class="headerlink" href="#camlib.Geometry.offset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Offset the geometry by the given vector. Override this method.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>vect</strong> (<em>tuple</em>) &#8211; (x, y) vector by which to offset the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.scale">
-<tt class="descname">scale</tt><big>(</big><em>factor</em><big>)</big><a class="headerlink" href="#camlib.Geometry.scale" title="Permalink to this definition">¶</a></dt>
-<dd><p>Scales all of the object&#8217;s geometry by a given factor. Override
-this method.
-:param factor: Number by which to scale.
-:type factor: float
-:return: None
-:rtype: None</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.size">
-<tt class="descname">size</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Geometry.size" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns (width, height) of rectangular
-bounds of geometry.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Geometry.to_dict">
-<tt class="descname">to_dict</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Geometry.to_dict" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a respresentation of the object as a dictionary.
-Attributes to include are listed in <tt class="docutils literal"><span class="pre">self.ser_attrs</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">A dictionary-encoded copy of the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">dict</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="gerber">
-<h2>Gerber<a class="headerlink" href="#gerber" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="camlib.Gerber">
-<em class="property">class </em><tt class="descclassname">camlib.</tt><tt class="descname">Gerber</tt><big>(</big><em>Geometry</em><big>)</big><a class="headerlink" href="#camlib.Gerber" title="Permalink to this definition">¶</a></dt>
-<dd><p><strong>ATTRIBUTES</strong></p>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">apertures</span></tt> (dict): The keys are names/identifiers of each aperture.
-The values are dictionaries key/value pairs which describe the aperture. The
-type key is always present and the rest depend on the key:</li>
-</ul>
-<table border="1" class="docutils">
-<colgroup>
-<col width="24%" />
-<col width="76%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>type</td>
-<td>(str) &#8220;C&#8221;, &#8220;R&#8221;, &#8220;O&#8221;, &#8220;P&#8221;, or &#8220;AP&#8221;</td>
-</tr>
-<tr class="row-odd"><td>others</td>
-<td>Depend on <tt class="docutils literal"><span class="pre">type</span></tt></td>
-</tr>
-</tbody>
-</table>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">paths</span></tt> (list): A path is described by a line an aperture that follows that
-line. Each paths[i] is a dictionary:</li>
-</ul>
-<table border="1" class="docutils">
-<colgroup>
-<col width="20%" />
-<col width="80%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>linestring</td>
-<td>(Shapely.LineString) The actual path.</td>
-</tr>
-<tr class="row-odd"><td>aperture</td>
-<td>(str) The key for an aperture in apertures.</td>
-</tr>
-</tbody>
-</table>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">flashes</span></tt> (list): Flashes are single-point strokes of an aperture. Each
-is a dictionary:</li>
-</ul>
-<table border="1" class="docutils">
-<colgroup>
-<col width="20%" />
-<col width="80%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>loc</td>
-<td>(Point) Shapely Point indicating location.</td>
-</tr>
-<tr class="row-odd"><td>aperture</td>
-<td>(str) The key for an aperture in apertures.</td>
-</tr>
-</tbody>
-</table>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">regions</span></tt> (list): Are surfaces defined by a polygon (Shapely.Polygon),
-which have an exterior and zero or more interiors. An aperture is also
-associated with a region. Each is a dictionary:</li>
-</ul>
-<table border="1" class="docutils">
-<colgroup>
-<col width="18%" />
-<col width="82%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>polygon</td>
-<td>(Shapely.Polygon) The polygon defining the region.</td>
-</tr>
-<tr class="row-odd"><td>aperture</td>
-<td>(str) The key for an aperture in apertures.</td>
-</tr>
-</tbody>
-</table>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">aperture_macros</span></tt> (dictionary): Are predefined geometrical structures
-that can be instanciated with different parameters in an aperture
-definition. See <tt class="docutils literal"><span class="pre">apertures</span></tt> above. The key is the name of the macro,
-and the macro itself, the value, is a <tt class="docutils literal"><span class="pre">Aperture_Macro</span></tt> object.</li>
-<li><tt class="docutils literal"><span class="pre">flash_geometry</span></tt> (list): List of (Shapely) geometric object resulting
-from <tt class="docutils literal"><span class="pre">flashes</span></tt>. These are generated from <tt class="docutils literal"><span class="pre">flashes</span></tt> in <tt class="docutils literal"><span class="pre">do_flashes()</span></tt>.</li>
-<li><tt class="docutils literal"><span class="pre">buffered_paths</span></tt> (list): List of (Shapely) polygons resulting from
-<em>buffering</em> (or thickening) the <tt class="docutils literal"><span class="pre">paths</span></tt> with the aperture. These are
-generated from <tt class="docutils literal"><span class="pre">paths</span></tt> in <tt class="docutils literal"><span class="pre">buffer_paths()</span></tt>.</li>
-</ul>
-<p><strong>USAGE</strong>:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">g</span> <span class="o">=</span> <span class="n">Gerber</span><span class="p">()</span>
-<span class="n">g</span><span class="o">.</span><span class="n">parse_file</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
-<span class="n">g</span><span class="o">.</span><span class="n">create_geometry</span><span class="p">()</span>
-<span class="n">do_something</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">solid_geometry</span><span class="p">)</span>
-</pre></div>
-</div>
-<dl class="method">
-<dt id="camlib.Gerber.aperture_parse">
-<tt class="descname">aperture_parse</tt><big>(</big><em>apertureId</em>, <em>apertureType</em>, <em>apParameters</em><big>)</big><a class="headerlink" href="#camlib.Gerber.aperture_parse" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse gerber aperture definition into dictionary of apertures.
-The following kinds and their attributes are supported:</p>
-<ul class="simple">
-<li><em>Circular (C)</em>: size (float)</li>
-<li><em>Rectangle (R)</em>: width (float), height (float)</li>
-<li><em>Obround (O)</em>: width (float), height (float).</li>
-<li><em>Polygon (P)</em>: diameter(float), vertices(int), [rotation(float)]</li>
-<li><em>Aperture Macro (AM)</em>: macro (ApertureMacro), modifiers (list)</li>
-</ul>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>apertureId</strong> (<em>str</em>) &#8211; Id of the aperture being defined.</li>
-<li><strong>apertureType</strong> (<em>str</em>) &#8211; Type of the aperture.</li>
-<li><strong>apParameters</strong> (<em>str</em>) &#8211; Parameters of the aperture.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">Identifier of the aperture.</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.buffer_paths">
-<tt class="descname">buffer_paths</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Gerber.buffer_paths" title="Permalink to this definition">¶</a></dt>
-<dd><p>This is part of the parsing process. &#8220;Thickens&#8221; the paths
-by their appertures. This will only work for circular appertures.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.create_geometry">
-<tt class="descname">create_geometry</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Gerber.create_geometry" title="Permalink to this definition">¶</a></dt>
-<dd><p>Geometry from a Gerber file is made up entirely of polygons.
-Every stroke (linear or circular) has an aperture which gives
-it thickness. Additionally, aperture strokes have non-zero area,
-and regions naturally do as well.</p>
-<p>:rtype : None
-:return: None</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.do_flashes">
-<tt class="descname">do_flashes</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Gerber.do_flashes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates geometry for Gerber flashes (aperture on a single point).</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.fix_regions">
-<tt class="descname">fix_regions</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Gerber.fix_regions" title="Permalink to this definition">¶</a></dt>
-<dd><p>Overwrites the region polygons with fixed
-versions if found to be invalid (according to Shapely).</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="camlib.Gerber.frac_digits">
-<tt class="descname">frac_digits</tt><em class="property"> = None</em><a class="headerlink" href="#camlib.Gerber.frac_digits" title="Permalink to this definition">¶</a></dt>
-<dd><p>Number of fraction digits in Gerber numbers. Used during parsing.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.get_bounding_box">
-<tt class="descname">get_bounding_box</tt><big>(</big><em>margin=0.0</em>, <em>rounded=False</em><big>)</big><a class="headerlink" href="#camlib.Gerber.get_bounding_box" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates and returns a rectangular polygon bounding at a distance of
-margin from the object&#8217;s <tt class="docutils literal"><span class="pre">solid_geometry</span></tt>. If margin &gt; 0, the polygon
-can optionally have rounded corners of radius equal to margin.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>margin</strong> (<em>float</em>) &#8211; Distance to enlarge the rectangular bounding
-box in both positive and negative, x and y axes.</li>
-<li><strong>rounded</strong> (<em>bool</em>) &#8211; Wether or not to have rounded corners.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">The bounding box.</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">Shapely.Polygon</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="camlib.Gerber.int_digits">
-<tt class="descname">int_digits</tt><em class="property"> = None</em><a class="headerlink" href="#camlib.Gerber.int_digits" title="Permalink to this definition">¶</a></dt>
-<dd><p>Number of integer digits in Gerber numbers. Used during parsing.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.mirror">
-<tt class="descname">mirror</tt><big>(</big><em>axis</em>, <em>point</em><big>)</big><a class="headerlink" href="#camlib.Gerber.mirror" title="Permalink to this definition">¶</a></dt>
-<dd><p>Mirrors the object around a specified axis passign through
-the given point. What is affected:</p>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">buffered_paths</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">flash_geometry</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">solid_geometry</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">regions</span></tt></li>
-</ul>
-<p>NOTE:
-Does not modify the data used to create these elements. If these
-are recreated, the scaling will be lost. This behavior was modified
-because of the complexity reached in this class.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>axis</strong> (<em>str</em>) &#8211; &#8220;X&#8221; or &#8220;Y&#8221; indicates around which axis to mirror.</li>
-<li><strong>point</strong> (<em>list</em>) &#8211; [x, y] point belonging to the mirror axis.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.offset">
-<tt class="descname">offset</tt><big>(</big><em>vect</em><big>)</big><a class="headerlink" href="#camlib.Gerber.offset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Offsets the objects&#8217; geometry on the XY plane by a given vector.
-These are:</p>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">buffered_paths</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">flash_geometry</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">solid_geometry</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">regions</span></tt></li>
-</ul>
-<p>NOTE:
-Does not modify the data used to create these elements. If these
-are recreated, the scaling will be lost. This behavior was modified
-because of the complexity reached in this class.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>vect</strong> (<em>tuple</em>) &#8211; (x, y) offset vector.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.parse_file">
-<tt class="descname">parse_file</tt><big>(</big><em>filename</em><big>)</big><a class="headerlink" href="#camlib.Gerber.parse_file" title="Permalink to this definition">¶</a></dt>
-<dd><p>Calls Gerber.parse_lines() with array of lines
-read from the given file.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) &#8211; Gerber file to parse.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.parse_lines">
-<tt class="descname">parse_lines</tt><big>(</big><em>glines</em><big>)</big><a class="headerlink" href="#camlib.Gerber.parse_lines" title="Permalink to this definition">¶</a></dt>
-<dd><p>Main Gerber parser. Reads Gerber and populates <tt class="docutils literal"><span class="pre">self.paths</span></tt>, <tt class="docutils literal"><span class="pre">self.apertures</span></tt>,
-<tt class="docutils literal"><span class="pre">self.flashes</span></tt>, <tt class="docutils literal"><span class="pre">self.regions</span></tt> and <tt class="docutils literal"><span class="pre">self.units</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>glines</strong> (<em>list</em>) &#8211; Gerber code as list of strings, each element being
-one line of the source file.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Gerber.scale">
-<tt class="descname">scale</tt><big>(</big><em>factor</em><big>)</big><a class="headerlink" href="#camlib.Gerber.scale" title="Permalink to this definition">¶</a></dt>
-<dd><p>Scales the objects&#8217; geometry on the XY plane by a given factor.
-These are:</p>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">buffered_paths</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">flash_geometry</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">solid_geometry</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">regions</span></tt></li>
-</ul>
-<p>NOTE:
-Does not modify the data used to create these elements. If these
-are recreated, the scaling will be lost. This behavior was modified
-because of the complexity reached in this class.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>factor</strong> (<em>float</em>) &#8211; Number by which to scale.</td>
-</tr>
-</tbody>
-</table>
-<p>:rtype : None</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="aperturemacro">
-<h2>ApertureMacro<a class="headerlink" href="#aperturemacro" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="camlib.ApertureMacro">
-<em class="property">class </em><tt class="descclassname">camlib.</tt><tt class="descname">ApertureMacro</tt><big>(</big><em>name=None</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="camlib.ApertureMacro.append">
-<tt class="descname">append</tt><big>(</big><em>data</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.append" title="Permalink to this definition">¶</a></dt>
-<dd><p>Appends a string to the raw macro.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>data</strong> (<em>str</em>) &#8211; Part of the macro.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.default2zero">
-<em class="property">static </em><tt class="descname">default2zero</tt><big>(</big><em>n</em>, <em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.default2zero" title="Permalink to this definition">¶</a></dt>
-<dd><p>Pads the <tt class="docutils literal"><span class="pre">mods</span></tt> list with zeros resulting in an
-list of length n.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>n</strong> (<em>int</em>) &#8211; Length of the resulting list.</li>
-<li><strong>mods</strong> (<em>list</em>) &#8211; List to be padded.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">Zero-padded list.</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">list</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.ApertureMacro.from_dict">
-<tt class="descname">from_dict</tt><big>(</big><em>d</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.from_dict" title="Permalink to this definition">¶</a></dt>
-<dd><p>Populates the object from a serial representation created
-with <tt class="docutils literal"><span class="pre">self.to_dict()</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>d</strong> &#8211; Serial representation of an ApertureMacro object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_centerline">
-<em class="property">static </em><tt class="descname">make_centerline</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_centerline" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; (Exposure 0/1, width &gt;=0, height &gt;=0, x-center, y-center,
-rotation angle around origin in degrees)</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_circle">
-<em class="property">static </em><tt class="descname">make_circle</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_circle" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; (Exposure 0/1, Diameter &gt;=0, X-coord, Y-coord)</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.ApertureMacro.make_geometry">
-<tt class="descname">make_geometry</tt><big>(</big><em>modifiers</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_geometry" title="Permalink to this definition">¶</a></dt>
-<dd><p>Runs the macro for the given modifiers and generates
-the corresponding geometry.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>modifiers</strong> (<em>list</em>) &#8211; Modifiers (parameters) for this macro</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_lowerleftline">
-<em class="property">static </em><tt class="descname">make_lowerleftline</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_lowerleftline" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; (exposure 0/1, width &gt;=0, height &gt;=0, x-lowerleft, y-lowerleft,
-rotation angle around origin in degrees)</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_moire">
-<em class="property">static </em><tt class="descname">make_moire</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_moire" title="Permalink to this definition">¶</a></dt>
-<dd><p>Note: Specs indicate that rotation is only allowed if the center
-(x, y) == (0, 0). I will tolerate breaking this rule.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; (x-center, y-center, outer_dia_outer_ring, ring thickness,
-gap, max_rings, crosshair_thickness, crosshair_len, rotation
-angle around origin in degrees)</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_outline">
-<em class="property">static </em><tt class="descname">make_outline</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_outline" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; </td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_polygon">
-<em class="property">static </em><tt class="descname">make_polygon</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_polygon" title="Permalink to this definition">¶</a></dt>
-<dd><p>Note: Specs indicate that rotation is only allowed if the center
-(x, y) == (0, 0). I will tolerate breaking this rule.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; (exposure 0/1, n_verts 3&lt;=n&lt;=12, x-center, y-center,
-diameter of circumscribed circle &gt;=0, rotation angle around origin)</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_thermal">
-<em class="property">static </em><tt class="descname">make_thermal</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_thermal" title="Permalink to this definition">¶</a></dt>
-<dd><p>Note: Specs indicate that rotation is only allowed if the center
-(x, y) == (0, 0). I will tolerate breaking this rule.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; [x-center, y-center, diameter-outside, diameter-inside,
-gap-thickness, rotation angle around origin]</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="staticmethod">
-<dt id="camlib.ApertureMacro.make_vectorline">
-<em class="property">static </em><tt class="descname">make_vectorline</tt><big>(</big><em>mods</em><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.make_vectorline" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mods</strong> &#8211; (Exposure 0/1, Line width &gt;= 0, X-start, Y-start, X-end, Y-end,
-rotation angle around origin in degrees)</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.ApertureMacro.parse_content">
-<tt class="descname">parse_content</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.parse_content" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates numerical lists for all primitives in the aperture
-macro (in <tt class="docutils literal"><span class="pre">self.raw</span></tt>) by replacing all variables by their
-values iteratively and evaluating expressions. Results
-are stored in <tt class="docutils literal"><span class="pre">self.primitives</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.ApertureMacro.to_dict">
-<tt class="descname">to_dict</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.ApertureMacro.to_dict" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the object in a serializable form. Only the name and
-raw are required.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Dictionary representing the object. JSON ready.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">dict</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="excellon">
-<h2>Excellon<a class="headerlink" href="#excellon" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="camlib.Excellon">
-<em class="property">class </em><tt class="descclassname">camlib.</tt><tt class="descname">Excellon</tt><big>(</big><em>Geometry</em><big>)</big><a class="headerlink" href="#camlib.Excellon" title="Permalink to this definition">¶</a></dt>
-<dd><p><em>ATTRIBUTES</em></p>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">tools</span></tt> (dict): The key is the tool name and the value is
-a dictionary specifying the tool:</li>
-</ul>
-<table border="1" class="docutils">
-<colgroup>
-<col width="31%" />
-<col width="69%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>C</td>
-<td>Diameter of the tool</td>
-</tr>
-<tr class="row-odd"><td>Others</td>
-<td>Not supported (Ignored).</td>
-</tr>
-</tbody>
-</table>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">drills</span></tt> (list): Each is a dictionary:</li>
-</ul>
-<table border="1" class="docutils">
-<colgroup>
-<col width="31%" />
-<col width="69%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>point</td>
-<td>(Shapely.Point) Where to drill</td>
-</tr>
-<tr class="row-odd"><td>tool</td>
-<td>(str) A key in <tt class="docutils literal"><span class="pre">tools</span></tt></td>
-</tr>
-</tbody>
-</table>
-<dl class="method">
-<dt id="camlib.Excellon.create_geometry">
-<tt class="descname">create_geometry</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.Excellon.create_geometry" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates circles of the tool diameter at every point
-specified in <tt class="docutils literal"><span class="pre">self.drills</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Excellon.mirror">
-<tt class="descname">mirror</tt><big>(</big><em>axis</em>, <em>point</em><big>)</big><a class="headerlink" href="#camlib.Excellon.mirror" title="Permalink to this definition">¶</a></dt>
-<dd><table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>axis</strong> (<em>str</em>) &#8211; &#8220;X&#8221; or &#8220;Y&#8221; indicates around which axis to mirror.</li>
-<li><strong>point</strong> (<em>list</em>) &#8211; [x, y] point belonging to the mirror axis.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Excellon.offset">
-<tt class="descname">offset</tt><big>(</big><em>vect</em><big>)</big><a class="headerlink" href="#camlib.Excellon.offset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Offsets geometry on the XY plane in the object by a given vector.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>vect</strong> (<em>tuple</em>) &#8211; (x, y) offset vector.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Excellon.parse_file">
-<tt class="descname">parse_file</tt><big>(</big><em>filename</em><big>)</big><a class="headerlink" href="#camlib.Excellon.parse_file" title="Permalink to this definition">¶</a></dt>
-<dd><p>Reads the specified file as array of lines as
-passes it to <tt class="docutils literal"><span class="pre">parse_lines()</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) &#8211; The file to be read and parsed.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Excellon.parse_lines">
-<tt class="descname">parse_lines</tt><big>(</big><em>elines</em><big>)</big><a class="headerlink" href="#camlib.Excellon.parse_lines" title="Permalink to this definition">¶</a></dt>
-<dd><p>Main Excellon parser.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>elines</strong> (<em>list</em>) &#8211; List of strings, each being a line of Excellon code.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.Excellon.scale">
-<tt class="descname">scale</tt><big>(</big><em>factor</em><big>)</big><a class="headerlink" href="#camlib.Excellon.scale" title="Permalink to this definition">¶</a></dt>
-<dd><p>Scales geometry on the XY plane in the object by a given factor.
-Tool sizes, feedrates an Z-plane dimensions are untouched.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>factor</strong> (<em>float</em>) &#8211; Number by which to scale the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">NOne</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="cncjob">
-<h2>CNCJob<a class="headerlink" href="#cncjob" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="camlib.CNCjob">
-<em class="property">class </em><tt class="descclassname">camlib.</tt><tt class="descname">CNCjob</tt><big>(</big><em>Geometry</em><big>)</big><a class="headerlink" href="#camlib.CNCjob" title="Permalink to this definition">¶</a></dt>
-<dd><p>Represents work to be done by a CNC machine.</p>
-<p><em>ATTRIBUTES</em></p>
-<ul class="simple">
-<li><tt class="docutils literal"><span class="pre">gcode_parsed</span></tt> (list): Each is a dictionary:</li>
-</ul>
-<table border="1" class="docutils">
-<colgroup>
-<col width="34%" />
-<col width="66%" />
-</colgroup>
-<thead valign="bottom">
-<tr class="row-odd"><th class="head">Key</th>
-<th class="head">Value</th>
-</tr>
-</thead>
-<tbody valign="top">
-<tr class="row-even"><td>geom</td>
-<td>(Shapely.LineString) Tool path (XY plane)</td>
-</tr>
-<tr class="row-odd"><td>kind</td>
-<td>(string) &#8220;AB&#8221;, A is &#8220;T&#8221; (travel) or
-&#8220;C&#8221; (cut). B is &#8220;F&#8221; (fast) or &#8220;S&#8221; (slow).</td>
-</tr>
-</tbody>
-</table>
-<dl class="method">
-<dt id="camlib.CNCjob.gcode_parse">
-<tt class="descname">gcode_parse</tt><big>(</big><big>)</big><a class="headerlink" href="#camlib.CNCjob.gcode_parse" title="Permalink to this definition">¶</a></dt>
-<dd><p>G-Code parser (from self.gcode). Generates dictionary with
-single-segment LineString&#8217;s and &#8220;kind&#8221; indicating cut or travel,
-fast or feedrate speed.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.generate_from_excellon">
-<tt class="descname">generate_from_excellon</tt><big>(</big><em>exobj</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.generate_from_excellon" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generates G-code for drilling from Excellon object.
-self.gcode becomes a list, each element is a
-different job for each tool in the excellon code.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.generate_from_excellon_by_tool">
-<tt class="descname">generate_from_excellon_by_tool</tt><big>(</big><em>exobj</em>, <em>tools='all'</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.generate_from_excellon_by_tool" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates gcode for this object from an Excellon object
-for the specified tools.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>exobj</strong> (<em>Excellon</em>) &#8211; Excellon object to process</li>
-<li><strong>tools</strong> &#8211; Comma separated tool names</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Type:</th><td class="field-body"><p class="first">tools: str</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">None</p>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.generate_from_geometry">
-<tt class="descname">generate_from_geometry</tt><big>(</big><em>geometry</em>, <em>append=True</em>, <em>tooldia=None</em>, <em>tolerance=0</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.generate_from_geometry" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generates G-Code from a Geometry object. Stores in <tt class="docutils literal"><span class="pre">self.gcode</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>geometry</strong> (<em>Geometry</em>) &#8211; Geometry defining the toolpath</li>
-<li><strong>append</strong> (<em>bool</em>) &#8211; Wether to append to self.gcode or re-write it.</li>
-<li><strong>tooldia</strong> (<em>bool</em>) &#8211; If given, sets the tooldia property but does
-not affect the process in any other way.</li>
-<li><strong>tolerance</strong> &#8211; All points in the simplified object will be within the
-tolerance distance of the original geometry.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">None</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.linear2gcode">
-<tt class="descname">linear2gcode</tt><big>(</big><em>linear</em>, <em>tolerance=0</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.linear2gcode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generates G-code to cut along the linear feature.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>linear</strong> &#8211; The path to cut along.</li>
-<li><strong>tolerance</strong> (<em>float</em>) &#8211; All points in the simplified object will be within the
-tolerance distance of the original geometry.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Type:</th><td class="field-body"><p class="first">Shapely.LinearRing or Shapely.Linear String</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">G-code to cut alon the linear feature.</p>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.offset">
-<tt class="descname">offset</tt><big>(</big><em>vect</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.offset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Offsets all the geometry on the XY plane in the object by the
-given vector.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>vect</strong> (<em>tuple</em>) &#8211; (x, y) offset vector.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.plot2">
-<tt class="descname">plot2</tt><big>(</big><em>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.0005</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.plot2" title="Permalink to this definition">¶</a></dt>
-<dd><p>Plots the G-code job onto the given axes.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>axes</strong> &#8211; Matplotlib axes on which to plot.</li>
-<li><strong>tooldia</strong> &#8211; Tool diameter.</li>
-<li><strong>dpi</strong> &#8211; Not used!</li>
-<li><strong>margin</strong> &#8211; Not used!</li>
-<li><strong>color</strong> &#8211; Color specification.</li>
-<li><strong>alpha</strong> &#8211; Transparency specification.</li>
-<li><strong>tool_tolerance</strong> &#8211; Tolerance when drawing the toolshape.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">None</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.polygon2gcode">
-<tt class="descname">polygon2gcode</tt><big>(</big><em>polygon</em>, <em>tolerance=0</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.polygon2gcode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Creates G-Code for the exterior and all interior paths
-of a polygon.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>polygon</strong> (<em>Shapely.Polygon</em>) &#8211; A Shapely.Polygon</li>
-<li><strong>tolerance</strong> (<em>float</em>) &#8211; All points in the simplified object will be within the
-tolerance distance of the original geometry.</li>
-</ul>
-</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">G-code to cut along polygon.</p>
-</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p>
-</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.pre_parse">
-<tt class="descname">pre_parse</tt><big>(</big><em>gtext</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.pre_parse" title="Permalink to this definition">¶</a></dt>
-<dd><p>Separates parts of the G-Code text into a list of dictionaries.
-Used by <tt class="docutils literal"><span class="pre">self.gcode_parse()</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>gtext</strong> &#8211; A single string with g-code</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="camlib.CNCjob.scale">
-<tt class="descname">scale</tt><big>(</big><em>factor</em><big>)</big><a class="headerlink" href="#camlib.CNCjob.scale" title="Permalink to this definition">¶</a></dt>
-<dd><p>Scales all the geometry on the XY plane in the object by the
-given factor. Tool sizes, feedrates, or Z-axis dimensions are
-not altered.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>factor</strong> (<em>float</em>) &#8211; Number by which to scale the object.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-</div>
-
-
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="flatcamobj.html" class="btn btn-neutral float-right" title="FlatCAM Objects"/>Next <span class="icon icon-circle-arrow-right"></span></a>
-      
-      
-        <a href="index.html" class="btn btn-neutral" title="Welcome to FlatCAM’s documentation!"><span class="icon icon-circle-arrow-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

+ 0 - 231
doc/build/devman.html

@@ -1,231 +0,0 @@
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>FlatCAM Developer Manual &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="index.html"/>
-        <link rel="prev" title="FlatCAM Application" href="app.html"/> 
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="index.html" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1 current"><a class="current reference internal" href="">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="index.html">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="index.html">Docs</a> &raquo;</li>
-      
-    <li>FlatCAM Developer Manual</li>
-      <li class="wy-breadcrumbs-aside">
-        
-          <a href="_sources/devman.txt" rel="nofollow"> View page source</a>
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-  <div class="section" id="flatcam-developer-manual">
-<h1>FlatCAM Developer Manual<a class="headerlink" href="#flatcam-developer-manual" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="options">
-<h2>Options<a class="headerlink" href="#options" title="Permalink to this headline">¶</a></h2>
-<p>There are <strong>Application Defaults</strong>, <strong>Project Options</strong> and <strong>Object Options</strong> in FlatCAM.</p>
-<p><strong>Application Defaults</strong> are stored in <tt class="docutils literal"><span class="pre">app.defaults</span></tt>. This gets populated (updated) from the <tt class="docutils literal"><span class="pre">defaults.json</span></tt> file upon startup. These can be edited from the Options tab, where each widget calls <tt class="docutils literal"><span class="pre">app.on_options_update()</span></tt> if a change is detected. This function iterates over the keys of <tt class="docutils literal"><span class="pre">app.defaults</span></tt> and reads the GUI elements whose name is <tt class="docutils literal"><span class="pre">type</span> <span class="pre">+</span> <span class="pre">&quot;_app_&quot;</span> <span class="pre">key</span></tt>. Therefore, for an option to be recognized, it must be added to <tt class="docutils literal"><span class="pre">defaults.json</span></tt> in the first place. When saving, done in <tt class="docutils literal"><span class="pre">app.on_file_savedefaults()</span></tt>, the file is updated, not overwritten.</p>
-<p><strong>Project Options</strong> 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 <tt class="docutils literal"><span class="pre">app.options</span></tt> and can be written and read from the Options tab in the same way as with Application defaults.</p>
-<p><strong>Object Options</strong> for each object are inherited from Project Options upon creation of each new object. They can be modified independently from the Project&#8217;s options thereafter through the UI, where the widget containing the option is identified by name: <tt class="docutils literal"><span class="pre">type</span> <span class="pre">+</span> <span class="pre">kind</span> <span class="pre">+</span> <span class="pre">&quot;_&quot;</span> <span class="pre">+</span> <span class="pre">option</span></tt>. They are stored in <tt class="docutils literal"><span class="pre">object.options</span></tt>. They are saved along the Project options when saving the project.</p>
-<p>The syntax of UI widget names contain a <tt class="docutils literal"><span class="pre">type</span></tt>, which identifies what <em>type of widget</em> it is and how its value is supposed to be fetched, and a <tt class="docutils literal"><span class="pre">kind</span></tt>, which refer to what <em>kind of FlatCAM Object</em> it is for.</p>
-</div>
-<div class="section" id="serialization">
-<h2>Serialization<a class="headerlink" href="#serialization" title="Permalink to this headline">¶</a></h2>
-<p>Serialization refers to converting objects into a form that can be saved in a text file and recontructing objects from a text file.</p>
-<p>Saving and loading projects require serialization. These are done in <tt class="docutils literal"><span class="pre">App.save_project(filename)</span></tt> and <tt class="docutils literal"><span class="pre">App.open_project(filename)</span></tt>.</p>
-<p>Serialization in FlatCAM takes 2 forms. The first is calling objects&#8217; <tt class="docutils literal"><span class="pre">to_dict()</span></tt> method, which is inherited from <tt class="docutils literal"><span class="pre">Geometry.to_dict()</span></tt>:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">to_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">    Returns a respresentation of the object as a dictionary.</span>
-<span class="sd">    Attributes to include are listed in ``self.ser_attrs``.</span>
-
-<span class="sd">    :return: A dictionary-encoded copy of the object.</span>
-<span class="sd">    :rtype: dict</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ser_attrs</span><span class="p">:</span>
-        <span class="n">d</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
-    <span class="k">return</span> <span class="n">d</span>
-</pre></div>
-</div>
-<p>This creates a dictionary with attributes specified in the object&#8217;s <tt class="docutils literal"><span class="pre">ser_attrs</span></tt> list. If these are not in a serialized form, they will be processed later by the function <tt class="docutils literal"><span class="pre">to_dict()</span></tt>:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">to_dict</span><span class="p">(</span><span class="n">geo</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">    Makes a Shapely geometry object into serializeable form.</span>
-
-<span class="sd">    :param geo: Shapely geometry.</span>
-<span class="sd">    :type geo: BaseGeometry</span>
-<span class="sd">    :return: Dictionary with serializable form if ``geo`` was</span>
-<span class="sd">        BaseGeometry, otherwise returns ``geo``.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">geo</span><span class="p">,</span> <span class="n">BaseGeometry</span><span class="p">):</span>
-        <span class="k">return</span> <span class="p">{</span>
-            <span class="s">&quot;__class__&quot;</span><span class="p">:</span> <span class="s">&quot;Shply&quot;</span><span class="p">,</span>
-            <span class="s">&quot;__inst__&quot;</span><span class="p">:</span> <span class="n">sdumps</span><span class="p">(</span><span class="n">geo</span><span class="p">)</span>
-        <span class="p">}</span>
-    <span class="k">return</span> <span class="n">geo</span>
-</pre></div>
-</div>
-<p>This is used in <tt class="docutils literal"><span class="pre">json.dump(d,</span> <span class="pre">f,</span> <span class="pre">default=to_dict)</span></tt> and is applied to objects that json encounters to be in a non-serialized form.</p>
-</div>
-<div class="section" id="geometry-processing">
-<h2>Geometry Processing<a class="headerlink" href="#geometry-processing" title="Permalink to this headline">¶</a></h2>
-</div>
-</div>
-
-
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-      
-        <a href="app.html" class="btn btn-neutral" title="FlatCAM Application"><span class="icon icon-circle-arrow-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

+ 0 - 451
doc/build/flatcamobj.html

@@ -1,451 +0,0 @@
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>FlatCAM Objects &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="index.html"/>
-        <link rel="next" title="FlatCAM Application" href="app.html"/>
-        <link rel="prev" title="Camlib" href="camlib.html"/> 
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="index.html" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1 current"><a class="current reference internal" href="">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="index.html">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="index.html">Docs</a> &raquo;</li>
-      
-    <li>FlatCAM Objects</li>
-      <li class="wy-breadcrumbs-aside">
-        
-          <a href="_sources/flatcamobj.txt" rel="nofollow"> View page source</a>
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-  <div class="section" id="module-FlatCAM">
-<span id="flatcam-objects"></span><h1>FlatCAM Objects<a class="headerlink" href="#module-FlatCAM" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="flatcamobj">
-<h2>FlatCAMObj<a class="headerlink" href="#flatcamobj" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.FlatCAMObj">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">FlatCAMObj</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj" title="Permalink to this definition">¶</a></dt>
-<dd><p>Base type of objects handled in FlatCAM. These become interactive
-in the GUI, can be plotted, and their options can be modified
-by the user in their respective forms.</p>
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.build_ui">
-<tt class="descname">build_ui</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.build_ui" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sets up the UI/form for this object.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.deserialize">
-<tt class="descname">deserialize</tt><big>(</big><em>obj_dict</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.deserialize" title="Permalink to this definition">¶</a></dt>
-<dd><p>Re-builds an object from its serialized version.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>obj_dict</strong> (<em>dict</em>) &#8211; Dictionary representing a FlatCAMObj</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.plot">
-<tt class="descname">plot</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.plot" title="Permalink to this definition">¶</a></dt>
-<dd><p>Plot this object (Extend this method to implement the actual plotting).
-Axes get created, appended to canvas and cleared before plotting.
-Call this in descendants before doing the plotting.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Whether to continue plotting or not depending on the &#8220;plot&#8221; option.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">bool</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.read_form">
-<tt class="descname">read_form</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.read_form" title="Permalink to this definition">¶</a></dt>
-<dd><p>Reads form into <tt class="docutils literal"><span class="pre">self.options</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.read_form_item">
-<tt class="descname">read_form_item</tt><big>(</big><em>option</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.read_form_item" title="Permalink to this definition">¶</a></dt>
-<dd><p>Reads the specified option from the UI form into <tt class="docutils literal"><span class="pre">self.options</span></tt>.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>option</strong> (<em>str</em>) &#8211; Name of the option.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.serialize">
-<tt class="descname">serialize</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.serialize" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a representation of the object as a dictionary so
-it can be later exported as JSON. Override this method.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Dictionary representing the object</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">dict</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.set_form_item">
-<tt class="descname">set_form_item</tt><big>(</big><em>option</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.set_form_item" title="Permalink to this definition">¶</a></dt>
-<dd><p>Copies the specified option to the UI form.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>option</strong> (<em>str</em>) &#8211; Name of the option (Key in <tt class="docutils literal"><span class="pre">self.options</span></tt>).</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.setup_axes">
-<tt class="descname">setup_axes</tt><big>(</big><em>figure</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.setup_axes" title="Permalink to this definition">¶</a></dt>
-<dd><p>1) Creates axes if they don&#8217;t exist. 2) Clears axes. 3) Attaches
-them to figure if not part of the figure. 4) Sets transparent
-background. 5) Sets 1:1 scale aspect ratio.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>figure</strong> (<em>matplotlib.figure.Figure</em>) &#8211; A Matplotlib.Figure on which to add/configure axes.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMObj.to_form">
-<tt class="descname">to_form</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMObj.to_form" title="Permalink to this definition">¶</a></dt>
-<dd><p>Copies options to the UI form.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="flatcamgerber">
-<h2>FlatCAMGerber<a class="headerlink" href="#flatcamgerber" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.FlatCAMGerber">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">FlatCAMGerber</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMGerber" title="Permalink to this definition">¶</a></dt>
-<dd><p>Represents Gerber code.</p>
-<dl class="method">
-<dt id="FlatCAM.FlatCAMGerber.convert_units">
-<tt class="descname">convert_units</tt><big>(</big><em>units</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMGerber.convert_units" title="Permalink to this definition">¶</a></dt>
-<dd><p>Converts the units of the object by scaling dimensions in all geometry
-and options.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>units</strong> (<em>str</em>) &#8211; Units to which to convert the object: &#8220;IN&#8221; or &#8220;MM&#8221;.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="flatcamexcellon">
-<h2>FlatCAMExcellon<a class="headerlink" href="#flatcamexcellon" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.FlatCAMExcellon">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">FlatCAMExcellon</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMExcellon" title="Permalink to this definition">¶</a></dt>
-<dd><p>Represents Excellon/Drill code.</p>
-</dd></dl>
-
-</div>
-<div class="section" id="flatcamcncjob">
-<h2>FlatCAMCNCjob<a class="headerlink" href="#flatcamcncjob" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.FlatCAMCNCjob">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">FlatCAMCNCjob</tt><big>(</big><em>name</em>, <em>units='in'</em>, <em>kind='generic'</em>, <em>z_move=0.1</em>, <em>feedrate=3.0</em>, <em>z_cut=-0.002</em>, <em>tooldia=0.0</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMCNCjob" title="Permalink to this definition">¶</a></dt>
-<dd><p>Represents G-Code.</p>
-</dd></dl>
-
-</div>
-<div class="section" id="flatcamgeometry">
-<h2>FlatCAMGeometry<a class="headerlink" href="#flatcamgeometry" title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="FlatCAM.FlatCAMGeometry">
-<em class="property">class </em><tt class="descclassname">FlatCAM.</tt><tt class="descname">FlatCAMGeometry</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMGeometry" title="Permalink to this definition">¶</a></dt>
-<dd><p>Geometric object not associated with a specific
-format.</p>
-<dl class="method">
-<dt id="FlatCAM.FlatCAMGeometry.offset">
-<tt class="descname">offset</tt><big>(</big><em>vect</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMGeometry.offset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Offsets all geometry by a given vector/</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>vect</strong> (<em>tuple</em>) &#8211; (x, y) vector by which to offset the object&#8217;s geometry.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMGeometry.plot">
-<tt class="descname">plot</tt><big>(</big><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMGeometry.plot" title="Permalink to this definition">¶</a></dt>
-<dd><p>Plots the object into its axes. If None, of if the axes
-are not part of the app&#8217;s figure, it fetches new ones.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="FlatCAM.FlatCAMGeometry.scale">
-<tt class="descname">scale</tt><big>(</big><em>factor</em><big>)</big><a class="headerlink" href="#FlatCAM.FlatCAMGeometry.scale" title="Permalink to this definition">¶</a></dt>
-<dd><p>Scales all geometry by a given factor.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>factor</strong> (<em>float</em>) &#8211; Factor by which to scale the object&#8217;s geometry/</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-</div>
-
-
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="app.html" class="btn btn-neutral float-right" title="FlatCAM Application"/>Next <span class="icon icon-circle-arrow-right"></span></a>
-      
-      
-        <a href="camlib.html" class="btn btn-neutral" title="Camlib"><span class="icon icon-circle-arrow-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

+ 0 - 1065
doc/build/genindex.html

@@ -1,1065 +0,0 @@
-
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Index &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="index.html"/> 
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="index.html" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul>
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="index.html">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="index.html">Docs</a> &raquo;</li>
-      
-    <li></li>
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-
-<h1 id="index">Index</h1>
-
-<div class="genindex-jumpbox">
- <a href="#A"><strong>A</strong></a>
- | <a href="#B"><strong>B</strong></a>
- | <a href="#C"><strong>C</strong></a>
- | <a href="#D"><strong>D</strong></a>
- | <a href="#E"><strong>E</strong></a>
- | <a href="#F"><strong>F</strong></a>
- | <a href="#G"><strong>G</strong></a>
- | <a href="#I"><strong>I</strong></a>
- | <a href="#L"><strong>L</strong></a>
- | <a href="#M"><strong>M</strong></a>
- | <a href="#N"><strong>N</strong></a>
- | <a href="#O"><strong>O</strong></a>
- | <a href="#P"><strong>P</strong></a>
- | <a href="#R"><strong>R</strong></a>
- | <a href="#S"><strong>S</strong></a>
- | <a href="#T"><strong>T</strong></a>
- | <a href="#V"><strong>V</strong></a>
- | <a href="#Z"><strong>Z</strong></a>
- 
-</div>
-<h2 id="A">A</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.adjust_axes">adjust_axes() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber.aperture_parse">aperture_parse() (camlib.Gerber method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro">ApertureMacro (class in camlib)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App">App (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.append">append() (camlib.ApertureMacro method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="app.html#FlatCAM.ObjectCollection.append">(FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.auto_adjust_axes">auto_adjust_axes() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="B">B</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.Geometry.bounds">bounds() (camlib.Geometry method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber.buffer_paths">buffer_paths() (camlib.Gerber method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.build_ui">build_ui() (FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="C">C</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#module-camlib">camlib (module)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.change_name">change_name() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.clear">clear() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Geometry.clear_polygon">clear_polygon() (camlib.Geometry method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.CNCjob">CNCjob (class in camlib)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.connect">connect() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Geometry.convert_units">convert_units() (camlib.Geometry method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMGerber.convert_units">(FlatCAM.FlatCAMGerber method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="camlib.html#camlib.Excellon.create_geometry">create_geometry() (camlib.Excellon method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="camlib.html#camlib.Gerber.create_geometry">(camlib.Gerber method)</a>
-  </dt>
-
-      </dl></dd>
-  </dl></td>
-</tr></table>
-
-<h2 id="D">D</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.default2zero">default2zero() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.deserialize">deserialize() (FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.disable_plots">disable_plots() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber.do_flashes">do_flashes() (camlib.Gerber method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="E">E</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.Excellon">Excellon (class in camlib)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="F">F</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.file_chooser_action">file_chooser_action() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.file_chooser_save_action">file_chooser_save_action() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber.fix_regions">fix_regions() (camlib.Gerber method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#module-FlatCAM">FlatCAM (module)</a>, <a href="flatcamobj.html#module-FlatCAM">[1]</a>
-  </dt>
-
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMCNCjob">FlatCAMCNCjob (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMExcellon">FlatCAMExcellon (class in FlatCAM)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMGeometry">FlatCAMGeometry (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMGerber">FlatCAMGerber (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj">FlatCAMObj (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber.frac_digits">frac_digits (camlib.Gerber attribute)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.from_dict">from_dict() (camlib.ApertureMacro method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="camlib.html#camlib.Geometry.from_dict">(camlib.Geometry method)</a>
-  </dt>
-
-      </dl></dd>
-  </dl></td>
-</tr></table>
-
-<h2 id="G">G</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.CNCjob.gcode_parse">gcode_parse() (camlib.CNCjob method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.CNCjob.generate_from_excellon">generate_from_excellon() (camlib.CNCjob method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.CNCjob.generate_from_excellon_by_tool">generate_from_excellon_by_tool() (camlib.CNCjob method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.CNCjob.generate_from_geometry">generate_from_geometry() (camlib.CNCjob method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Geometry">Geometry (class in camlib)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber">Gerber (class in camlib)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber.get_bounding_box">get_bounding_box() (camlib.Gerber method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.get_bounds">get_bounds() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.get_by_name">get_by_name() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Geometry.get_empty_area">get_empty_area() (camlib.Geometry method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.get_eval">get_eval() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.get_list">get_list() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.get_names">get_names() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.get_radio_value">get_radio_value() (FlatCAM.App method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="I">I</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.info">info() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Gerber.int_digits">int_digits (camlib.Gerber attribute)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.Geometry.isolation_geometry">isolation_geometry() (camlib.Geometry method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="L">L</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.CNCjob.linear2gcode">linear2gcode() (camlib.CNCjob method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.load_defaults">load_defaults() (FlatCAM.App method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="M">M</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_centerline">make_centerline() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_circle">make_circle() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_geometry">make_geometry() (camlib.ApertureMacro method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_lowerleftline">make_lowerleftline() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_moire">make_moire() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_outline">make_outline() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_polygon">make_polygon() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_thermal">make_thermal() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.make_vectorline">make_vectorline() (camlib.ApertureMacro static method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.Measurement">Measurement (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Excellon.mirror">mirror() (camlib.Excellon method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="camlib.html#camlib.Gerber.mirror">(camlib.Gerber method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.mpl_connect">mpl_connect() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.mpl_disconnect">mpl_disconnect() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="N">N</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.new_axes">new_axes() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.new_object">new_object() (FlatCAM.App method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="O">O</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection">ObjectCollection (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.CNCjob.offset">offset() (camlib.CNCjob method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMGeometry.offset">(FlatCAM.FlatCAMGeometry method)</a>
-  </dt>
-
-        
-  <dt><a href="camlib.html#camlib.Excellon.offset">(camlib.Excellon method)</a>
-  </dt>
-
-        
-  <dt><a href="camlib.html#camlib.Geometry.offset">(camlib.Geometry method)</a>
-  </dt>
-
-        
-  <dt><a href="camlib.html#camlib.Gerber.offset">(camlib.Gerber method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="app.html#FlatCAM.App.on_about">on_about() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_activate_name">on_activate_name() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_canvas_configure">on_canvas_configure() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_cb_plot_toggled">on_cb_plot_toggled() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_clear_plots">on_clear_plots() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_click_over_plot">on_click_over_plot() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_closewindow">on_closewindow() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_cncjob_exportgcode">on_cncjob_exportgcode() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_create_aligndrill">on_create_aligndrill() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_create_mirror">on_create_mirror() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_delete">on_delete() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_entry_eval_activate">on_entry_eval_activate() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_eval_update">on_eval_update() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_excellon_tool_choose">on_excellon_tool_choose() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_file_new">on_file_new() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_file_openproject">on_file_openproject() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_file_savedefaults">on_file_savedefaults() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_file_saveproject">on_file_saveproject() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_file_saveprojectas">on_file_saveprojectas() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_file_saveprojectcopy">on_file_saveprojectcopy() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_fileopenexcellon">on_fileopenexcellon() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_fileopengcode">on_fileopengcode() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_fileopengerber">on_fileopengerber() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_filequit">on_filequit() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_generate_cncjob">on_generate_cncjob() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_generate_excellon_cncjob">on_generate_excellon_cncjob() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_generate_gerber_bounding_box">on_generate_gerber_bounding_box() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_generate_isolation">on_generate_isolation() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_generate_paintarea">on_generate_paintarea() (FlatCAM.App method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.on_gerber_generate_cutout">on_gerber_generate_cutout() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_gerber_generate_noncopper">on_gerber_generate_noncopper() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.on_key_down">on_key_down() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_key_over_plot">on_key_over_plot() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.on_key_up">on_key_up() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.on_list_selection_change">on_list_selection_change() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.on_mouse_move">on_mouse_move() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_mouse_move_over_plot">on_mouse_move_over_plot() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_offset_object">on_offset_object() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_app2object">on_options_app2object() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_app2project">on_options_app2project() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_combo_change">on_options_combo_change() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_object2app">on_options_object2app() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_object2project">on_options_object2project() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_project2app">on_options_project2app() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_project2object">on_options_project2object() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_options_update">on_options_update() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_row_activated">on_row_activated() (FlatCAM.App method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="app.html#FlatCAM.ObjectCollection.on_row_activated">(FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="app.html#FlatCAM.App.on_scale_object">on_scale_object() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.on_scroll">on_scroll() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_toggle_pointbox">on_toggle_pointbox() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_toggle_units">on_toggle_units() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_toolbar_replot">on_toolbar_replot() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_tools_doublesided">on_tools_doublesided() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_update_plot">on_update_plot() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_zoom_fit">on_zoom_fit() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_zoom_in">on_zoom_in() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.on_zoom_out">on_zoom_out() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.open_project">open_project() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.options2form">options2form() (FlatCAM.App method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="P">P</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.parse_content">parse_content() (camlib.ApertureMacro method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Excellon.parse_file">parse_file() (camlib.Excellon method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="camlib.html#camlib.Gerber.parse_file">(camlib.Gerber method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="camlib.html#camlib.Excellon.parse_lines">parse_lines() (camlib.Excellon method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="camlib.html#camlib.Gerber.parse_lines">(camlib.Gerber method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMGeometry.plot">plot() (FlatCAM.FlatCAMGeometry method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.plot">(FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="camlib.html#camlib.CNCjob.plot2">plot2() (camlib.CNCjob method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.plot_all">plot_all() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas">PlotCanvas (class in FlatCAM)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.CNCjob.polygon2gcode">polygon2gcode() (camlib.CNCjob method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.populate_objects_combo">populate_objects_combo() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.CNCjob.pre_parse">pre_parse() (camlib.CNCjob method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="R">R</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.read_form">read_form() (FlatCAM.App method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.read_form">(FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-      </dl></dd>
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.read_form_item">read_form_item() (FlatCAM.App method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.read_form_item">(FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-      </dl></dd>
-  </dl></td>
-</tr></table>
-
-<h2 id="S">S</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.save_project">save_project() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.CNCjob.scale">scale() (camlib.CNCjob method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMGeometry.scale">(FlatCAM.FlatCAMGeometry method)</a>
-  </dt>
-
-        
-  <dt><a href="camlib.html#camlib.Excellon.scale">(camlib.Excellon method)</a>
-  </dt>
-
-        
-  <dt><a href="camlib.html#camlib.Geometry.scale">(camlib.Geometry method)</a>
-  </dt>
-
-        
-  <dt><a href="camlib.html#camlib.Gerber.scale">(camlib.Gerber method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.serialize">serialize() (FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.set_active">set_active() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.set_form_item">set_form_item() (FlatCAM.App method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.set_form_item">(FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-      </dl></dd>
-      
-  <dt><a href="app.html#FlatCAM.ObjectCollection.set_list_selection">set_list_selection() (FlatCAM.ObjectCollection method)</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.set_progress_bar">set_progress_bar() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.setup_axes">setup_axes() (FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.setup_component_editor">setup_component_editor() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.setup_obj_classes">setup_obj_classes() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="camlib.html#camlib.Geometry.size">size() (camlib.Geometry method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="T">T</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="camlib.html#camlib.ApertureMacro.to_dict">to_dict() (camlib.ApertureMacro method)</a>
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="camlib.html#camlib.Geometry.to_dict">(camlib.Geometry method)</a>
-  </dt>
-
-      </dl></dd>
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.to_form">to_form() (FlatCAM.FlatCAMObj method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="V">V</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.version_check">version_check() (FlatCAM.App method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-<h2 id="Z">Z</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.PlotCanvas.zoom">zoom() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
-  </dl></td>
-</tr></table>
-
-
-
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

+ 0 - 223
doc/build/index.html

@@ -1,223 +0,0 @@
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Welcome to FlatCAM’s documentation! &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="#"/>
-        <link rel="next" title="Camlib" href="camlib.html"/> 
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="#" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul>
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="#">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="#">Docs</a> &raquo;</li>
-      
-    <li>Welcome to FlatCAM&#8217;s documentation!</li>
-      <li class="wy-breadcrumbs-aside">
-        
-          <a href="_sources/index.txt" rel="nofollow"> View page source</a>
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-  <div class="section" id="welcome-to-flatcam-s-documentation">
-<h1>Welcome to FlatCAM&#8217;s documentation!<a class="headerlink" href="#welcome-to-flatcam-s-documentation" title="Permalink to this headline">¶</a></h1>
-<p>Contents:</p>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div class="section" id="indices-and-tables">
-<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
-<ul class="simple">
-<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
-<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
-<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
-</ul>
-</div>
-
-
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="camlib.html" class="btn btn-neutral float-right" title="Camlib"/>Next <span class="icon icon-circle-arrow-right"></span></a>
-      
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

binární
doc/build/objects.inv


+ 0 - 201
doc/build/py-modindex.html

@@ -1,201 +0,0 @@
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Python Module Index &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="index.html"/>
- 
-
-    <script type="text/javascript">
-      DOCUMENTATION_OPTIONS.COLLAPSE_INDEX = true;
-    </script>
-
-
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="index.html" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul>
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="index.html">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="index.html">Docs</a> &raquo;</li>
-      
-    <li></li>
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-
-   <h1>Python Module Index</h1>
-
-   <div class="modindex-jumpbox">
-   <a href="#cap-c"><strong>c</strong></a> | 
-   <a href="#cap-f"><strong>f</strong></a>
-   </div>
-
-   <table class="indextable modindextable" cellspacing="0" cellpadding="2">
-     <tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
-     <tr class="cap" id="cap-c"><td></td><td>
-       <strong>c</strong></td><td></td></tr>
-     <tr>
-       <td></td>
-       <td>
-       <a href="camlib.html#module-camlib"><tt class="xref">camlib</tt></a></td><td>
-       <em></em></td></tr>
-     <tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
-     <tr class="cap" id="cap-f"><td></td><td>
-       <strong>f</strong></td><td></td></tr>
-     <tr>
-       <td></td>
-       <td>
-       <a href="flatcamobj.html#module-FlatCAM"><tt class="xref">FlatCAM</tt></a></td><td>
-       <em></em></td></tr>
-   </table>
-
-
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

+ 0 - 188
doc/build/search.html

@@ -1,188 +0,0 @@
-
-
-<!DOCTYPE html>
-<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
-<head>
-  <meta charset="utf-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Search &mdash; Cirkuix 0.5 documentation</title>
-  
-
-  
-  
-
-  
-  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
-
-  
-  
-
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:'./',
-        VERSION:'0.5',
-        COLLAPSE_INDEX:false,
-        FILE_SUFFIX:'.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-      <script type="text/javascript" src="_static/jquery.js"></script>
-      <script type="text/javascript" src="_static/underscore.js"></script>
-      <script type="text/javascript" src="_static/doctools.js"></script>
-      <script type="text/javascript" src="_static/searchtools.js"></script>
-
-    
-
-  
-
-  
-  
-    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-  
-
-  
-  
-    <script type="text/javascript">
-        jQuery(function () {
-            SphinxRtdTheme.StickyNav.enable();
-        });
-    </script>
-  
-
-  
-    <link rel="top" title="Cirkuix 0.5 documentation" href="index.html"/>
-  <script type="text/javascript">
-    jQuery(function() { Search.loadIndex("searchindex.js"); });
-  </script>
-  
-  <script type="text/javascript" id="searchindexloader"></script>
-   
-
-
-  <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
-
-</head>
-
-<body class="wy-body-for-nav" role="document">
-
-  <div class="wy-grid-for-nav">
-
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-nav-search">
-        <a href="index.html" class="icon icon-home"> Cirkuix</a>
-        <div role="search">
-  <form id ="rtd-search-form" class="wy-form" action="#" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-      </div>
-
-      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-        
-        
-            <ul>
-<li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#geometry">Geometry</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#gerber">Gerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#aperturemacro">ApertureMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#excellon">Excellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="camlib.html#cncjob">CNCJob</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamobj">FlatCAMObj</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgerber">FlatCAMGerber</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamexcellon">FlatCAMExcellon</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamcncjob">FlatCAMCNCjob</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flatcamobj.html#flatcamgeometry">FlatCAMGeometry</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="app.html#app">App</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#plotcanvas">PlotCanvas</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#objectcollection">ObjectCollection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="app.html#measurement">Measurement</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="devman.html">FlatCAM Developer Manual</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#options">Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#serialization">Serialization</a></li>
-<li class="toctree-l2"><a class="reference internal" href="devman.html#geometry-processing">Geometry Processing</a></li>
-</ul>
-</li>
-</ul>
-
-        
-      </div>
-      &nbsp;
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
-        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
-        <a href="index.html">Cirkuix</a>
-      </nav>
-
-
-      
-      <div class="wy-nav-content">
-        <div class="rst-content">
-          <div role="navigation" aria-label="breadcrumbs navigation">
-  <ul class="wy-breadcrumbs">
-    <li><a href="index.html">Docs</a> &raquo;</li>
-      
-    <li></li>
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-  </ul>
-  <hr/>
-</div>
-          <div role="main">
-            
-  <noscript>
-  <div id="fallback" class="admonition warning">
-    <p class="last">
-      Please activate JavaScript to enable the search
-      functionality.
-    </p>
-  </div>
-  </noscript>
-
-  
-  <div id="search-results">
-  
-  </div>
-
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        &copy; Copyright 2014, Juan Pablo Caram.
-    </p>
-  </div>
-
-  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>
-</footer>
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-</body>
-</html>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
doc/build/searchindex.js


+ 11 - 0
doc/source/bugs.rst

@@ -0,0 +1,11 @@
+Active Bugs
+===================
+
+Drill number parsing
+--------------------
+
+The screenshot below show the problematic file:
+
+.. image:: drill_parse_problem1.png
+   ::align: center
+

+ 1 - 0
doc/source/index.rst

@@ -17,6 +17,7 @@ Contents:
    flatcamobj
    app
    devman
+   bugs
 
 
 

+ 4 - 1
manual/editor.rst

@@ -1,4 +1,7 @@
 Geometry Editor
 ===============
 
-The Geometry Editor is a drawing CAD that allows you to edit FlatCAM Geometry Objects or create new ones from scratch. This provides the ultimate flexibility by letting you specify precisely and arbitrarily what you want your CNC router to do.
+The Geometry Editor is a drawing CAD that allows you to edit
+FlatCAM Geometry Objects or create new ones from scratch. This
+provides the ultimate flexibility by letting you specify precisely
+and arbitrarily what you want your CNC router to do.

+ 1 - 1
recent.json

@@ -1 +1 @@
-[{"kind": "gerber", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/Top3.gbr"}, {"kind": "excellon", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/FlatCam_Drilling_Test/FlatCam_Drilling_Test.drl"}, {"kind": "gerber", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/Top2.gbr"}, {"kind": "project", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/easy_eda_test/easy_eda.fc"}]
+[{"kind": "excellon", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/PlacaReles.drl"}, {"kind": "gerber", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/bedini 7 coils capacitor discharge.gbr"}, {"kind": "excellon", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/LockController_v1.0_pcb-RoundHoles.TXT/LockController_v1.0_pcb-RoundHoles.TXT"}, {"kind": "gerber", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/Gerbers/AVR_Transistor_Tester.DRL"}, {"kind": "excellon", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/Excellon_Planck/X-Y CONTROLLER - Drill Data - Through Hole.drl"}, {"kind": "excellon", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/FlatCam_Drilling_Test/FlatCam_Drilling_Test.drl"}, {"kind": "project", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/easy_eda_test/easy_eda.fc"}, {"kind": "gerber", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/easy_eda_test/GTL"}, {"kind": "excellon", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/easy_eda_test/DRL"}, {"kind": "excellon", "filename": "C:/Users/jpcaram/Dropbox/CNC/pcbcam/test_files/holes.drl"}]

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů