소스 검색

Added multi-pass isolation capabilities.

Juan Pablo Caram 12 년 전
부모
커밋
43cf694aab
12개의 변경된 파일396개의 추가작업 그리고 942개의 파일을 삭제
  1. 31 16
      FlatCAM.py
  2. 313 428
      FlatCAM.ui
  3. 1 1
      defaults.json
  4. BIN
      doc/build/.doctrees/environment.pickle
  5. 5 1
      doc/build/camlib.html
  6. 9 482
      doc/build/genindex.html
  7. 10 2
      doc/build/index.html
  8. BIN
      doc/build/objects.inv
  9. 6 11
      doc/build/py-modindex.html
  10. 5 1
      doc/build/search.html
  11. 0 0
      doc/build/searchindex.js
  12. 16 0
      doc/source/app.rst

+ 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' % (

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 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>
 
         

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 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

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.