فهرست منبع

Double-sided PCB support.

Juan Pablo Caram 12 سال پیش
والد
کامیت
0baa820bc2

+ 8 - 2
FlatCAM.py

@@ -5,7 +5,12 @@
 ############################################################
 
 import threading
-from gi.repository import Gtk, Gdk, GLib, GObject
+
+# TODO: Bundle together. This is just for debugging.
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GLib
+from gi.repository import GObject
 import simplejson as json
 
 from matplotlib.figure import Figure
@@ -534,7 +539,7 @@ class App:
 
     def __init__(self):
         """
-        Starts the application.
+        Starts the application. Takes no parameters.
 
         :return: app
         :rtype: App
@@ -2291,6 +2296,7 @@ class App:
                 assert isinstance(gerber_obj, FlatCAMGerber)
                 GLib.idle_add(lambda: app_obj.set_progress_bar(0.2, "Parsing ..."))
                 gerber_obj.parse_file(filename)
+                GLib.idle_add(lambda: app_obj.set_progress_bar(0.5, "Creating Geometry ..."))
                 gerber_obj.create_geometry()
                 GLib.idle_add(lambda: app_obj.set_progress_bar(0.6, "Plotting ..."))
 

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Juan Pablo Caram
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 19 - 4
README

@@ -1,4 +1,19 @@
-Requirements:
-1) GTK+ 3
-2) Shapely
-3) PyObjects (Python GI API)
+FlatCAM: 2D Post-processinf for Manufacturing
+=============================================
+
+(c) 2014 Juan Pablo Caram
+
+FlatCAM is a program for preparing CNC jobs for making PCBs on a CNC router.
+Among other things, it can take a Gerber file generated by your favorite PCB
+CAD program, and create G-Code for Isolation routing. But there's more. See
+the features list below.
+
+* Powerful user interface for visualization.
+* Viewers for: Gerber, Excellon, G-Code.
+* Create isolation routing geometry from Gerber.
+* Create optimized G-Code from geometry.
+* Double sided PCB tools.
+* Clearing copper areas.
+* Measuring tool (planned).
+* PCB cutout tool.
+* Table flattening tool.

+ 36 - 6
camlib.py

@@ -22,7 +22,8 @@ from shapely.geometry.base import BaseGeometry
 from descartes.patch import PolygonPatch
 
 import simplejson as json
-from matplotlib.pyplot import plot
+# TODO: Commented for FlatCAM packaging with cx_freeze
+#from matplotlib.pyplot import plot
 
 class Geometry:
     def __init__(self):
@@ -210,7 +211,12 @@ class Gerber (Geometry):
       *buffering* (or thickening) the ``paths`` with the aperture. These are
       generated from ``paths`` in ``buffer_paths()``.
 
-    **USAGE**
+    **USAGE**::
+
+        g = Gerber()
+        g.parse_file(filename)
+        g.create_geometry()
+        do_something(s.solid_geometry)
 
 
     """
@@ -330,8 +336,12 @@ class Gerber (Geometry):
 
         * *Circular (C)*: size (float)
         * *Rectangle (R)*: width (float), height (float)
-        * *Obround (O)*: width (float), height (float). NOTE: This can
-          be parsed, but it is not supported further yet.
+        * *Obround (O)*: width (float), height (float).
+
+        :param gline: Line of Gerber code known to have an aperture definition.
+        :type gline: str
+        :return: Identifier of the aperture.
+        :rtype: str
         """
         indexstar = gline.find("*")
         indexc = gline.find("C,")
@@ -465,7 +475,23 @@ class Gerber (Geometry):
                 rectangle = shply_box(minx, miny, maxx, maxy)
                 self.flash_geometry.append(rectangle)
                 continue
-            #TODO: Add support for type='O'
+            if aperture['type'] == 'O':  # Obround
+                loc = flash['loc']
+                width = aperture['width']
+                height = aperture['height']
+                if width > height:
+                    p1 = Point(loc[0] + 0.5*(width-height), loc[1])
+                    p2 = Point(loc[0] - 0.5*(width-height), loc[1])
+                    c1 = p1.buffer(height*0.5)
+                    c2 = p2.buffer(height*0.5)
+                else:
+                    p1 = Point(loc[0], loc[1] + 0.5*(height-width))
+                    p2 = Point(loc[0], loc[1] - 0.5*(height-width))
+                    c1 = p1.buffer(width*0.5)
+                    c2 = p2.buffer(width*0.5)
+                obround = cascaded_union([c1, c2]).convex_hull
+                self.flash_geometry.append(obround)
+                continue
             print "WARNING: Aperture type %s not implemented" % (aperture['type'])
     
     def create_geometry(self):
@@ -480,9 +506,13 @@ class Gerber (Geometry):
         """
         # if len(self.buffered_paths) == 0:
         #     self.buffer_paths()
+        print "... buffer_paths()"
         self.buffer_paths()
+        print "... fix_regions()"
         self.fix_regions()
+        print "... do_flashes()"
         self.do_flashes()
+        print "... cascaded_union()"
         self.solid_geometry = cascaded_union(
                                 self.buffered_paths + 
                                 [poly['polygon'] for poly in self.regions] +
@@ -495,7 +525,7 @@ class Gerber (Geometry):
         can optionally have rounded corners of radius equal to margin.
 
         :param margin: Distance to enlarge the rectangular bounding
-        box in both positive and negative, x and y axes.
+         box in both positive and negative, x and y axes.
         :type margin: float
         :param rounded: Wether or not to have rounded corners.
         :type rounded: bool

BIN
doc/build/.doctrees/environment.pickle


BIN
doc/build/.doctrees/index.doctree


+ 6 - 6
doc/build/_sources/index.txt

@@ -13,7 +13,7 @@ Contents:
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: cirkuix
+.. automodule:: FlatCAM
 
 .. autoclass:: App
     :members:
@@ -30,19 +30,19 @@ Contents:
 .. autoclass:: CNCjob
     :members:
 
-.. autoclass:: CirkuixObj
+.. autoclass:: FlatCAMObj
     :members:
 
-.. autoclass:: CirkuixGerber
+.. autoclass:: FlatCAMGerber
     :members:
 
-.. autoclass:: CirkuixExcellon
+.. autoclass:: FlatCAMExcellon
     :members:
 
-.. autoclass:: CirkuixCNCjob
+.. autoclass:: FlatCAMCNCjob
     :members:
 
-.. autoclass:: CirkuixGeometry
+.. autoclass:: FlatCAMGeometry
     :members:
 
 

+ 167 - 139
doc/build/genindex.html

@@ -138,17 +138,17 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.adjust_axes">adjust_axes() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.adjust_axes">adjust_axes() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Gerber.aperture_parse">aperture_parse() (cirkuix.Gerber method)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.aperture_parse">aperture_parse() (FlatCAM.Gerber method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App">App (class in cirkuix)</a>
+  <dt><a href="index.html#FlatCAM.App">App (class in FlatCAM)</a>
   </dt>
 
   </dl></td>
@@ -158,17 +158,17 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Geometry.bounds">bounds() (cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.Geometry.bounds">bounds() (FlatCAM.Geometry method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.build_list">build_list() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.build_list">build_list() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.CirkuixObj.build_ui">build_ui() (cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.build_ui">build_ui() (FlatCAM.FlatCAMObj method)</a>
   </dt>
 
   </dl></td>
@@ -178,49 +178,31 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#module-cirkuix">cirkuix (module)</a>
+  <dt><a href="index.html#FlatCAM.App.clear_plots">clear_plots() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CirkuixCNCjob">CirkuixCNCjob (class in cirkuix)</a>
+  <dt><a href="index.html#FlatCAM.Geometry.clear_polygon">clear_polygon() (FlatCAM.Geometry method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CirkuixExcellon">CirkuixExcellon (class in cirkuix)</a>
-  </dt>
-
-      
-  <dt><a href="index.html#cirkuix.CirkuixGeometry">CirkuixGeometry (class in cirkuix)</a>
-  </dt>
-
-      
-  <dt><a href="index.html#cirkuix.CirkuixGerber">CirkuixGerber (class in cirkuix)</a>
-  </dt>
-
-      
-  <dt><a href="index.html#cirkuix.CirkuixObj">CirkuixObj (class in cirkuix)</a>
+  <dt><a href="index.html#FlatCAM.CNCjob">CNCjob (class in FlatCAM)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.clear_plots">clear_plots() (cirkuix.App method)</a>
-  </dt>
-
-      
-  <dt><a href="index.html#cirkuix.Geometry.clear_polygon">clear_polygon() (cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMGerber.convert_units">convert_units() (FlatCAM.FlatCAMGerber method)</a>
   </dt>
 
-      
-  <dt><a href="index.html#cirkuix.CNCjob">CNCjob (class in cirkuix)</a>
-  </dt>
-
-      
-  <dt><a href="index.html#cirkuix.Geometry.convert_units">convert_units() (cirkuix.Geometry method)</a>
+      <dd><dl>
+        
+  <dt><a href="index.html#FlatCAM.Geometry.convert_units">(FlatCAM.Geometry method)</a>
   </dt>
 
+      </dl></dd>
       
-  <dt><a href="index.html#cirkuix.Gerber.create_geometry">create_geometry() (cirkuix.Gerber method)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.create_geometry">create_geometry() (FlatCAM.Gerber method)</a>
   </dt>
 
   </dl></td>
@@ -230,17 +212,17 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.CirkuixObj.deserialize">deserialize() (cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.deserialize">deserialize() (FlatCAM.FlatCAMObj method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Gerber.digits">digits (cirkuix.Gerber attribute)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.digits">digits (FlatCAM.Gerber attribute)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Gerber.do_flashes">do_flashes() (cirkuix.Gerber method)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.do_flashes">do_flashes() (FlatCAM.Gerber method)</a>
   </dt>
 
   </dl></td>
@@ -250,7 +232,7 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Excellon">Excellon (class in cirkuix)</a>
+  <dt><a href="index.html#FlatCAM.Excellon">Excellon (class in FlatCAM)</a>
   </dt>
 
   </dl></td>
@@ -260,25 +242,49 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.file_chooser_action">file_chooser_action() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.file_chooser_action">file_chooser_action() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.App.file_chooser_save_action">file_chooser_save_action() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.Gerber.fix_regions">fix_regions() (FlatCAM.Gerber method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#module-FlatCAM">FlatCAM (module)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.file_chooser_save_action">file_chooser_save_action() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMCNCjob">FlatCAMCNCjob (class in FlatCAM)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Gerber.fix_regions">fix_regions() (cirkuix.Gerber method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMExcellon">FlatCAMExcellon (class in FlatCAM)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Gerber.fraction">fraction (cirkuix.Gerber attribute)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMGeometry">FlatCAMGeometry (class in FlatCAM)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Geometry.from_dict">from_dict() (cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMGerber">FlatCAMGerber (class in FlatCAM)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.FlatCAMObj">FlatCAMObj (class in FlatCAM)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.Gerber.fraction">fraction (FlatCAM.Gerber attribute)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.Geometry.from_dict">from_dict() (FlatCAM.Geometry method)</a>
   </dt>
 
   </dl></td>
@@ -288,45 +294,49 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.CNCjob.gcode_parse">gcode_parse() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.CNCjob.gcode_parse">gcode_parse() (FlatCAM.CNCjob method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.CNCjob.generate_from_excellon">generate_from_excellon() (FlatCAM.CNCjob method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CNCjob.generate_from_excellon">generate_from_excellon() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.CNCjob.generate_from_excellon_by_tool">generate_from_excellon_by_tool() (FlatCAM.CNCjob method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CNCjob.generate_from_excellon_by_tool">generate_from_excellon_by_tool() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.CNCjob.generate_from_geometry">generate_from_geometry() (FlatCAM.CNCjob method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CNCjob.generate_from_geometry">generate_from_geometry() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.Geometry">Geometry (class in FlatCAM)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Geometry">Geometry (class in cirkuix)</a>
+  <dt><a href="index.html#FlatCAM.Gerber">Gerber (class in FlatCAM)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Gerber">Gerber (class in cirkuix)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.get_bounding_box">get_bounding_box() (FlatCAM.Gerber method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.get_current">get_current() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.get_current">get_current() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Geometry.get_empty_area">get_empty_area() (cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.Geometry.get_empty_area">get_empty_area() (FlatCAM.Geometry method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.get_eval">get_eval() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.get_eval">get_eval() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.get_radio_value">get_radio_value() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.get_radio_value">get_radio_value() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
@@ -336,13 +346,13 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.info">info() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.info">info() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Geometry.isolation_geometry">isolation_geometry() (cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.Geometry.isolation_geometry">isolation_geometry() (FlatCAM.Geometry method)</a>
   </dt>
 
   </dl></td>
@@ -352,7 +362,7 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.load_defaults">load_defaults() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.load_defaults">load_defaults() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
@@ -362,7 +372,7 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.new_object">new_object() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.new_object">new_object() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
@@ -372,193 +382,213 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.on_activate_name">on_activate_name() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_activate_name">on_activate_name() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_canvas_configure">on_canvas_configure() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_canvas_configure">on_canvas_configure() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_clear_plots">on_clear_plots() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_clear_plots">on_clear_plots() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_click_over_plot">on_click_over_plot() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_click_over_plot">on_click_over_plot() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_closewindow">on_closewindow() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_closewindow">on_closewindow() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_cncjob_exportgcode">on_cncjob_exportgcode() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_cncjob_exportgcode">on_cncjob_exportgcode() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_delete">on_delete() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_create_aligndrill">on_create_aligndrill() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_entry_eval_activate">on_entry_eval_activate() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_create_mirror">on_create_mirror() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_eval_update">on_eval_update() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_delete">on_delete() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_excellon_tool_choose">on_excellon_tool_choose() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_entry_eval_activate">on_entry_eval_activate() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_file_new">on_file_new() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_eval_update">on_eval_update() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_file_openproject">on_file_openproject() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_excellon_tool_choose">on_excellon_tool_choose() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_file_savedefaults">on_file_savedefaults() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_file_new">on_file_new() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_file_saveproject">on_file_saveproject() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_file_openproject">on_file_openproject() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_file_saveprojectas">on_file_saveprojectas() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_file_savedefaults">on_file_savedefaults() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_file_saveprojectcopy">on_file_saveprojectcopy() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_file_saveproject">on_file_saveproject() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_fileopenexcellon">on_fileopenexcellon() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_file_saveprojectas">on_file_saveprojectas() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_fileopengcode">on_fileopengcode() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_file_saveprojectcopy">on_file_saveprojectcopy() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_fileopengerber">on_fileopengerber() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_fileopenexcellon">on_fileopenexcellon() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_filequit">on_filequit() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_fileopengcode">on_fileopengcode() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_generate_cncjob">on_generate_cncjob() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_fileopengerber">on_fileopengerber() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_generate_excellon_cncjob">on_generate_excellon_cncjob() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_filequit">on_filequit() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_generate_gerber_bounding_box">on_generate_gerber_bounding_box() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_generate_cncjob">on_generate_cncjob() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_generate_isolation">on_generate_isolation() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_generate_excellon_cncjob">on_generate_excellon_cncjob() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.App.on_generate_gerber_bounding_box">on_generate_gerber_bounding_box() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.App.on_generate_isolation">on_generate_isolation() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.on_generate_paintarea">on_generate_paintarea() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_generate_paintarea">on_generate_paintarea() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_gerber_generate_cutout">on_gerber_generate_cutout() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_gerber_generate_cutout">on_gerber_generate_cutout() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_gerber_generate_noncopper">on_gerber_generate_noncopper() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_gerber_generate_noncopper">on_gerber_generate_noncopper() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_key_over_plot">on_key_over_plot() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_key_over_plot">on_key_over_plot() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_mouse_move_over_plot">on_mouse_move_over_plot() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_mouse_move_over_plot">on_mouse_move_over_plot() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_app2object">on_options_app2object() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_app2object">on_options_app2object() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_app2project">on_options_app2project() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_app2project">on_options_app2project() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_combo_change">on_options_combo_change() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_combo_change">on_options_combo_change() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_object2app">on_options_object2app() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_object2app">on_options_object2app() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_object2project">on_options_object2project() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_object2project">on_options_object2project() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_project2app">on_options_project2app() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_project2app">on_options_project2app() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_project2object">on_options_project2object() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_project2object">on_options_project2object() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_options_update">on_options_update() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_options_update">on_options_update() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_replot">on_replot() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_replot">on_replot() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_row_activated">on_row_activated() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_row_activated">on_row_activated() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_scale_object">on_scale_object() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_scale_object">on_scale_object() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_tree_selection_changed">on_tree_selection_changed() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_toggle_pointbox">on_toggle_pointbox() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_update_plot">on_update_plot() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_toggle_units">on_toggle_units() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_zoom_fit">on_zoom_fit() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_tools_doublesided">on_tools_doublesided() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_zoom_in">on_zoom_in() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_tree_selection_changed">on_tree_selection_changed() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.on_zoom_out">on_zoom_out() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_update_plot">on_update_plot() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.open_project">open_project() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_zoom_fit">on_zoom_fit() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.options2form">options2form() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.on_zoom_in">on_zoom_in() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.App.on_zoom_out">on_zoom_out() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.App.open_project">open_project() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.App.options2form">options2form() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
@@ -568,45 +598,43 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Gerber.parse_file">parse_file() (cirkuix.Gerber method)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.parse_file">parse_file() (FlatCAM.Gerber method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Excellon.parse_lines">parse_lines() (cirkuix.Excellon method)</a>
+  <dt><a href="index.html#FlatCAM.Excellon.parse_lines">parse_lines() (FlatCAM.Excellon method)</a>
   </dt>
 
       <dd><dl>
         
-  <dt><a href="index.html#cirkuix.Gerber.parse_lines">(cirkuix.Gerber method)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.parse_lines">(FlatCAM.Gerber method)</a>
   </dt>
 
       </dl></dd>
       
-  <dt><a href="index.html#cirkuix.CirkuixObj.plot">plot() (cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.plot">plot() (FlatCAM.FlatCAMObj method)</a>
   </dt>
 
-      <dd><dl>
-        
-  <dt><a href="index.html#cirkuix.CNCjob.plot">(cirkuix.CNCjob method)</a>
-  </dt>
-
-      </dl></dd>
       
-  <dt><a href="index.html#cirkuix.CNCjob.plot2">plot2() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.CNCjob.plot2">plot2() (FlatCAM.CNCjob method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.plot_all">plot_all() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.plot_all">plot_all() (FlatCAM.App method)</a>
+  </dt>
+
+      
+  <dt><a href="index.html#FlatCAM.CNCjob.polygon2gcode">polygon2gcode() (FlatCAM.CNCjob method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CNCjob.polygon2gcode">polygon2gcode() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.App.populate_objects_combo">populate_objects_combo() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CNCjob.pre_parse">pre_parse() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.CNCjob.pre_parse">pre_parse() (FlatCAM.CNCjob method)</a>
   </dt>
 
   </dl></td>
@@ -616,19 +644,19 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.read_form">read_form() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.read_form">read_form() (FlatCAM.App method)</a>
   </dt>
 
       <dd><dl>
         
-  <dt><a href="index.html#cirkuix.CirkuixObj.read_form">(cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.read_form">(FlatCAM.FlatCAMObj method)</a>
   </dt>
 
       </dl></dd>
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.read_form_item">read_form_item() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.read_form_item">read_form_item() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
@@ -638,73 +666,73 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.save_project">save_project() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.save_project">save_project() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.CNCjob.scale">scale() (cirkuix.CNCjob method)</a>
+  <dt><a href="index.html#FlatCAM.CNCjob.scale">scale() (FlatCAM.CNCjob method)</a>
   </dt>
 
       <dd><dl>
         
-  <dt><a href="index.html#cirkuix.Excellon.scale">(cirkuix.Excellon method)</a>
+  <dt><a href="index.html#FlatCAM.Excellon.scale">(FlatCAM.Excellon method)</a>
   </dt>
 
         
-  <dt><a href="index.html#cirkuix.Geometry.scale">(cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.Geometry.scale">(FlatCAM.Geometry method)</a>
   </dt>
 
         
-  <dt><a href="index.html#cirkuix.Gerber.scale">(cirkuix.Gerber method)</a>
+  <dt><a href="index.html#FlatCAM.Gerber.scale">(FlatCAM.Gerber method)</a>
   </dt>
 
       </dl></dd>
       
-  <dt><a href="index.html#cirkuix.CirkuixObj.serialize">serialize() (cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.serialize">serialize() (FlatCAM.FlatCAMObj method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.set_form_item">set_form_item() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.set_form_item">set_form_item() (FlatCAM.App method)</a>
   </dt>
 
       <dd><dl>
         
-  <dt><a href="index.html#cirkuix.CirkuixObj.set_form_item">(cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.set_form_item">(FlatCAM.FlatCAMObj method)</a>
   </dt>
 
       </dl></dd>
       
-  <dt><a href="index.html#cirkuix.App.set_list_selection">set_list_selection() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.set_list_selection">set_list_selection() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.set_progress_bar">set_progress_bar() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.set_progress_bar">set_progress_bar() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.CirkuixObj.setup_axes">setup_axes() (cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.setup_axes">setup_axes() (FlatCAM.FlatCAMObj method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.setup_component_editor">setup_component_editor() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.setup_component_editor">setup_component_editor() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.setup_obj_classes">setup_obj_classes() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.setup_obj_classes">setup_obj_classes() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.setup_plot">setup_plot() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.setup_plot">setup_plot() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.App.setup_project_list">setup_project_list() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.setup_project_list">setup_project_list() (FlatCAM.App method)</a>
   </dt>
 
       
-  <dt><a href="index.html#cirkuix.Geometry.size">size() (cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.Geometry.size">size() (FlatCAM.Geometry method)</a>
   </dt>
 
   </dl></td>
@@ -714,13 +742,13 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.Geometry.to_dict">to_dict() (cirkuix.Geometry method)</a>
+  <dt><a href="index.html#FlatCAM.Geometry.to_dict">to_dict() (FlatCAM.Geometry method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.CirkuixObj.to_form">to_form() (cirkuix.CirkuixObj method)</a>
+  <dt><a href="index.html#FlatCAM.FlatCAMObj.to_form">to_form() (FlatCAM.FlatCAMObj method)</a>
   </dt>
 
   </dl></td>
@@ -730,7 +758,7 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="index.html#cirkuix.App.zoom">zoom() (cirkuix.App method)</a>
+  <dt><a href="index.html#FlatCAM.App.zoom">zoom() (FlatCAM.App method)</a>
   </dt>
 
   </dl></td>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 283 - 174
doc/build/index.html


BIN
doc/build/objects.inv


+ 4 - 4
doc/build/py-modindex.html

@@ -122,17 +122,17 @@
    <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 class="cap" id="cap-f"><td></td><td>
+       <strong>f</strong></td><td></td></tr>
      <tr>
        <td></td>
        <td>
-       <a href="index.html#module-cirkuix"><tt class="xref">cirkuix</tt></a></td><td>
+       <a href="index.html#module-FlatCAM"><tt class="xref">FlatCAM</tt></a></td><td>
        <em></em></td></tr>
    </table>
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
doc/build/searchindex.js


+ 0 - 4
doc/source/camlib.rst

@@ -1,4 +0,0 @@
-This is the main file for camlib
-=================================
-
-Some text.

+ 7 - 7
doc/source/index.rst

@@ -5,7 +5,7 @@
 
 
 
-Welcome to Cirkuix's documentation!
+Welcome to FlatCAM's documentation!
 ===================================
 
 Contents:
@@ -13,7 +13,7 @@ Contents:
 .. toctree::
    :maxdepth: 2
 
-.. automodule:: cirkuix
+.. automodule:: FlatCAM
 
 .. autoclass:: App
     :members:
@@ -30,19 +30,19 @@ Contents:
 .. autoclass:: CNCjob
     :members:
 
-.. autoclass:: CirkuixObj
+.. autoclass:: FlatCAMObj
     :members:
 
-.. autoclass:: CirkuixGerber
+.. autoclass:: FlatCAMGerber
     :members:
 
-.. autoclass:: CirkuixExcellon
+.. autoclass:: FlatCAMExcellon
     :members:
 
-.. autoclass:: CirkuixCNCjob
+.. autoclass:: FlatCAMCNCjob
     :members:
 
-.. autoclass:: CirkuixGeometry
+.. autoclass:: FlatCAMGeometry
     :members:
 
 

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است