lot of inx refactorings - changed menu logic

This commit is contained in:
Mario Voigt 2021-11-03 03:52:37 +01:00
parent 2ea449bfb6
commit c28164f0fd
112 changed files with 484 additions and 458 deletions

View File

@ -13,8 +13,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Puzzles/Mazes/Nests"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -54,7 +54,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Animation"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -23,8 +23,8 @@ c1,c2,c3 = curvatures of first 3 osculating circles</label>
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Puzzles/Mazes/Nests"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -7,7 +7,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -21,8 +21,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Streaks And Blobs" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -17,8 +17,8 @@ You can paste Bouwkamp codes with or without various formatting characters (like
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Puzzles/Mazes/Nests"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -19,7 +19,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Join/Order" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -39,8 +39,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Streaks And Blobs" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -16,7 +16,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Paths - Join/Order"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -59,7 +59,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Colors/Gradients/Filters"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -76,7 +76,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Colors/Gradients/Filters"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
<menu-tip>Generate color harmonies and save as palette file</menu-tip> <menu-tip>Generate color harmonies and save as palette file</menu-tip>

View File

@ -18,7 +18,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection"/> <submenu name="Dimensioning/Measuring"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -178,7 +178,7 @@ Tips:
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Cut/Intersect/Purge" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -90,7 +90,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Cut/Intersect/Purge"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -28,7 +28,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Cut/Intersect/Purge" />
</submenu> </submenu>
</effects-menu> </effects-menu>
<menu-tip>"Destructively" clip selected paths using the topmost as clipping path</menu-tip> <menu-tip>"Destructively" clip selected paths using the topmost as clipping path</menu-tip>

View File

@ -48,7 +48,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Dimensioning/Measuring"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Join/Order" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -11,8 +11,8 @@
<effect needs-live-preview="true"> <effect needs-live-preview="true">
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Puzzles/Mazes/Nests" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Modify existing Path(s)"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -53,7 +53,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Transformations" />
</submenu> </submenu>
</effects-menu> </effects-menu>
<menu-tip>Widen the document to send all lines properly to Epilog Dashboard</menu-tip> <menu-tip>Widen the document to send all lines properly to Epilog Dashboard</menu-tip>

View File

@ -9,7 +9,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)" /> <submenu name="Transformations" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -18,7 +18,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Modify existing Path(s)"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -32,7 +32,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Cut/Intersect/Purge"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -16,8 +16,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Streaks And Blobs" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -9,7 +9,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Animation"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -165,7 +165,7 @@ Typical ruler set: 7.25, 9.5, 10, 12, 14, 15, 16, 20
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Dimensioning/Measuring"/> <submenu name="Music"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -5,8 +5,8 @@
<effect implements-custom-gui="true"> <effect implements-custom-gui="true">
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Streaks And Blobs" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -83,8 +83,8 @@ Caution: Undercut is currently not generated. E.g. a gear at pressure angle 20 d
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Gear Generators"/> <submenu name="Gears" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -17,7 +17,6 @@
<option value="2">Internal</option> <option value="2">Internal</option>
</param> </param>
</page> </page>
<page name="Help" gui-text="Help"> <page name="Help" gui-text="Help">
<label xml:space="preserve"> <label xml:space="preserve">
Number of teeth: Exactly what it sounds like. Number of teeth: Exactly what it sounds like.
@ -38,8 +37,8 @@ Latest version: www.arc.id.au/gearDrawing.html
<effect needs-live-preview="true"> <effect needs-live-preview="true">
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Gear Generators"/> <submenu name="Gears" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -31,7 +31,9 @@
<effect needs-live-preview="false"> <effect needs-live-preview="false">
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="Palette" /> <submenu name="FabLab Chemnitz">
<submenu name="Colors/Gradients/Filters"/>
</submenu>
</effects-menu> </effects-menu>
</effect> </effect>
<script> <script>

View File

@ -6,7 +6,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Colors/Gradients/Filters"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -38,7 +38,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Colors/Gradients/Filters"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -12,7 +12,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Dimensioning/Measuring"/></submenu> <submenu name="Music"/></submenu>
</effects-menu> </effects-menu>
</effect> </effect>
<script> <script>

View File

@ -34,7 +34,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Text"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -16,7 +16,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection"/> <submenu name="Tracing/Images/Edge Detection"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -83,7 +83,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection"/> <submenu name="Tracing/Images/Edge Detection"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Cut/Intersect/Purge" />/>
</submenu> </submenu>
</effects-menu> </effects-menu>
<menu-tip>Apply successive difference operations on superimposed paths. Useful for plotter addicts.</menu-tip> <menu-tip>Apply successive difference operations on superimposed paths. Useful for plotter addicts.</menu-tip>

View File

@ -23,7 +23,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -51,7 +51,9 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"/> <submenu name="FabLab Chemnitz">
<submenu name="Cutting/Plotting/Printing"/>
</submenu>
</effects-menu> </effects-menu>
</effect> </effect>
<script> <script>

View File

@ -12,7 +12,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -7,7 +7,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Colors/Gradients/Filters"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -99,7 +99,7 @@ This extension is originally based on 'Join Paths Optimized' by Shriinivas.</lab
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Join/Order" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -20,7 +20,7 @@ This extension requires that imagemagick is installed, more info and download at
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Import/Export/Transfer"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -40,8 +40,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Scales" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Text"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -3,20 +3,9 @@
<name>Laser Check</name> <name>Laser Check</name>
<id>fablabchemnitz.de.laser_check</id> <id>fablabchemnitz.de.laser_check</id>
<param name="tab" type="notebook"> <param name="tab" type="notebook">
<page name="tab_settings" gui-text="Laser Check"> <page name="tab_checks" gui-text="Checks">
<label appearance="header">General</label>
<param name="show_issues_only" type="bool" gui-text="Show potential issues only" gui-description="Shortens the report a little bit">false</param> <param name="show_issues_only" type="bool" gui-text="Show potential issues only" gui-description="Shortens the report a little bit">false</param>
<separator/> <separator/>
<label appearance="header">Machine Settings</label>
<param name="machine_size" gui-text="Machine/Size (mm)" type="optiongroup" appearance="combo">
<option value="406x305">406 x 305 mm (Zing 16)</option>
<option value="610x305">610 x 305 mm (Zing 24 / Fusion Edge 12)</option>
<option value="812x508">812 x 508 mm (Fusion Pro 32 / Fusion M2 32)</option>
<option value="1016x711">1016 x 711 mm (Fusion M2 40)</option>
<option value="1219x914">1219 x 914 mm (Fusion Pro 48)</option>
</param>
<param name="max_cutting_speed" type="float" min="0.000" max="9999.000" gui-text="Max. cutting speed (mm/s)">100</param>
<label appearance="header">Checks</label>
<param name="checks" type="optiongroup" appearance="combo" gui-text="Select checks"> <param name="checks" type="optiongroup" appearance="combo" gui-text="Select checks">
<option value="check_all">Check all</option> <option value="check_all">Check all</option>
<option value="check_section">Check selection</option> <option value="check_section">Check selection</option>
@ -61,6 +50,21 @@
</vbox> </vbox>
</hbox> </hbox>
</page> </page>
<page name="tab_setup" gui-text="Machine Setup">
<label appearance="header">Machine Settings</label>
<param name="machine_size" gui-text="Machine/Size (mm)" type="optiongroup" appearance="combo">
<option value="406x305">406 x 305 mm (Zing 16)</option>
<option value="610x305">610 x 305 mm (Zing 24 / Fusion Edge 12)</option>
<option value="812x508">812 x 508 mm (Fusion Pro 32 / Fusion M2 32)</option>
<option value="1016x711">1016 x 711 mm (Fusion M2 40)</option>
<option value="1219x914">1219 x 914 mm (Fusion Pro 48)</option>
</param>
<param name="max_cutting_speed" type="float" min="0.000" max="9999.000" precision="2" gui-text="Max. cutting speed (mm/s)">500</param>
<param name="max_travel_speed" type="float" min="0.000" max="9999.000" precision="2" gui-text="Max. travel speed (mm/s)">150</param>
<param name="cut_travel_factor" type="float" min="0.1" max="1.0" precision="2" gui-text="Factor between cutting/travel moves" gui-description="Usually ~60-80% are cutting time, rest is travel time">0.60</param>
<param name="price_per_minute_gross" type="float" min="0.0" max="9999.0" precision="2" gui-text="Price/minute € (gross)">2.0</param>
<param name="vector_grid_xy" type="float" min="0.0" max="9999.0" precision="2" gui-text="Vector grid (mm)">12.0</param>
</page>
<page name="tab_about" gui-text="About"> <page name="tab_about" gui-text="About">
<label appearance="header">Laser Check</label> <label appearance="header">Laser Check</label>
<label>A utility to check for common issue potencials in vector graphics, especially regarding to laser cutting jobs.</label> <label>A utility to check for common issue potencials in vector graphics, especially regarding to laser cutting jobs.</label>
@ -92,7 +96,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Cutting/Plotting/Printing"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -5,25 +5,34 @@ from inkex.bezier import csplength, csparea
from lxml import etree from lxml import etree
import re import re
import math import math
import datetime
class LaserCheck(inkex.EffectExtension): class LaserCheck(inkex.EffectExtension):
''' '''
ToDos: ToDos:
- check for old styles which should be upgraded - check for old styles which should be upgraded
- self-intersecting paths
- number of parts to weed in total; number of parts which are smaller than vector grid
- add some inkex.Desc to all elements which were checked and which have some issue. use special syntax to remove old stuff each time the check is applied again - add some inkex.Desc to all elements which were checked and which have some issue. use special syntax to remove old stuff each time the check is applied again
- this code is horrible ugly stuff - this code is horrible ugly stuff
''' '''
def add_arguments(self, pars): def add_arguments(self, pars):
pars.add_argument('--tab') pars.add_argument('--tab')
pars.add_argument('--machine_size', default="812x508")
pars.add_argument('--max_cutting_speed', type=float, default=500)
pars.add_argument('--max_travel_speed', type=float, default=150)
pars.add_argument('--cut_travel_factor', type=float, default=0.60)
pars.add_argument('--price_per_minute_gross', type=float, default=2.0)
pars.add_argument('--vector_grid_xy', type=float, default=12.0) #TODO
pars.add_argument('--show_issues_only', type=inkex.Boolean, default=False) pars.add_argument('--show_issues_only', type=inkex.Boolean, default=False)
pars.add_argument('--checks', default="check_all") pars.add_argument('--checks', default="check_all")
pars.add_argument('--max_cutting_speed', type=float, default=100)
pars.add_argument('--bbox', type=inkex.Boolean, default=False) pars.add_argument('--bbox', type=inkex.Boolean, default=False)
pars.add_argument('--bbox_offset', type=float, default=5.000) pars.add_argument('--bbox_offset', type=float, default=5.000)
pars.add_argument('--cutting_estimation', type=inkex.Boolean, default=False) pars.add_argument('--cutting_estimation', type=inkex.Boolean, default=False)
pars.add_argument('--machine_size', default="812x508")
pars.add_argument('--elements_outside_canvas', type=inkex.Boolean, default=False) pars.add_argument('--elements_outside_canvas', type=inkex.Boolean, default=False)
pars.add_argument('--groups_and_layers', type=inkex.Boolean, default=False) pars.add_argument('--groups_and_layers', type=inkex.Boolean, default=False)
pars.add_argument('--clones', type=inkex.Boolean, default=False) pars.add_argument('--clones', type=inkex.Boolean, default=False)
@ -50,8 +59,11 @@ class LaserCheck(inkex.EffectExtension):
def effect(self): def effect(self):
so = self.options so = self.options
machineWidth = self.svg.unittouu(so.machine_size.split('x')[0] + "mm")
machineHeight = self.svg.unittouu(so.machine_size.split('x')[1] + "mm")
selected = [] #total list of elements to parse selected = [] #total list of elements to parse
def parseChildren(element): def parseChildren(element):
if element not in selected: if element not in selected:
selected.append(element) selected.append(element)
@ -92,7 +104,7 @@ class LaserCheck(inkex.EffectExtension):
nonShapes.append(element) nonShapes.append(element)
else: else:
shapes.append(element) shapes.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} shape elements in total".format(len(shapes))) inkex.utils.debug("{} shape elements in total".format(len(shapes)))
inkex.utils.debug("{} non-shape elements in total".format(len(nonShapes))) inkex.utils.debug("{} non-shape elements in total".format(len(nonShapes)))
for nonShape in nonShapes: for nonShape in nonShapes:
@ -144,38 +156,35 @@ class LaserCheck(inkex.EffectExtension):
bb_width = round(bbox.width, 3) bb_width = round(bbox.width, 3)
bb_height = round(bbox.height, 3) bb_height = round(bbox.height, 3)
if bb_left >= fmm: if bb_left >= fmm:
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("left border... ok") inkex.utils.debug("left border... ok")
else: else:
inkex.utils.debug("left border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_left, "mm"))) inkex.utils.debug("left border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_left, "mm")))
if bb_top >= fmm: if bb_top >= fmm:
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("top border... ok") inkex.utils.debug("top border... ok")
else: else:
inkex.utils.debug("top border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_top, "mm"))) inkex.utils.debug("top border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_top, "mm")))
if bb_right + fmm <= page_width: if bb_right + fmm <= page_width:
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("right border... ok") inkex.utils.debug("right border... ok")
else: else:
inkex.utils.debug("right border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_right, "mm"))) inkex.utils.debug("right border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_right, "mm")))
if bb_bottom + fmm <= width_height: if bb_bottom + fmm <= width_height:
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("bottom border... ok") inkex.utils.debug("bottom border... ok")
else: else:
inkex.utils.debug("bottom border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_bottom, "mm"))) inkex.utils.debug("bottom border... fail: {:0.3f} mm".format(self.svg.uutounit(bb_bottom, "mm")))
machineWidth = self.svg.unittouu(self.options.machine_size.split('x')[0] + "mm")
if bb_width <= machineWidth: if bb_width <= machineWidth:
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("page width... ok") inkex.utils.debug("page width... ok")
else: else:
inkex.utils.debug("page width... fail: {:0.3f} mm".format(bb_width)) inkex.utils.debug("page width... fail: {:0.3f} mm".format(bb_width))
machineHeight = self.svg.unittouu(self.options.machine_size.split('x')[1] + "mm")
if bb_height <= machineHeight: if bb_height <= machineHeight:
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("page height... ok") inkex.utils.debug("page height... ok")
else: else:
inkex.utils.debug("page height... fail: {:0.3f} mm".format(bb_height)) inkex.utils.debug("page height... fail: {:0.3f} mm".format(bb_height))
@ -192,7 +201,7 @@ class LaserCheck(inkex.EffectExtension):
for child in element: for child in element:
maxDepth(child, level + 1) maxDepth(child, level + 1)
maxDepth(self.document.getroot(), -1) maxDepth(self.document.getroot(), -1)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("Maximum group depth={}".format(md - 1)) inkex.utils.debug("Maximum group depth={}".format(md - 1))
if md - 1 > 2: if md - 1 > 2:
self.msg("Warning: this group depth might cause issues!") self.msg("Warning: this group depth might cause issues!")
@ -204,7 +213,7 @@ class LaserCheck(inkex.EffectExtension):
layers.append(element) layers.append(element)
else: else:
groups.append(element) groups.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} groups in total".format(len(groups))) inkex.utils.debug("{} groups in total".format(len(groups)))
inkex.utils.debug("{} layers in total".format(len(layers))) inkex.utils.debug("{} layers in total".format(len(layers)))
@ -227,7 +236,7 @@ class LaserCheck(inkex.EffectExtension):
for element in selected: for element in selected:
if element.tag == inkex.addNS('use','svg'): if element.tag == inkex.addNS('use','svg'):
uses.append(element) uses.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} svg:use clones in total".format(len(uses))) inkex.utils.debug("{} svg:use clones in total".format(len(uses)))
for use in uses: for use in uses:
inkex.utils.debug("id={}".format(use.get('id'))) inkex.utils.debug("id={}".format(use.get('id')))
@ -243,7 +252,7 @@ class LaserCheck(inkex.EffectExtension):
for element in selected: for element in selected:
if element.tag == inkex.addNS('clipPath','svg'): if element.tag == inkex.addNS('clipPath','svg'):
clipPaths.append(element) clipPaths.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} svg:clipPath in total".format(len(clipPaths))) inkex.utils.debug("{} svg:clipPath in total".format(len(clipPaths)))
for clipPath in clipPaths: for clipPath in clipPaths:
inkex.utils.debug("id={}".format(clipPath.get('id'))) inkex.utils.debug("id={}".format(clipPath.get('id')))
@ -259,7 +268,7 @@ class LaserCheck(inkex.EffectExtension):
for element in selected: for element in selected:
if element.tag == inkex.addNS('image','svg'): if element.tag == inkex.addNS('image','svg'):
images.append(element) images.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} svg:image in total".format(len(images))) inkex.utils.debug("{} svg:image in total".format(len(images)))
for image in images: for image in images:
inkex.utils.debug("image id={}".format(image.get('id'))) inkex.utils.debug("image id={}".format(image.get('id')))
@ -274,7 +283,7 @@ class LaserCheck(inkex.EffectExtension):
for element in selected: for element in selected:
if element.tag in (inkex.addNS('line','svg'), inkex.addNS('polyline','svg'), inkex.addNS('polygon','svg')): if element.tag in (inkex.addNS('line','svg'), inkex.addNS('polyline','svg'), inkex.addNS('polygon','svg')):
lowlevels.append(element) lowlevels.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} low level strokes in total".format(len(lowlevels))) inkex.utils.debug("{} low level strokes in total".format(len(lowlevels)))
for lowlevel in lowlevels: for lowlevel in lowlevels:
inkex.utils.debug("id={}".format(lowlevel.get('id'))) inkex.utils.debug("id={}".format(lowlevel.get('id')))
@ -291,7 +300,7 @@ class LaserCheck(inkex.EffectExtension):
for element in selected: for element in selected:
if element.tag == inkex.addNS('text','svg'): if element.tag == inkex.addNS('text','svg'):
texts.append(element) texts.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} svg:text in total".format(len(texts))) inkex.utils.debug("{} svg:text in total".format(len(texts)))
for text in texts: for text in texts:
inkex.utils.debug("id={}".format(text.get('id'))) inkex.utils.debug("id={}".format(text.get('id')))
@ -313,7 +322,7 @@ class LaserCheck(inkex.EffectExtension):
strokeColor = stroke[0].split("stroke:")[1].split(";")[0] strokeColor = stroke[0].split("stroke:")[1].split(";")[0]
if strokeColor not in strokeColors: if strokeColor not in strokeColors:
strokeColors.append(strokeColor) strokeColors.append(strokeColor)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} different stroke colors in total".format(len(strokeColors))) inkex.utils.debug("{} different stroke colors in total".format(len(strokeColors)))
if len(strokeColors) > so.stroke_colors_max: if len(strokeColors) > so.stroke_colors_max:
for strokeColor in strokeColors: for strokeColor in strokeColors:
@ -335,7 +344,7 @@ class LaserCheck(inkex.EffectExtension):
strokeWidth = stroke_width[0].split("stroke-width:")[1].split(";")[0] #possibly w/o units. could contain units from css strokeWidth = stroke_width[0].split("stroke-width:")[1].split(";")[0] #possibly w/o units. could contain units from css
if strokeWidth not in strokeWidths: if strokeWidth not in strokeWidths:
strokeWidths.append(strokeWidth) strokeWidths.append(strokeWidth)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} different stroke widths in total".format(len(strokeWidths))) inkex.utils.debug("{} different stroke widths in total".format(len(strokeWidths)))
if len(strokeWidths) > so.stroke_widths_max: if len(strokeWidths) > so.stroke_widths_max:
for strokeWidth in strokeWidths: for strokeWidth in strokeWidths:
@ -362,7 +371,7 @@ class LaserCheck(inkex.EffectExtension):
strokeDasharray = stroke_dasharray[0].split("stroke-dasharray:")[1].split(";")[0] strokeDasharray = stroke_dasharray[0].split("stroke-dasharray:")[1].split(";")[0]
if strokeDasharray not in strokeDasharrays: if strokeDasharray not in strokeDasharrays:
strokeDasharrays.append(strokeDasharray) strokeDasharrays.append(strokeDasharray)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} different stroke dash arrays in total".format(len(strokeDasharrays))) inkex.utils.debug("{} different stroke dash arrays in total".format(len(strokeDasharrays)))
for strokeDasharray in strokeDasharrays: for strokeDasharray in strokeDasharrays:
inkex.utils.debug("stroke dash array {}".format(strokeDasharray)) inkex.utils.debug("stroke dash array {}".format(strokeDasharray))
@ -432,7 +441,7 @@ class LaserCheck(inkex.EffectExtension):
if (strokeVis == 0 or widthVis == 0 or strokeOpacityVis == 0) and (fillVis == 0 or fillOpacityVis == 0): if (strokeVis == 0 or widthVis == 0 or strokeOpacityVis == 0) and (fillVis == 0 or fillOpacityVis == 0):
if element not in invisibles: if element not in invisibles:
invisibles.append(element) invisibles.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} invisible shapes in total".format(len(invisibles))) inkex.utils.debug("{} invisible shapes in total".format(len(invisibles)))
for invisible in invisibles: for invisible in invisibles:
inkex.utils.debug("id={}".format(invisible.get('id'))) inkex.utils.debug("id={}".format(invisible.get('id')))
@ -453,7 +462,7 @@ class LaserCheck(inkex.EffectExtension):
if float(stroke_opacity[0].split("stroke-opacity:")[1].split(";")[0]) < 1.0: if float(stroke_opacity[0].split("stroke-opacity:")[1].split(";")[0]) < 1.0:
if element not in transparencies: if element not in transparencies:
transparencies.append(element) transparencies.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} objects with stroke transparencies < 1.0 in total".format(len(transparencies))) inkex.utils.debug("{} objects with stroke transparencies < 1.0 in total".format(len(transparencies)))
for transparency in transparencies: for transparency in transparencies:
inkex.utils.debug("id={}".format(transparency.get('id'))) inkex.utils.debug("id={}".format(transparency.get('id')))
@ -474,7 +483,7 @@ class LaserCheck(inkex.EffectExtension):
(len(commandsCoords) == 2 and commandsCoords[-1][0] == 'Z') or \ (len(commandsCoords) == 2 and commandsCoords[-1][0] == 'Z') or \
(len(commandsCoords) == 3 and commandsCoords[0][1] == commandsCoords[1][1] and commandsCoords[2][1] == 'Z'): (len(commandsCoords) == 3 and commandsCoords[0][1] == commandsCoords[1][1] and commandsCoords[2][1] == 'Z'):
pointyPaths.append(element) pointyPaths.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} pointy paths in total".format(len(pointyPaths))) inkex.utils.debug("{} pointy paths in total".format(len(pointyPaths)))
for pointyPath in pointyPaths: for pointyPath in pointyPaths:
inkex.utils.debug("id={}".format(pointyPath.get('id'))) inkex.utils.debug("id={}".format(pointyPath.get('id')))
@ -491,7 +500,7 @@ class LaserCheck(inkex.EffectExtension):
for element in shapes: for element in shapes:
if element.get('transform') is not None: if element.get('transform') is not None:
transformations.append(element) transformations.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} transformation in total".format(len(transformations))) inkex.utils.debug("{} transformation in total".format(len(transformations)))
for transformation in transformations: for transformation in transformations:
inkex.utils.debug("transformation in id={}".format(transformation.get('id'))) inkex.utils.debug("transformation in id={}".format(transformation.get('id')))
@ -512,7 +521,7 @@ class LaserCheck(inkex.EffectExtension):
if stotal < self.svg.unittouu(str(so.short_paths_min) + "mm"): if stotal < self.svg.unittouu(str(so.short_paths_min) + "mm"):
shortPaths.append([element, stotal]) shortPaths.append([element, stotal])
totalDropLength += stotal totalDropLength += stotal
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} short paths in total".format(len(shortPaths))) inkex.utils.debug("{} short paths in total".format(len(shortPaths)))
if totalDropLength > 0: if totalDropLength > 0:
inkex.utils.debug("{:0.2f}% of total ({:0.2f} mm /{:0.2f} mm)".format(totalDropLength / totalLength, self.svg.uutounit(str(totalDropLength), "mm"), self.svg.uutounit(str(totalLength), "mm"))) inkex.utils.debug("{:0.2f}% of total ({:0.2f} mm /{:0.2f} mm)".format(totalDropLength / totalLength, self.svg.uutounit(str(totalDropLength), "mm"), self.svg.uutounit(str(totalLength), "mm")))
@ -525,17 +534,26 @@ class LaserCheck(inkex.EffectExtension):
''' '''
if so.checks == "check_all" or so.cutting_estimation is True: if so.checks == "check_all" or so.cutting_estimation is True:
inkex.utils.debug("\n---------- Cutting time estimation") inkex.utils.debug("\n---------- Cutting time estimation")
totalLength = 0 totalCuttingLength = 0
for element in shapes: for element in shapes:
if isinstance(element, inkex.PathElement): if isinstance(element, inkex.PathElement):
slengths, stotal = csplength(element.path.transform(element.composed_transform()).to_superpath()) slengths, stotal = csplength(element.path.transform(element.composed_transform()).to_superpath())
totalLength += stotal totalCuttingLength += stotal
inkex.utils.debug("cutting length (mm) = {:0.2f} mm".format(self.svg.uutounit(str(totalLength), "mm"), self.svg.uutounit(str(totalLength), "mm"))) extraTraveLength = (machineWidth / 3 + machineHeight / 3) * 2.0 #from top-left to the ~1/3 of the bed and back again
for f in range(100, 0, -10): totalTravelLength = totalCuttingLength * (1.0 - so.cut_travel_factor) + extraTraveLength
v = so.max_cutting_speed * f/100.0 totalLength = totalCuttingLength + totalTravelLength
tsec = totalLength / v inkex.utils.debug("(measured) cutting length (mm) = {:0.2f} mm".format(self.svg.uutounit(str(totalCuttingLength), "mm"), self.svg.uutounit(str(totalCuttingLength), "mm")))
tmin = tsec / 60 inkex.utils.debug("(estimated) travel length (mm) = {:0.2f} mm".format(self.svg.uutounit(str(totalTravelLength), "mm"), self.svg.uutounit(str(totalTravelLength), "mm")))
inkex.utils.debug("cutting time @{:0.0f}% (={}mm/s): {:0.2f}min (={:0.1f}s)".format(f, v, tmin, tsec)) inkex.utils.debug("(estimated) total length (mm) = {:0.2f} mm".format(self.svg.uutounit(str(totalLength), "mm"), self.svg.uutounit(str(totalLength), "mm")))
for speedFactor in [100,90,80,70,60,50,40,30,20,10,5]:
v_cut = so.max_cutting_speed * speedFactor/100.0
v_travel = so.max_travel_speed #this is always at maximum
tsec_cut = self.svg.uutounit(str(totalCuttingLength)) / v_cut
tsec_travel = self.svg.uutounit(str(totalTravelLength)) / v_travel
tsec_total = tsec_cut + tsec_travel
minutes, seconds = divmod(tsec_total, 60) # split the seconds to minutes and seconds
partial_minutes = round(seconds/60 * 2) / 2
inkex.utils.debug("@{:03.0f}% (cut={:06.2f}mm/s | travel={:06.2f}mm/s) > {:03.0f}min {:02.0f}sec | cost={:02.0f}".format(speedFactor, v_cut, v_travel, minutes, seconds, so.price_per_minute_gross * (minutes + partial_minutes)))
''' '''
@ -550,7 +568,7 @@ class LaserCheck(inkex.EffectExtension):
nodes = len(element.path) nodes = len(element.path)
if nodes / stotal > so.nodes_per_path_max / self.svg.unittouu(str(so.nodes_per_path_interval) + "mm"): if nodes / stotal > so.nodes_per_path_max / self.svg.unittouu(str(so.nodes_per_path_interval) + "mm"):
heavyPaths.append([element, nodes, stotal]) heavyPaths.append([element, nodes, stotal])
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} Heavy node-loaded paths in total".format(len(heavyPaths))) inkex.utils.debug("{} Heavy node-loaded paths in total".format(len(heavyPaths)))
for heavyPath in heavyPaths: for heavyPath in heavyPaths:
inkex.utils.debug("id={}, nodes={}, length={}mm, density={}nodes/mm".format( inkex.utils.debug("id={}, nodes={}, length={}mm, density={}nodes/mm".format(
@ -562,7 +580,7 @@ class LaserCheck(inkex.EffectExtension):
) )
''' '''
Elements outside canvas or touching the border. These are critical because they won't be lasered Elements outside canvas or touching the border. These are critical because they won't be lasered or not correctly lasered
''' '''
if so.checks == "check_all" or so.elements_outside_canvas is True: if so.checks == "check_all" or so.elements_outside_canvas is True:
inkex.utils.debug("\n---------- Elements outside canvas or touching the border") inkex.utils.debug("\n---------- Elements outside canvas or touching the border")
@ -600,7 +618,7 @@ class LaserCheck(inkex.EffectExtension):
bottomOutside = True bottomOutside = True
if rightOutside is True or leftOutside is True or topOutside is True or bottomOutside is True: if rightOutside is True or leftOutside is True or topOutside is True or bottomOutside is True:
elementsOutside.append([element, "partially outside"]) elementsOutside.append([element, "partially outside"])
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} Elements outside canvas or touching the border in total".format(len(elementsOutside))) inkex.utils.debug("{} Elements outside canvas or touching the border in total".format(len(elementsOutside)))
for elementOutside in elementsOutside: for elementOutside in elementsOutside:
inkex.utils.debug("id={}, status={}".format( inkex.utils.debug("id={}, status={}".format(
@ -620,7 +638,7 @@ class LaserCheck(inkex.EffectExtension):
for element in shapes: for element in shapes:
if not isinstance(element, inkex.PathElement) and not isinstance(element, inkex.Group): if not isinstance(element, inkex.PathElement) and not isinstance(element, inkex.Group):
nonPathShapes.append(element) nonPathShapes.append(element)
if self.options.show_issues_only is False: if so.show_issues_only is False:
inkex.utils.debug("{} non-path shapes in total".format(len(nonPathShapes))) inkex.utils.debug("{} non-path shapes in total".format(len(nonPathShapes)))
for nonPathShape in nonPathShapes: for nonPathShape in nonPathShapes:
inkex.utils.debug("id={}".format(nonPathShape.get('id'))) inkex.utils.debug("id={}".format(nonPathShape.get('id')))

View File

@ -68,8 +68,8 @@ Adjust Notch size and Randomization to avoid overlapping lines:
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Puzzles/Mazes/Nests" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -20,8 +20,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Boxes/Papercraft">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Finger-jointed/Tabbed Boxes"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -37,7 +37,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Animation"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -33,7 +33,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection"/> <submenu name="Tracing/Images/Edge Detection"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -14,7 +14,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Join/Order" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -23,8 +23,8 @@
<effect> <effect>
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Puzzles/Mazes/Nests" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -11,7 +11,7 @@
<param name="dotsize" type="string" gui-text="Dot size:">10px</param> <param name="dotsize" type="string" gui-text="Dot size:">10px</param>
<param name="debug" type="bool" gui-text="Debug Output">false</param> <param name="debug" type="bool" gui-text="Debug Output">false</param>
<label appearance="header">Notes</label> <label appearance="header">Notes</label>
<label>Use "Path > Reverse" to change path direction</label> <label>Use "Path &gt; Reverse" to change path direction</label>
<label>Use extension "Chain Paths" to make closed paths out of segments.</label> <label>Use extension "Chain Paths" to make closed paths out of segments.</label>
</page> </page>
<page name="tab_about" gui-text="About"> <page name="tab_about" gui-text="About">
@ -45,7 +45,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Join/Order" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Cut/Intersect/Purge"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Join/Order"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -15,7 +15,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Join/Order" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -79,7 +79,7 @@ Alignment groups shall contain an object to mark its 'rotation center'. The exte
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -8,7 +8,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Cut/Intersect/Purge"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -36,7 +36,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Music"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -34,7 +34,7 @@ http://florian-berger.de/en/software/pixel2svg
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection" /> <submenu name="Tracing/Images/Edge Detection" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -30,7 +30,7 @@ or deterministically.</label>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection"/> <submenu name="Tracing/Images/Edge Detection"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -62,7 +62,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection"/> <submenu name="Tracing/Images/Edge Detection"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -36,7 +36,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Cutting/Plotting/Printing"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -27,15 +27,14 @@ To join paths, make sure that the paths to consider are already combined (subpat
To combine paths, select them and press Ctrl+K. To combine paths, select them and press Ctrl+K.
For more information: For more information:
https://gitlab.com/EllenWasbo/inkscape-extension-removeduplicatenodes https://gitlab.com/EllenWasbo/inkscape-extension-removeduplicatenodes</label>
</label>
</page> </page>
</param> </param>
<effect> <effect>
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization" /> <submenu name="Paths - Cut/Intersect/Purge" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Cut/Intersect/Purge" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Cut/Intersect/Purge" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -44,8 +44,8 @@
<effect> <effect>
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Gear Generators"/> <submenu name="Gears" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> <inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Ray Tracing - Insert Lens Optics</name> <name>Insert Lens Optics</name>
<id>fablabchemnitz.de.raytracing_insert_lens_optics</id> <id>fablabchemnitz.de.raytracing_insert_lens_optics</id>
<param name="focal_length" type="float" gui-text="Focal length:" min="-10000." max="10000." precision="3">100.</param> <param name="focal_length" type="float" gui-text="Focal length:" min="-10000." max="10000." precision="3">100.</param>
<param name="focal_length_unit" type="optiongroup" appearance="combo" gui-text=" "> <param name="focal_length_unit" type="optiongroup" appearance="combo" gui-text=" ">
@ -29,7 +29,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Ray Tracing"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -1,6 +1,6 @@
[ [
{ {
"name": "Ray Tracing - <various>", "name": "<various>",
"id": "fablabchemnitz.de.raytracing.<various>", "id": "fablabchemnitz.de.raytracing.<various>",
"path": "raytracing", "path": "raytracing",
"dependent_extensions": null, "dependent_extensions": null,

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> <inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Ray Tracing - Render</name> <name>Render</name>
<id>fablabchemnitz.de.raytracing.render</id> <id>fablabchemnitz.de.raytracing.render</id>
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Ray Tracing"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> <inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Ray Tracing - Set Lens Material</name> <name>Set Lens Material</name>
<id>fablabchemnitz.de.raytracing.set_lens_material</id> <id>fablabchemnitz.de.raytracing.set_lens_material</id>
<param name="optical_material" type="optiongroup" appearance="combo" gui-text="Select material:"> <param name="optical_material" type="optiongroup" appearance="combo" gui-text="Select material:">
<option value="none">None</option> <option value="none">None</option>
@ -15,7 +15,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Various"/> <submenu name="Ray Tracing"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -17,15 +17,14 @@
Remove duplicate line segments (with exact same coordinates) will always be performed. Remove duplicate line segments (with exact same coordinates) will always be performed.
For more information: For more information:
https://gitlab.com/EllenWasbo/inkscape-extension-removeduplicatelines https://gitlab.com/EllenWasbo/inkscape-extension-removeduplicatelines</label>
</label>
</page> </page>
</param> </param>
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Paths - Cut/Intersect/Purge" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Groups and Layers"/> <submenu name="Paths - Cut/Intersect/Purge" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -11,7 +11,8 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/></submenu> <submenu name="Cutting/Plotting/Printing"/>
</submenu>
</effects-menu> </effects-menu>
</effect> </effect>
<script> <script>

View File

@ -8,7 +8,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Colors/Gradients/Filters"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -7,7 +7,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Join/Order" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -7,7 +7,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization" /> <submenu name="Transformations" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -7,7 +7,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization" /> <submenu name="Transformations" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -7,7 +7,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization" /> <submenu name="Transformations" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -25,7 +25,7 @@ Version: 1.4
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Modify existing Path(s)"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -27,7 +27,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -79,7 +79,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -20,7 +20,7 @@
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -6,7 +6,7 @@
<object-type>rect</object-type> <object-type>rect</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Transformations"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -42,7 +42,7 @@ lenght. Recognizes rectangles, circle and ellipses.</label>
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Tracing/Edge Detection"/> <submenu name="Tracing/Images/Edge Detection"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -21,8 +21,8 @@ If Cut diameter=0 then cone will not be truncated.</label>
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Boxes/Papercraft">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Paper/Cardboard Boxes" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -67,7 +67,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Nesting/Cut Optimization"/> <submenu name="Cutting/Plotting/Printing"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -7,8 +7,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Streaks And Blobs" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -54,7 +54,7 @@ Applies independently for each sub path in selection. Use 'Path > Reverse' to ch
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Modify existing Path(s)"/> <submenu name="Paths - Cut/Intersect/Purge"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -25,7 +25,7 @@
<object-type>path</object-type> <object-type>path</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz">
<submenu name="Legacy Tools"/> <submenu name="Paths - Cut/Intersect/Purge"/>
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -21,8 +21,8 @@
<effect needs-live-preview="true"> <effect needs-live-preview="true">
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Gear Generators"/> <submenu name="Gears" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

View File

@ -13,8 +13,8 @@
<effect> <effect>
<object-type>all</object-type> <object-type>all</object-type>
<effects-menu> <effects-menu>
<submenu name="FabLab Chemnitz"> <submenu name="FabLab Chemnitz Shape Generators">
<submenu name="Shape/Pattern from Generator"/> <submenu name="Streaks And Blobs" />
</submenu> </submenu>
</effects-menu> </effects-menu>
</effect> </effect>

Some files were not shown because too many files have changed in this diff Show More