Просмотр исходного кода

Added multi-pass isolation capabilities.

Juan Pablo Caram 12 лет назад
Родитель
Сommit
43cf694aab

+ 31 - 16
FlatCAM.py

@@ -233,7 +233,9 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
             "mergepolys": True,
             "mergepolys": True,
             "multicolored": False,
             "multicolored": False,
             "solid": False,
             "solid": False,
-            "isotooldia": 0.4 / 25.4,
+            "isotooldia": 0.016,
+            "isopasses": 1,
+            "isooverlap": 0.15,
             "cutoutmargin": 0.2,
             "cutoutmargin": 0.2,
             "cutoutgapsize": 0.15,
             "cutoutgapsize": 0.15,
             "gaps": "tb",
             "gaps": "tb",
@@ -249,6 +251,8 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
             "multicolored": "cb",
             "multicolored": "cb",
             "solid": "cb",
             "solid": "cb",
             "isotooldia": "entry_eval",
             "isotooldia": "entry_eval",
+            "isopasses": "entry_eval",
+            "isooverlap": "entry_eval",
             "cutoutmargin": "entry_eval",
             "cutoutmargin": "entry_eval",
             "cutoutgapsize": "entry_eval",
             "cutoutgapsize": "entry_eval",
             "gaps": "radio",
             "gaps": "radio",
@@ -663,9 +667,9 @@ class App:
         self.plotcanvas.mpl_connect('motion_notify_event', self.on_mouse_move_over_plot)
         self.plotcanvas.mpl_connect('motion_notify_event', self.on_mouse_move_over_plot)
         self.plotcanvas.mpl_connect('key_press_event', self.on_key_over_plot)
         self.plotcanvas.mpl_connect('key_press_event', self.on_key_over_plot)
 
 
-        self.axes = self.plotcanvas.axes  # TODO: Just for testing
-        self.figure = self.plotcanvas.figure  # TODO: Just for testing
-        self.canvas = self.plotcanvas.canvas  # TODO: Just for testing
+        # self.axes = self.plotcanvas.axes  # TODO: Just for testing
+        # self.figure = self.plotcanvas.figure  # TODO: Just for testing
+        # self.canvas = self.plotcanvas.canvas  # TODO: Just for testing
 
 
         self.setup_tooltips()
         self.setup_tooltips()
 
 
@@ -717,9 +721,9 @@ class App:
         self.plot_mousemove_subscribers = {}
         self.plot_mousemove_subscribers = {}
 
 
         ## Tools ##
         ## Tools ##
-        self.measure = Measurement(self.axes, self.plot_click_subscribers,
-                                   self.plot_mousemove_subscribers,
-                                   lambda: self.canvas.queue_draw())
+        # self.measure = Measurement(self.axes, self.plot_click_subscribers,
+        #                            self.plot_mousemove_subscribers,
+        #                            lambda: self.canvas.queue_draw())
 
 
         #### Initialization ####
         #### Initialization ####
         self.load_defaults()
         self.load_defaults()
@@ -1900,6 +1904,7 @@ class App:
         :return: None
         :return: None
         """
         """
 
 
+        # Read options from file
         try:
         try:
             f = open("defaults.json")
             f = open("defaults.json")
             options = f.read()
             options = f.read()
@@ -1916,9 +1921,11 @@ class App:
             self.info("ERROR: Failed to parse defaults file.")
             self.info("ERROR: Failed to parse defaults file.")
             return
             return
 
 
+        # Update options
         assert isinstance(defaults, dict)
         assert isinstance(defaults, dict)
         defaults.update(self.defaults)
         defaults.update(self.defaults)
 
 
+        # Save update options
         try:
         try:
             f = open("defaults.json", "w")
             f = open("defaults.json", "w")
             json.dump(defaults, f)
             json.dump(defaults, f)
@@ -2218,17 +2225,25 @@ class App:
 
 
         gerb = self.get_current()
         gerb = self.get_current()
         gerb.read_form()
         gerb.read_form()
-        iso_name = gerb.options["name"] + "_iso"
+        dia = gerb.options["isotooldia"]
+        passes = int(gerb.options["isopasses"])
+        overlap = gerb.options["isooverlap"] * dia
 
 
-        def iso_init(geo_obj, app_obj):
-            # Propagate options
-            geo_obj.options["cnctooldia"] = gerb.options["isotooldia"]
+        for i in range(passes):
+
+            offset = (2*i + 1)/2.0 * dia - i*overlap
+            iso_name = gerb.options["name"] + "_iso%d" % (i+1)
+
+            # TODO: This is ugly. Create way to pass data into init function.
+            def iso_init(geo_obj, app_obj):
+                # Propagate options
+                geo_obj.options["cnctooldia"] = gerb.options["isotooldia"]
 
 
-            geo_obj.solid_geometry = gerb.isolation_geometry(gerb.options["isotooldia"] / 2.0)
-            app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"])
+                geo_obj.solid_geometry = gerb.isolation_geometry(offset)
+                app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"])
 
 
-        # TODO: Do something if this is None. Offer changing name?
-        self.new_object("geometry", iso_name, iso_init)
+            # TODO: Do something if this is None. Offer changing name?
+            self.new_object("geometry", iso_name, iso_init)
 
 
     def on_generate_cncjob(self, widget):
     def on_generate_cncjob(self, widget):
         """
         """
@@ -2680,7 +2695,7 @@ class App:
         """
         """
 
 
         # For key presses
         # For key presses
-        self.canvas.grab_focus()
+        self.plotcanvas.canvas.grab_focus()
 
 
         try:
         try:
             print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (
             print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (

Разница между файлами не показана из-за своего большого размера
+ 313 - 428
FlatCAM.ui


+ 1 - 1
defaults.json

@@ -1 +1 @@
-{"geometry_paintoverlap": 0.15, "geometry_plot": true, "gerber_isotooldia": 0.016, "gerber_plot": true, "gerber_mergepolys": true, "gerber_cutoutgapsize": 0.15, "geometry_feedrate": 3.0, "units": "IN", "excellon_travelz": 0.1, "gerber_multicolored": false, "gerber_solid": true, "excellon_plot": true, "excellon_feedrate": 5.0, "cncjob_tooldia": 0.016, "geometry_travelz": 0.1, "gerber_cutoutmargin": 0.2, "excellon_solid": false, "geometry_paintmargin": 0.01, "geometry_cutz": -0.002, "gerber_noncoppermargin": 0.0, "gerber_gaps": "4", "excellon_multicolored": false, "gerber_bboxmargin": 0.0, "cncjob_plot": true, "excellon_drillz": -0.1, "gerber_bboxrounded": false, "geometry_multicolored": false, "geometry_cnctooldia": 0.016, "geometry_solid": false, "geometry_painttooldia": 0.0625}
+{"geometry_paintoverlap": 0.15, "geometry_plot": true, "excellon_feedrate": 5.0, "gerber_plot": true, "gerber_mergepolys": true, "excellon_drillz": -0.1, "geometry_feedrate": 3.0, "units": "IN", "excellon_travelz": 0.1, "gerber_multicolored": false, "gerber_solid": true, "gerber_isopasses": 1, "excellon_plot": true, "gerber_isotooldia": 0.016, "cncjob_tooldia": 0.016, "geometry_travelz": 0.1, "gerber_cutoutmargin": 0.2, "excellon_solid": false, "geometry_paintmargin": 0.01, "geometry_cutz": -0.002, "geometry_cnctooldia": 0.016, "geometry_painttooldia": 0.0625, "gerber_gaps": "4", "excellon_multicolored": false, "gerber_bboxmargin": 0.0, "cncjob_plot": true, "gerber_cutoutgapsize": 0.15, "gerber_isooverlap": 0.17, "gerber_bboxrounded": false, "geometry_multicolored": false, "gerber_noncoppermargin": 0.0, "geometry_solid": false}

BIN
doc/build/.doctrees/environment.pickle


+ 5 - 1
doc/build/camlib.html

@@ -83,7 +83,11 @@
             <ul class="current">
             <ul class="current">
 <li class="toctree-l1 current"><a class="current reference internal" href="">Camlib</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a></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#options">Options</a></li>
+<li class="toctree-l2"><a class="reference internal" href="app.html#module-FlatCAM">API</a></li>
+</ul>
+</li>
 </ul>
 </ul>
 
 
         
         

+ 9 - 482
doc/build/genindex.html

@@ -82,7 +82,11 @@
             <ul>
             <ul>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a></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#options">Options</a></li>
+<li class="toctree-l2"><a class="reference internal" href="app.html#api">API</a></li>
+</ul>
+</li>
 </ul>
 </ul>
 
 
         
         
@@ -128,38 +132,19 @@
  | <a href="#G"><strong>G</strong></a>
  | <a href="#G"><strong>G</strong></a>
  | <a href="#I"><strong>I</strong></a>
  | <a href="#I"><strong>I</strong></a>
  | <a href="#L"><strong>L</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="#O"><strong>O</strong></a>
  | <a href="#P"><strong>P</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="#S"><strong>S</strong></a>
  | <a href="#T"><strong>T</strong></a>
  | <a href="#T"><strong>T</strong></a>
- | <a href="#V"><strong>V</strong></a>
- | <a href="#Z"><strong>Z</strong></a>
  
  
 </div>
 </div>
 <h2 id="A">A</h2>
 <h2 id="A">A</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
   <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><a href="camlib.html#camlib.Gerber.aperture_parse">aperture_parse() (camlib.Gerber method)</a>
   </dt>
   </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="app.html#FlatCAM.PlotCanvas.auto_adjust_axes">auto_adjust_axes() (FlatCAM.PlotCanvas method)</a>
-  </dt>
-
   </dl></td>
   </dl></td>
 </tr></table>
 </tr></table>
 
 
@@ -170,18 +155,10 @@
   <dt><a href="camlib.html#camlib.Geometry.bounds">bounds() (camlib.Geometry method)</a>
   <dt><a href="camlib.html#camlib.Geometry.bounds">bounds() (camlib.Geometry method)</a>
   </dt>
   </dt>
 
 
-      
-  <dt><a href="camlib.html#camlib.Gerber.buffer_paths">buffer_paths() (camlib.Gerber method)</a>
-  </dt>
-
   </dl></td>
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
   <td style="width: 33%" valign="top"><dl>
       
       
-  <dt><a href="app.html#FlatCAM.App.build_list">build_list() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.build_ui">build_ui() (FlatCAM.FlatCAMObj method)</a>
+  <dt><a href="camlib.html#camlib.Gerber.buffer_paths">buffer_paths() (camlib.Gerber method)</a>
   </dt>
   </dt>
 
 
   </dl></td>
   </dl></td>
@@ -195,10 +172,6 @@
   </dt>
   </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><a href="camlib.html#camlib.Geometry.clear_polygon">clear_polygon() (camlib.Geometry method)</a>
   </dt>
   </dt>
 
 
@@ -209,19 +182,9 @@
   </dl></td>
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
   <td style="width: 33%" valign="top"><dl>
       
       
-  <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><a href="camlib.html#camlib.Geometry.convert_units">convert_units() (camlib.Geometry method)</a>
   </dt>
   </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.Gerber.create_geometry">create_geometry() (camlib.Gerber method)</a>
   <dt><a href="camlib.html#camlib.Gerber.create_geometry">create_geometry() (camlib.Gerber method)</a>
   </dt>
   </dt>
@@ -233,12 +196,6 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
   <td style="width: 33%" valign="top"><dl>
       
       
-  <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="camlib.html#camlib.Gerber.do_flashes">do_flashes() (camlib.Gerber method)</a>
   <dt><a href="camlib.html#camlib.Gerber.do_flashes">do_flashes() (camlib.Gerber method)</a>
   </dt>
   </dt>
 
 
@@ -259,48 +216,16 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
   <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><a href="camlib.html#camlib.Gerber.fix_regions">fix_regions() (camlib.Gerber method)</a>
   </dt>
   </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><a href="camlib.html#camlib.Gerber.frac_digits">frac_digits (camlib.Gerber attribute)</a>
   </dt>
   </dt>
 
 
   </dl></td>
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
   <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.Geometry.from_dict">from_dict() (camlib.Geometry method)</a>
   <dt><a href="camlib.html#camlib.Geometry.from_dict">from_dict() (camlib.Geometry method)</a>
   </dt>
   </dt>
 
 
@@ -326,6 +251,8 @@
   <dt><a href="camlib.html#camlib.CNCjob.generate_from_geometry">generate_from_geometry() (camlib.CNCjob method)</a>
   <dt><a href="camlib.html#camlib.CNCjob.generate_from_geometry">generate_from_geometry() (camlib.CNCjob method)</a>
   </dt>
   </dt>
 
 
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
       
       
   <dt><a href="camlib.html#camlib.Geometry">Geometry (class in camlib)</a>
   <dt><a href="camlib.html#camlib.Geometry">Geometry (class in camlib)</a>
   </dt>
   </dt>
@@ -334,28 +261,14 @@
   <dt><a href="camlib.html#camlib.Gerber">Gerber (class in camlib)</a>
   <dt><a href="camlib.html#camlib.Gerber">Gerber (class in camlib)</a>
   </dt>
   </dt>
 
 
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
       
       
   <dt><a href="camlib.html#camlib.Gerber.get_bounding_box">get_bounding_box() (camlib.Gerber method)</a>
   <dt><a href="camlib.html#camlib.Gerber.get_bounding_box">get_bounding_box() (camlib.Gerber method)</a>
   </dt>
   </dt>
 
 
       
       
-  <dt><a href="app.html#FlatCAM.App.get_current">get_current() (FlatCAM.App method)</a>
-  </dt>
-
-      
   <dt><a href="camlib.html#camlib.Geometry.get_empty_area">get_empty_area() (camlib.Geometry method)</a>
   <dt><a href="camlib.html#camlib.Geometry.get_empty_area">get_empty_area() (camlib.Geometry method)</a>
   </dt>
   </dt>
 
 
-      
-  <dt><a href="app.html#FlatCAM.App.get_eval">get_eval() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.get_radio_value">get_radio_value() (FlatCAM.App method)</a>
-  </dt>
-
   </dl></td>
   </dl></td>
 </tr></table>
 </tr></table>
 
 
@@ -363,10 +276,6 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
   <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><a href="camlib.html#camlib.Gerber.int_digits">int_digits (camlib.Gerber attribute)</a>
   </dt>
   </dt>
 
 
@@ -386,38 +295,6 @@
   <dt><a href="camlib.html#camlib.CNCjob.linear2gcode">linear2gcode() (camlib.CNCjob method)</a>
   <dt><a href="camlib.html#camlib.CNCjob.linear2gcode">linear2gcode() (camlib.CNCjob method)</a>
   </dt>
   </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="app.html#FlatCAM.PlotCanvas.mpl_connect">mpl_connect() (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>
   </dl></td>
 </tr></table>
 </tr></table>
 
 
@@ -430,10 +307,6 @@
 
 
       <dd><dl>
       <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><a href="camlib.html#camlib.Excellon.offset">(camlib.Excellon method)</a>
   </dt>
   </dt>
 
 
@@ -446,236 +319,6 @@
   </dt>
   </dt>
 
 
       </dl></dd>
       </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>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="app.html#FlatCAM.App.on_generate_paintarea">on_generate_paintarea() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <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.App.on_key_over_plot">on_key_over_plot() (FlatCAM.App 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>
-
-      
-  <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_tree_selection_changed">on_tree_selection_changed() (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>
   </dl></td>
 </tr></table>
 </tr></table>
 
 
@@ -703,83 +346,31 @@
 
 
       </dl></dd>
       </dl></dd>
       
       
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMGeometry.plot">plot() (FlatCAM.FlatCAMGeometry method)</a>
-  </dt>
-
-      
   <dt><a href="camlib.html#camlib.CNCjob.plot2">plot2() (camlib.CNCjob method)</a>
   <dt><a href="camlib.html#camlib.CNCjob.plot2">plot2() (camlib.CNCjob method)</a>
   </dt>
   </dt>
 
 
-      
-  <dt><a href="app.html#FlatCAM.App.plot_all">plot_all() (FlatCAM.App method)</a>
-  </dt>
-
   </dl></td>
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
   <td style="width: 33%" valign="top"><dl>
       
       
-  <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><a href="camlib.html#camlib.CNCjob.polygon2gcode">polygon2gcode() (camlib.CNCjob method)</a>
   </dt>
   </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><a href="camlib.html#camlib.CNCjob.pre_parse">pre_parse() (camlib.CNCjob method)</a>
   </dt>
   </dt>
 
 
   </dl></td>
   </dl></td>
 </tr></table>
 </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>
 <h2 id="S">S</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
   <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><a href="camlib.html#camlib.CNCjob.scale">scale() (camlib.CNCjob method)</a>
   </dt>
   </dt>
 
 
       <dd><dl>
       <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><a href="camlib.html#camlib.Excellon.scale">(camlib.Excellon method)</a>
   </dt>
   </dt>
 
 
@@ -792,47 +383,9 @@
   </dt>
   </dt>
 
 
       </dl></dd>
       </dl></dd>
-      
-  <dt><a href="flatcamobj.html#FlatCAM.FlatCAMObj.serialize">serialize() (FlatCAM.FlatCAMObj 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.App.set_list_selection">set_list_selection() (FlatCAM.App method)</a>
-  </dt>
-
-      
-  <dt><a href="app.html#FlatCAM.App.set_progress_bar">set_progress_bar() (FlatCAM.App method)</a>
-  </dt>
-
   </dl></td>
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
   <td style="width: 33%" valign="top"><dl>
       
       
-  <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="app.html#FlatCAM.App.setup_project_list">setup_project_list() (FlatCAM.App method)</a>
-  </dt>
-
-      
   <dt><a href="camlib.html#camlib.Geometry.size">size() (camlib.Geometry method)</a>
   <dt><a href="camlib.html#camlib.Geometry.size">size() (camlib.Geometry method)</a>
   </dt>
   </dt>
 
 
@@ -846,32 +399,6 @@
   <dt><a href="camlib.html#camlib.Geometry.to_dict">to_dict() (camlib.Geometry method)</a>
   <dt><a href="camlib.html#camlib.Geometry.to_dict">to_dict() (camlib.Geometry method)</a>
   </dt>
   </dt>
 
 
-  </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.versionCheck">versionCheck() (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>
   </dl></td>
 </tr></table>
 </tr></table>
 
 

+ 10 - 2
doc/build/index.html

@@ -82,7 +82,11 @@
             <ul>
             <ul>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a></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#options">Options</a></li>
+<li class="toctree-l2"><a class="reference internal" href="app.html#api">API</a></li>
+</ul>
+</li>
 </ul>
 </ul>
 
 
         
         
@@ -124,7 +128,11 @@
 <ul>
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a></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#options">Options</a></li>
+<li class="toctree-l2"><a class="reference internal" href="app.html#api">API</a></li>
+</ul>
+</li>
 </ul>
 </ul>
 </div>
 </div>
 </div>
 </div>

BIN
doc/build/objects.inv


+ 6 - 11
doc/build/py-modindex.html

@@ -88,7 +88,11 @@
             <ul>
             <ul>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a></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#options">Options</a></li>
+<li class="toctree-l2"><a class="reference internal" href="app.html#api">API</a></li>
+</ul>
+</li>
 </ul>
 </ul>
 
 
         
         
@@ -125,8 +129,7 @@
    <h1>Python Module Index</h1>
    <h1>Python Module Index</h1>
 
 
    <div class="modindex-jumpbox">
    <div class="modindex-jumpbox">
-   <a href="#cap-c"><strong>c</strong></a> | 
-   <a href="#cap-f"><strong>f</strong></a>
+   <a href="#cap-c"><strong>c</strong></a>
    </div>
    </div>
 
 
    <table class="indextable modindextable" cellspacing="0" cellpadding="2">
    <table class="indextable modindextable" cellspacing="0" cellpadding="2">
@@ -138,14 +141,6 @@
        <td>
        <td>
        <a href="camlib.html#module-camlib"><tt class="xref">camlib</tt></a></td><td>
        <a href="camlib.html#module-camlib"><tt class="xref">camlib</tt></a></td><td>
        <em></em></td></tr>
        <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>
    </table>
 
 
 
 

+ 5 - 1
doc/build/search.html

@@ -89,7 +89,11 @@
             <ul>
             <ul>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="camlib.html">Camlib</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
 <li class="toctree-l1"><a class="reference internal" href="flatcamobj.html">FlatCAM Objects</a></li>
-<li class="toctree-l1"><a class="reference internal" href="app.html">FlatCAM Application</a></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#options">Options</a></li>
+<li class="toctree-l2"><a class="reference internal" href="app.html#api">API</a></li>
+</ul>
+</li>
 </ul>
 </ul>
 
 
         
         

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
doc/build/searchindex.js


+ 16 - 0
doc/source/app.rst

@@ -1,6 +1,22 @@
 FlatCAM Application
 FlatCAM Application
 ===================
 ===================
 
 
+Options
+~~~~~~~
+
+There are **Application Defaults**, **Project Options** and **Object Options** in FlatCAM.
+
+**Application Defaults** are stored in ``app.defaults``. This gets populated (updated) from the ``defaults.json`` file upon startup. These can be edited from the Options tab, where each widget calls ``app.on_options_update()`` if a change is detected. This function iterates over the keys of ``app.defaults`` and reads the GUI elements whose name is ``type + "_app_" key``. Therefore, for an option to be recognized, it must be added to ``defaults.json`` in the first place. When saving, done in ``app.on_file_savedefaults()``, the file is updated, not overwritten.
+
+**Project Options** inherit all options from Application Defaults upon startup. They can be changed thereafter from the UI or by opening a project, which contain previously saved Project Options. These are store in ``app.options`` and can be written and read from the Options tab in the same way as with Application defaults.
+
+**Object Options** for each object are inherited from Project Options upon creation of each new object. They can be modified independently from the Project's options thereafter through the UI, where the widget containing the option is identified by name: ``type + kind + "_" + option``. They are stored in ``object.options``. They are saved along the Project options when saving the project.
+
+The syntax of UI widget names contain a ``type``, which identifies what *type of widget* it is and how its value is supposed to be fetched, and a ``kind``, which refer to what *kind of FlatCAM Object* it is for.
+
+API
+~~~
+
 .. automodule:: FlatCAM
 .. automodule:: FlatCAM
 
 
 .. autoclass:: App
 .. autoclass:: App

Некоторые файлы не были показаны из-за большого количества измененных файлов