Ver código fonte

Added multi-pass isolation capabilities.

Juan Pablo Caram 12 anos atrás
pai
commit
43cf694aab

+ 31 - 16
FlatCAM.py

@@ -233,7 +233,9 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
             "mergepolys": True,
             "multicolored": False,
             "solid": False,
-            "isotooldia": 0.4 / 25.4,
+            "isotooldia": 0.016,
+            "isopasses": 1,
+            "isooverlap": 0.15,
             "cutoutmargin": 0.2,
             "cutoutgapsize": 0.15,
             "gaps": "tb",
@@ -249,6 +251,8 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
             "multicolored": "cb",
             "solid": "cb",
             "isotooldia": "entry_eval",
+            "isopasses": "entry_eval",
+            "isooverlap": "entry_eval",
             "cutoutmargin": "entry_eval",
             "cutoutgapsize": "entry_eval",
             "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('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()
 
@@ -717,9 +721,9 @@ class App:
         self.plot_mousemove_subscribers = {}
 
         ## 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 ####
         self.load_defaults()
@@ -1900,6 +1904,7 @@ class App:
         :return: None
         """
 
+        # Read options from file
         try:
             f = open("defaults.json")
             options = f.read()
@@ -1916,9 +1921,11 @@ class App:
             self.info("ERROR: Failed to parse defaults file.")
             return
 
+        # Update options
         assert isinstance(defaults, dict)
         defaults.update(self.defaults)
 
+        # Save update options
         try:
             f = open("defaults.json", "w")
             json.dump(defaults, f)
@@ -2218,17 +2225,25 @@ class App:
 
         gerb = self.get_current()
         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):
         """
@@ -2680,7 +2695,7 @@ class App:
         """
 
         # For key presses
-        self.canvas.grab_focus()
+        self.plotcanvas.canvas.grab_focus()
 
         try:
             print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (

Diferenças do arquivo suprimidas por serem muito extensas
+ 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">
 <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="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>
 
         

+ 9 - 482
doc/build/genindex.html

@@ -82,7 +82,11 @@
             <ul>
 <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="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>
 
         
@@ -128,38 +132,19 @@
  | <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>
 
-  </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>
 </tr></table>
 
@@ -170,18 +155,10 @@
   <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="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>
 
   </dl></td>
@@ -195,10 +172,6 @@
   </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>
 
@@ -209,19 +182,9 @@
   </dl></td>
   <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>
 
-      <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>
@@ -233,12 +196,6 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <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>
 
@@ -259,48 +216,16 @@
 <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><a href="camlib.html#camlib.Gerber.frac_digits">frac_digits (camlib.Gerber attribute)</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.Geometry.from_dict">from_dict() (camlib.Geometry method)</a>
   </dt>
 
@@ -326,6 +251,8 @@
   <dt><a href="camlib.html#camlib.CNCjob.generate_from_geometry">generate_from_geometry() (camlib.CNCjob method)</a>
   </dt>
 
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
       
   <dt><a href="camlib.html#camlib.Geometry">Geometry (class in camlib)</a>
   </dt>
@@ -334,28 +261,14 @@
   <dt><a href="camlib.html#camlib.Gerber">Gerber (class in camlib)</a>
   </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>
 
       
-  <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>
 
-      
-  <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>
 </tr></table>
 
@@ -363,10 +276,6 @@
 <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>
 
@@ -386,38 +295,6 @@
   <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="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>
 </tr></table>
 
@@ -430,10 +307,6 @@
 
       <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>
 
@@ -446,236 +319,6 @@
   </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>
-
-  </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>
 </tr></table>
 
@@ -703,83 +346,31 @@
 
       </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>
 
-      
-  <dt><a href="app.html#FlatCAM.App.plot_all">plot_all() (FlatCAM.App method)</a>
-  </dt>
-
   </dl></td>
   <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>
 
       
-  <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>
 
@@ -792,47 +383,9 @@
   </dt>
 
       </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>
   <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>
 
@@ -846,32 +399,6 @@
   <dt><a href="camlib.html#camlib.Geometry.to_dict">to_dict() (camlib.Geometry method)</a>
   </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>
 </tr></table>
 

+ 10 - 2
doc/build/index.html

@@ -82,7 +82,11 @@
             <ul>
 <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="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>
 
         
@@ -124,7 +128,11 @@
 <ul>
 <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="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>
 </div>
 </div>

BIN
doc/build/objects.inv


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

@@ -88,7 +88,11 @@
             <ul>
 <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="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>
 
         
@@ -125,8 +129,7 @@
    <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>
+   <a href="#cap-c"><strong>c</strong></a>
    </div>
 
    <table class="indextable modindextable" cellspacing="0" cellpadding="2">
@@ -138,14 +141,6 @@
        <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>
 
 

+ 5 - 1
doc/build/search.html

@@ -89,7 +89,11 @@
             <ul>
 <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="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>
 
         

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
doc/build/searchindex.js


+ 16 - 0
doc/source/app.rst

@@ -1,6 +1,22 @@
 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
 
 .. autoclass:: App

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff