updated some inx files

This commit is contained in:
Mario Voigt 2021-04-19 20:54:38 +02:00
parent 5fdcfb1bde
commit adfacd8b2a
34 changed files with 934 additions and 477 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
*.pyc
/.project
/.pydevproject

5
.pydevproject Normal file
View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
</pydev_project>

View File

@ -2,26 +2,45 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>The Spiral Of Archimedes</name>
<id>fablabchemnitz.de.archimedesspiral</id>
<param name="name" appearance="header" type="description">R = r + aθ</param>
<param name="r" type="int" min="0" max="1000000" gui-text="r (mm)">50</param>
<param name="a" type="float" min="0" max="1000000" gui-text="a">3</param>
<param name="step" type="int" min="1" max="300" gui-text="Step">50</param>
<param name="trl" type="optiongroup" appearance="combo" gui-text="Turn direction">
<option value="0">Left</option>
<option value="1">Right</option>
</param>
<param name="length" type="float" min="0" max="1000000" gui-text="Length (mm)">0</param>
<param name="turns" type="int" min="1" max="1000000" gui-text="Turns">5</param>
<param name="desc" appearance="header" type="description">Notes</param>
<param name="desc_text" type="description">
The option "turns" only works if you set "length (mm)" to 0.0.
Otherwise the length value will be used to calculate the
spiral for given length. The higher the "step" value is
set the better the accuracy is. If you set the step value
really low the resulting length will not be precise and
the curve is maybe not drawn at all. You can validate the
length by using the extension "Visualize Path> Measure Path"
</param>
<param name="tab" type="notebook">
<page name="tab_settings" gui-text="Settings">
<param name="name" appearance="header" type="description">R = r + aθ</param>
<param name="r" type="int" min="0" max="1000000" gui-text="r (mm)">50</param>
<param name="a" type="float" min="0" max="1000000" gui-text="a">3</param>
<param name="step" type="int" min="1" max="300" gui-text="Step" gui-description="The higher the value the better the accuracy. If you set the step value really low the resulting length will not be precise and the curve is maybe not drawn at all">50</param>
<param name="trl" type="optiongroup" appearance="combo" gui-text="Turn direction">
<option value="0">Left</option>
<option value="1">Right</option>
</param>
<param name="length" type="float" min="0" max="1000000" gui-text="Length (mm)">0</param>
<param name="turns" type="int" min="1" max="1000000" gui-text="Turns" gui-description="Works only if you set 'length (mm)' to 0.0">5</param>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">The Spiral Of Archimedes</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/archimedesspiral</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect>
<object-type>all</object-type>
<effects-menu>

View File

@ -20,6 +20,7 @@ from math import cos, sin, pi, log, sqrt
class Archimedes(inkex.EffectExtension):
def add_arguments(self, pars):
pars.add_argument('--tab')
pars.add_argument('--r', type = int, default = '50')
pars.add_argument('--a', type = float, default = '3')
pars.add_argument('--step', type = int, default = '50')

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Cleanup Styles</name>
<id>fablabchemnitz.de.cleanup</id>
<param name="main_tabs" type="notebook">
<page name="tab_active" gui-text="Cleanup Styles">
<id>fablabchemnitz.de.cleanup_styles</id>
<param name="tab" type="notebook">
<page name="tab_settings" gui-text="Settings">
<param name="dedicated_style_attributes" gui-text="Handling of dedicated style attributes" gui-description="We delete dedicated attributes like 'fill' or 'stroke'. Please choose an option what should happen with those properties." type="optiongroup" appearance="combo">
<option value="prefer_composed">Catch dedicated, but prefer composed (master) style</option>
<option value="prefer_dedicated">Catch dedicated and prefer over composed (master) style</option>
@ -28,15 +28,30 @@
<label>This extension works on current selection or for complete document</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">About</label>
<separator />
<label>Cleanup Styles by Mario Voigt / Stadtfabrikanten e.V. (2021)</label>
<label>This piece of software is part of the MightyScape for InkScape 1.0/1.1dev Extension Collection.</label>
<label>You found a bug or got some fresh code? Just report to mario.voigt@stadtfabrikanten.org. Thanks!</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<separator />
<label>This extension generates inventory stickers for thermo printers (we use Brother QL-720NW) from our Teedy instance. Teedy is an open source software document management system (DMS). You can find the complete documentation at the Wiki space of https://fablabchemnitz.de</label>
<label appearance="header">Cleanup Styles</label>
<label>This extension is useful for adjusting the stroke width and opacity of large groups. Usually for good laser cutting the line width has to match a maximum width to be recognized as a hairline. Additionally often opacity issues cause that lines are missed by laser cutter.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/cleanupstyles</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
@ -48,6 +63,6 @@
</effects-menu>
</effect>
<script>
<command location="inx" interpreter="python">cleanup.py</command>
<command location="inx" interpreter="python">cleanup_styles.py</command>
</script>
</inkscape-extension>

View File

@ -18,7 +18,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Based on
- coloreffect.py by Jos Hirth and Aaron C. Spike
- cleanup.py https://github.com/attoparsec/inkscape-extensions by attoparsec
- cleanup.py (https://github.com/attoparsec/inkscape-extensions) by attoparsec
Author: Mario Voigt / FabLab Chemnitz
Mail: mario.voigt@stadtfabrikanten.org
@ -37,7 +37,7 @@ class Cleanup(inkex.EffectExtension):
groups = []
def add_arguments(self, pars):
pars.add_argument("--main_tabs")
pars.add_argument("--tab")
pars.add_argument("--mode", default="Lines", help="Join paths with lines or polygons")
pars.add_argument("--dedicated_style_attributes", default="ignore", help="Handling of dedicated style attributes")
pars.add_argument("--stroke_width_override", type=inkex.Boolean, default=False, help="Override stroke width")

View File

@ -3,10 +3,10 @@
<name>Contour Scanner</name>
<id>fablabchemnitz.de.contour_scanner</id>
<param name="main_tabs" type="notebook">
<page name="tab_active" gui-text="Active">
<page name="tab_settings" gui-text="Contour Scanner">
<hbox>
<vbox>
<label appearance="header">Highlight paths</label>
<label appearance="header">Highlight Paths</label>
<param name="highlight_opened" type="bool" gui-text="Highlight opened contours">true</param>
<param name="color_opened" type="color" appearance="colorbutton" gui-text="Color opened contours">4012452351</param>
<param name="highlight_closed" type="bool" gui-text="Highlight closed contours">true</param>
@ -21,7 +21,7 @@
</vbox>
<separator/>
<vbox>
<label appearance="header">Remove paths</label>
<label appearance="header">Remove Paths</label>
<param name="remove_opened" type="bool" gui-text="Remove opened contours">false</param>
<param name="remove_closed" type="bool" gui-text="Remove closed contours">false</param>
<param name="remove_selfintersecting" type="bool" gui-text="Remove self-intersecting contours">false</param>
@ -35,16 +35,35 @@
</vbox>
</hbox>
</page>
<page name="tab_info" gui-text="About">
<label appearance="header">About</label>
<separator/>
<label>Contour Scanner by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label>This piece of software is part of the MightyScape for InkScape 1.0/1.1dev Extension Collection</label>
<label>you found a bug or got some fresh code? Just report to mario.voigt@stadtfabrikanten.org. Thanks!</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<separator/>
<label>This tool helps you to find nasty contours which might bug you and prevent your work from being ready for production. Ideally you should convert your paths to polylines because the algorithm used by Contour Scanner is not able to distinguish between curves and polylines. It will handle curves like polylines but that creates visual and measurable errors. Either use "Split Bezier (Subdivide Path)" or "Add Nodes" extension to split into smaller segments which makes more precise. You can also run "Flatten Bezier" to make smooth polylines. For roughest approximation use "Convert to Polylines" extension to create real polylines. You can find the complete documentation at the Wiki space of https://fablabchemnitz.de</label>
<page name="tab_about" gui-text="About">
<label appearance="header">Contour Scanner</label>
<label>This tool helps you to find nasty contours which might bug you and prevent your work from being ready for production. Ideally you should convert your paths to polylines because the algorithm used by Contour Scanner is not able to distinguish between curves and polylines. It will handle curves like polylines but that creates visual and measurable errors. Either use "Split Bezier (Subdivide Path)" or "Add Nodes" extension to split into smaller segments which makes more precise. You can also run "Flatten Bezier" to make smooth polylines. For roughest approximation use "Convert to Polylines" extension to create real polylines.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/contourscanner</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/ideasman42/isect_segments-bentley_ottmann</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect>

View File

@ -2,8 +2,8 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Create Links (Breakaway Connectors)</name>
<id>fablabchemnitz.de.create_links</id>
<param name="main_tabs" type="notebook">
<page name="settings" gui-text="Settings">
<param name="tab" type="notebook">
<page name="tab_settings" gui-text="Settings">
<hbox>
<vbox>
<param name="path_types" type="optiongroup" appearance="combo" gui-text="Apply for">
@ -56,16 +56,33 @@
<param name="show_info" type="bool" gui-text="Print length, pattern and filtering information/errors" gui-description="Warning: might freeze Inkscape forever if you have a lot of nodes because we create too much print output. Use for debugging only!">false</param>
<param name="skip_errors" type="bool" gui-text="Skip errors">false</param>
</vbox>
</hbox>
</hbox>
</page>
<page name="about" gui-text="About">
<page name="tab_about" gui-text="About">
<label appearance="header">Create Links</label>
<label>by Mario Voigt / Stadtfabrikanten e.V. (2021)</label>
<spacer/>
<label>This piece of software is part of the MightyScape for InkScape 1.0/1.1dev Extension Collection.</label>
<label>You found a bug or got some fresh code? Just report to mario.voigt@stadtfabrikanten.org. Thanks!</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<label>A utility to create links, also known as tabs, breakaway connectors or bridges. Intended to use with laser cutters.</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/createlinks</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect>

View File

@ -43,7 +43,7 @@ from inkex.bezier import csplength
class LinksCreator(inkex.EffectExtension):
def add_arguments(self, pars):
pars.add_argument("--main_tabs")
pars.add_argument("--tab")
pars.add_argument("--path_types", default="closed_paths", help="Apply for closed paths, open paths or both")
pars.add_argument("--creationunit", default="mm", help="Creation Units")
pars.add_argument("--creationtype", default="entered_values", help="Creation")
@ -95,10 +95,9 @@ class LinksCreator(inkex.EffectExtension):
nodeParent = node.getparent()
pathIsClosed = False
path = node.path.to_superpath()
if path[-1][0] == 'Z' or path[0] == path[-1]: #if first is last point the path is also closed. The "Z" command is not required
path = node.path.to_arrays() #to_arrays() is deprecated. How to make more modern?
if path[-1][0] == 'Z' or path[0][1] == path[-1][1]: #if first is last point the path is also closed. The "Z" command is not required
pathIsClosed = True
if self.options.path_types == 'open_paths' and pathIsClosed is True:
return #skip this loop iteration
elif self.options.path_types == 'closed_paths' and pathIsClosed is False:
@ -119,7 +118,7 @@ class LinksCreator(inkex.EffectExtension):
if self.options.length_filter is True:
if stotal < self.svg.unittouu(str(self.options.length_filter_value) + self.options.length_filter_unit):
if self.options.show_info is True: inkex.errormsg("node " + node.get('id') + " is shorter than minimum allowed length of {:1.3f} {}. Path length is {:1.3f} {}".format(self.options.length_filter_value, self.options.length_filter_unit, stotal, self.options.creationunit))
if self.options.show_info is True: self.msg("node " + node.get('id') + " is shorter than minimum allowed length of {:1.3f} {}. Path length is {:1.3f} {}".format(self.options.length_filter_value, self.options.length_filter_unit, stotal, self.options.creationunit))
return #skip this loop iteration
if self.options.creationunit == "percent":
@ -142,7 +141,7 @@ class LinksCreator(inkex.EffectExtension):
#validate dashes. May not be negative. Otherwise Inkscape will freeze forever. Reason: rendering issue
if any(dash <= 0.0 for dash in dashes) == True:
if self.options.show_info is True: inkex.errormsg("node " + node.get('id') + ": Error! Dash array may not contain negative numbers: " + ' '.join(format(dash, "1.3f") for dash in dashes) + ". Path skipped. Maybe it's too short. Adjust your link count, multiplicator and length accordingly, or set to unit '%'")
if self.options.show_info is True: self.msg("node " + node.get('id') + ": Error! Dash array may not contain negative numbers: " + ' '.join(format(dash, "1.3f") for dash in dashes) + ". Path skipped. Maybe it's too short. Adjust your link count, multiplicator and length accordingly, or set to unit '%'")
return False if self.options.skip_errors is True else exit(1)
if self.options.creationunit == "percent":
@ -155,7 +154,7 @@ class LinksCreator(inkex.EffectExtension):
if self.options.creationtype == "use_existing":
if self.options.no_convert is True:
if self.options.show_info is True: inkex.errormsg("node " + node.get('id') + ": Nothing to do. Please select another creation method or disable cosmetic style output paths.")
if self.options.show_info is True: self.msg("node " + node.get('id') + ": Nothing to do. Please select another creation method or disable cosmetic style output paths.")
return False if self.options.skip_errors is True else exit(1)
stroke_dashoffset = 0
style = node.style
@ -168,7 +167,7 @@ class LinksCreator(inkex.EffectExtension):
else:
raise ValueError
except:
if self.options.show_info is True: inkex.errormsg("node " + node.get('id') + ": No dash style to continue with.")
if self.options.show_info is True: self.msg("node " + node.get('id') + ": No dash style to continue with.")
return False if self.options.skip_errors is True else exit(1)
if self.options.creationtype == "custom_dashpattern":
@ -180,7 +179,7 @@ class LinksCreator(inkex.EffectExtension):
else:
raise ValueError
except:
if self.options.show_info is True: inkex.errormsg("node " + node.get('id') + ": Error in custom dasharray string (might be empty or does not contain any numbers).")
if self.options.show_info is True: self.msg("node " + node.get('id') + ": Error in custom dasharray string (might be empty or does not contain any numbers).")
return False if self.options.skip_errors is True else exit(1)
#assign stroke dasharray from entered values, existing style or custom dashpattern
@ -234,20 +233,20 @@ class LinksCreator(inkex.EffectExtension):
# Print some info about values
if self.options.show_info is True:
inkex.errormsg("node " + node.get('id') + ":")
self.msg("node " + node.get('id') + ":")
if self.options.creationunit == "percent":
inkex.errormsg(" * total path length = {:1.3f} {}".format(stotal, self.svg.unit)) #show length, converted in selected unit
inkex.errormsg(" * (calculated) offset: {:1.3f} %".format(stroke_dashoffset))
self.msg(" * total path length = {:1.3f} {}".format(stotal, self.svg.unit)) #show length, converted in selected unit
self.msg(" * (calculated) offset: {:1.3f} %".format(stroke_dashoffset))
if self.options.creationtype == "entered_values":
inkex.errormsg(" * (calculated) gap length: {:1.3f} %".format(length_link))
self.msg(" * (calculated) gap length: {:1.3f} %".format(length_link))
else:
inkex.errormsg(" * total path length = {:1.3f} {} ({:1.3f} {})".format(self.svg.uutounit(stotal, self.options.creationunit), self.options.creationunit, stotal, self.svg.unit)) #show length, converted in selected unit
inkex.errormsg(" * (calculated) offset: {:1.3f} {}".format(self.svg.uutounit(stroke_dashoffset, self.options.creationunit), self.options.creationunit))
self.msg(" * total path length = {:1.3f} {} ({:1.3f} {})".format(self.svg.uutounit(stotal, self.options.creationunit), self.options.creationunit, stotal, self.svg.unit)) #show length, converted in selected unit
self.msg(" * (calculated) offset: {:1.3f} {}".format(self.svg.uutounit(stroke_dashoffset, self.options.creationunit), self.options.creationunit))
if self.options.creationtype == "entered_values":
inkex.errormsg(" * (calculated) gap length: {:1.3f} {}".format(length_link, self.options.creationunit))
self.msg(" * (calculated) gap length: {:1.3f} {}".format(length_link, self.options.creationunit))
if self.options.creationtype == "entered_values":
inkex.errormsg(" * total gaps = {}".format(self.options.link_count))
inkex.errormsg(" * (calculated) dash/gap pattern: {} ({})".format(stroke_dasharray, self.svg.unit))
self.msg(" * total gaps = {}".format(self.options.link_count))
self.msg(" * (calculated) dash/gap pattern: {} ({})".format(stroke_dasharray, self.svg.unit))
# Conversion step (split cosmetic path into real segments)
if self.options.no_convert is False:
@ -293,7 +292,7 @@ class LinksCreator(inkex.EffectExtension):
breakApartGroup = nodeParent.add(inkex.Group())
for breakOutputNode in breakOutputNodes:
breakApartGroup.append(breakOutputNode)
#inkex.errormsg(replacedNode.get('id'))
#self.msg(replacedNode.get('id'))
#self.svg.selection.set(replacedNode.get('id')) #update selection to split paths segments (does not work, so commented out)
if len(self.svg.selected) > 0:
@ -303,7 +302,7 @@ class LinksCreator(inkex.EffectExtension):
for breakInputNode in breakInputNodes:
createLinks(breakInputNode)
else:
inkex.errormsg('Please select some paths first.')
self.msg('Please select some paths first.')
return
if __name__ == '__main__':

View File

@ -39,7 +39,7 @@
<page name="tab_about" gui-text="About">
<label appearance="header">DXF 2 Papercraft</label>
<label>Unfold and import DXF into InkScape using dxf2papercraft. This is some kind of wrapper extension utilizing kabeja to convert the dxf output from dxf2papercraft into SVG. To make it work you need to install at least java.</label>
<label>2020 -2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/dxf2papercraft</label>
@ -53,9 +53,8 @@
<label appearance="url">http://kabeja.sourceforge.net</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for InkScape Extension Collection and is licensed under GNU GPL v3</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>

View File

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>DXF/DWG Importer</name>
<id>fablabchemnitz.de.dxfdwgimporter_configure</id>
<id>fablabchemnitz.de.dxfdwgimporter</id>
<param name="tab" type="notebook">
<page name="general" gui-text="Input / General">
<page name="tab_general" gui-text="Input / General">
<label>The parser is the heart of your input-output chain because depending on the selection your result will greatly vary. You might receive no or bad results (e.g. wrong scalings, aborted imports, missing lines, duplicated lines, wrong rotations and other issues. Serious tip: ask the person who gave the input file to you about some measurement which you can compare with the processed file to ensure correct sizes)</label>
<param name="dxf_to_svg_parser" gui-text="DXF to SVG parser" type="optiongroup" appearance="combo">
<option value="bjnortier">bjnortier DXF (good quality, some polygon artifacts)</option>
@ -25,15 +24,8 @@
</param>
<param name="inputfile" type="path" gui-text="Import File (*.dxf, .dwg)" gui-description="Full path to your file, e.g. 'C:\Users\Username\Documents\myimage.jpg'" filetypes="dxf,dwg" mode="file">C:\Users\</param>
<param name="opendironerror" type="bool" gui-text="Open containing output directory on conversion errors">true</param>
<spacer/>
<label appearance="header">About</label>
<separator/>
<label>DXF/DWG File Importer by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label>A strange looking ODA File Converter/sk1 UniConverter/ezdxf tool chain. But it works! The most versatile tool to import much hated AutoCAD data for InkScape yet.</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="dwg_dxf" gui-text="DWG to DXF / DXF to DXF">
<page name="tab_dwg_dxf" gui-text="DWG to DXF / DXF to DXF">
<label appearance="header">Open Design Alliance (ODA) File Converter</label>
<param name="oda_fileconverter" type="path" gui-text="ODAFileConverter executable" gui-description="Full path to 'ODAFileConverter' executable. On Linux this usually should be '/usr/bin/ODAFileConverter' and on Windows it's 'C:\Program Files\ODA\OdaFileConverter_title XX.Y.Z\ODAFileConverter.exe'" filetypes="" mode="file">C:\Program Files\ODA\ODAFileConverter_title 21.6.0\ODAFileConverter.exe</param>
<param name="oda_keepconverted_dxf" type="bool" gui-text="Keep ODA converted DXF file" gui-description="Will put a copy of the converted DXF into the directory where your input file is located.">true</param>
@ -75,7 +67,7 @@
<param name="oda_skip_dxf_to_dxf" type="bool" gui-text="Skip conversion from DXF to DXF (keep input as is)" gui-description="This will skip ODA File Converter execution if input is already DXF file. If your input is DWG this option will not apply. Might save some seconds of time and maybe prevents errors.">false</param>
<param name="oda_audit_repair" type="bool" gui-text="Perform audit (auto-repair)">true</param>
</page>
<page name="dxf_svg" gui-text="DXF to SVG">
<page name="tab_dxf_svg" gui-text="DXF to SVG">
<label appearance="header">ezdxf DXF to DXF Pre-Processing (Filter)</label>
<separator/>
<param name="ezdxf_preprocessing" type="bool" gui-text="Filter entities with ezdxf (recommended if you use sk1 UniConverter)">true</param>
@ -155,7 +147,40 @@
<param name="vpype_quantization" type="float" min="0.001" max="99999.000" precision="3" gui-text="Quantization" gui-description="Maximum length of segments approximating curved elements (default 0.1mm)">0.100</param>
<param name="vpype_simplify" type="bool" gui-text="Simplify curved elements" gui-description="Apply simplification algorithm to curved elements">false</param>
<param name="vpype_parallel" type="bool" gui-text="Multiprocessing curve conversion" gui-description="Enable multiprocessing for curve conversion.">false</param>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">DXF/DWG Importer</label>
<label>A strange looking ODA File Converter/sk1 UniConverter/ezdxf tool chain. But it works! The most versatile tool to import much hated AutoCAD data for InkScape yet.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/dxfdwgimporter</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/mozman/ezdxf</label>
<label appearance="url">http://kabeja.sourceforge.net</label>
<label appearance="url">https://github.com/bjnortier/dxf</label>
<label appearance="url">https://github.com/sk1project/uniconvertor</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<label appearance="url">https://github.com/tatarize/vpype-dxf</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">

View File

@ -2,57 +2,83 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Imagetracer.js</name>
<id>fablabchemnitz.de.imagetracerjs</id>
<hbox>
<vbox>
<label appearance="header">Tracing</label>
<separator/>
<param name="keeporiginal" type="bool" gui-text="Keep original image on canvas">false</param>
<param name="ltres" type="float" min="0.0" gui-text="Error treshold straight lines">1.0</param>
<param name="qtres" type="float" min="0.0" gui-text="Error treshold quadratic splines">1.0</param>
<param name="pathomit" type="int" min="0" max="9999" gui-text="Noise reduction - discard edge node paths shorter than">8</param>
<param name="rightangleenhance" type="bool" gui-text="Enhance right angle corners">true</param>
<param name="tab" type="notebook">
<page name="tab_general" gui-text="Imagetracer.js">
<hbox>
<vbox>
<label appearance="header">Tracing</label>
<separator/>
<param name="keeporiginal" type="bool" gui-text="Keep original image on canvas">false</param>
<param name="ltres" type="float" min="0.0" gui-text="Error treshold straight lines">1.0</param>
<param name="qtres" type="float" min="0.0" gui-text="Error treshold quadratic splines">1.0</param>
<param name="pathomit" type="int" min="0" max="9999" gui-text="Noise reduction - discard edge node paths shorter than">8</param>
<param name="rightangleenhance" type="bool" gui-text="Enhance right angle corners">true</param>
<spacer/>
<label appearance="header">Color Quantization and Layering</label>
<separator/>
<param name="colorsampling" appearance="combo" type="optiongroup" default="2" gui-text="Color sampling">
<option value="0">disabled, generating a palette</option>
<option value="1">random sampling</option>
<option value="2">deterministic sampling</option>
</param>
<param name="numberofcolors" type="int" min="1" max="9999" gui-text="Number of colors to use on palette">16</param>
<param name="mincolorratio" type="int" gui-text="Color randomization ratio">0</param>
<param name="colorquantcycles" type="int" min="1" max="20" gui-text="Color quantization will be repeated this many times">3</param>
<param name="layering" appearance="combo" type="optiongroup" default="0" gui-text="Layering">
<option value="0">sequential</option>
<option value="1">parallel</option>
</param>
</vbox>
<spacer/>
<separator/>
<spacer/>
<vbox>
<label appearance="header">SVG Rendering</label>
<separator/>
<param name="strokewidth" type="float" min="0.0" max="9999" gui-text="SVG stroke-width">1.0</param>
<param name="linefilter" type="bool" gui-text="Noise reduction line filter">false</param>
<!--<param name="scale" type="float" min="0.0" max="9999" gui-text="Coordinate scale factor">1.0</param> disabled because we resize to the size of the original image-->
<param name="roundcoords" type="int" min="0" max="10" gui-text="Decimal places for rounding">1</param>
<param name="viewbox" type="bool" gui-text="Resize to SVG viewBox">false</param>
<param name="desc" type="bool" gui-text="SVG descriptions">false</param>
<spacer/>
<label appearance="header">Blur Preprocessing</label>
<separator/>
<param name="blurradius" type="int" min="1" max="5" gui-text="Selective Gaussian blur preprocessing">0</param>
<param name="blurdelta" type="float" min="0.0" max="9999" gui-text="RGBA delta treshold for selective Gaussian blur preprocessing">20.0</param>
</vbox>
</hbox>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">Imagetracer.js</label>
<label>imagetracerjs - Simple raster image tracer and vectorizer written in JavaScript, ported to Inkscape. It will vectorize your beautiful image into a more beautiful SVG trace with separated infills(break apart into single surfaces like a puzzle).</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Color Quantization and Layering</label>
<separator/>
<param name="colorsampling" appearance="combo" type="optiongroup" default="2" gui-text="Color sampling">
<option value="0">disabled, generating a palette</option>
<option value="1">random sampling</option>
<option value="2">deterministic sampling</option>
</param>
<param name="numberofcolors" type="int" min="1" max="9999" gui-text="Number of colors to use on palette">16</param>
<param name="mincolorratio" type="int" gui-text="Color randomization ratio">0</param>
<param name="colorquantcycles" type="int" min="1" max="20" gui-text="Color quantization will be repeated this many times">3</param>
<param name="layering" appearance="combo" type="optiongroup" default="0" gui-text="Layering">
<option value="0">sequential</option>
<option value="1">parallel</option>
</param>
</vbox>
<spacer/>
<separator/>
<spacer/>
<vbox>
<label appearance="header">SVG Rendering</label>
<separator/>
<param name="strokewidth" type="float" min="0.0" max="9999" gui-text="SVG stroke-width">1.0</param>
<param name="linefilter" type="bool" gui-text="Noise reduction line filter">false</param>
<!--<param name="scale" type="float" min="0.0" max="9999" gui-text="Coordinate scale factor">1.0</param> disabled because we resize to the size of the original image-->
<param name="roundcoords" type="int" min="0" max="10" gui-text="Decimal places for rounding">1</param>
<param name="viewbox" type="bool" gui-text="Resize to SVG viewBox">false</param>
<param name="desc" type="bool" gui-text="SVG descriptions">false</param>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/imagetracerjs</label>
<spacer/>
<label appearance="header">Blur Preprocessing</label>
<separator/>
<param name="blurradius" type="int" min="1" max="5" gui-text="Selective Gaussian blur preprocessing">0</param>
<param name="blurdelta" type="float" min="0.0" max="9999" gui-text="RGBA delta treshold for selective Gaussian blur preprocessing">20.0</param>
</vbox>
</hbox>
<spacer/>
<label appearance="header">About</label>
<separator/>
<label>imagetracerjs - Simple raster image tracer and vectorizer written in JavaScript. Ported to InkScape 1.X by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label>It will vectorize your beautiful image into a more beautiful SVG trace with separated infills(break apart into single surfaces like a puzzle)</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/jankovicsandras/imagetracerjs</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<object-type>image</object-type>
<effects-menu>

View File

@ -49,7 +49,7 @@ class Imagetracerjs (inkex.EffectExtension):
return path
def add_arguments(self, pars):
pars.add_argument("--tabs")
pars.add_argument("--tab")
pars.add_argument("--keeporiginal", type=inkex.Boolean, default=False, help="Keep original image on canvas")
pars.add_argument("--ltres", type=float, default=1.0, help="Error treshold straight lines")
pars.add_argument("--qtres", type=float, default=1.0, help="Error treshold quadratic splines")

View File

@ -2,8 +2,8 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Inventory Sticker</name>
<id>fablabchemnitz.de.inventory_sticker</id>
<param name="main_tabs" type="notebook">
<page name="tab_active" gui-text="Active">
<param name="tab" type="notebook">
<page name="tab_settings" gui-text="Settings">
<label appearance="header">Inventory Download</label>
<param name="server_address" type="string" gui-text="inventory.csv URL">https://the.domain.de/items.csv</param>
<param name="htuser" type="string" gui-text="Basic Auth User">User</param>
@ -21,16 +21,31 @@
<param name="print_device" type="string" gui-text="Printer interface (USB)" gui-description="[VendorID:ProductID], Example: 04f9:2044">04f9:2044</param>
<param name="preview" type="bool" gui-text="Generate preview only" gui-description="If enabled stickers will not be exported. Just generate sticker for the first given Id">false</param>
</page>
<page name="tab_info" gui-text="About">
<label appearance="header">About</label>
<separator />
<label>Inventory Stickers by Mario Voigt / Stadtfabrikanten e.V. (2021)</label>
<label>This piece of software is part of the MightyScape for InkScape 1.0/1.1dev Extension Collection.</label>
<label>you found a bug or got some fresh code? Just report to mario.voigt@stadtfabrikanten.org. Thanks!</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<separator />
<label>This extension generates inventory stickers for thermo printers (we use Brother QL-720NW) from our Teedy instance. Teedy is an open source software document management system (DMS). You can find the complete documentation at the Wiki space of https://fablabchemnitz.de</label>
<page name="tab_about" gui-text="About">
<label appearance="header">Inventory Sticker</label>
<label>This extension generates inventory stickers for thermo printers (we use a Brother QL-720NW) from our Teedy instance. Teedy is an open source software document management system (DMS).</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/inventorysticker</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect>

View File

@ -358,7 +358,7 @@ def splitAt(string, length):
class InventorySticker(inkex.Effect):
def add_arguments(self, pars):
pars.add_argument("--main_tabs")
pars.add_argument("--tab")
pars.add_argument("--server_address", default="https://the.domain.de/items.csv")
pars.add_argument("--htuser", default="user")
pars.add_argument("--htpassword", default="password")

View File

@ -2,79 +2,104 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Ungrouper And Element Migrator/Filter</name>
<id>fablabchemnitz.de.migrategroups</id>
<label>Running this extension works for current selection or if nothing is selected for whole document. It allows to flatten elements into one group and to drop elements while processing.</label>
<label>Unchecked elements will be dropped, if you selected a filter mode. Groups with transformations might puzzle anywhere. Please run "apply transformations" extension before to avoid this.</label>
<separator/>
<label appearance="header">Custom Element Types To Keep</label>
<hbox>
<vbox>
<label appearance="header">Geometry</label>
<param name="circle" type="bool" gui-text="circle">true</param>
<param name="ellipse" type="bool" gui-text="ellipse">true</param>
<param name="line" type="bool" gui-text="line">true</param>
<param name="path" type="bool" gui-text="path">true</param>
<param name="polyline" type="bool" gui-text="polyline">true</param>
<param name="polygon" type="bool" gui-text="polygon">true</param>
<param name="rect" type="bool" gui-text="rect">true</param>
</vbox>
<separator/>
<vbox>
<label appearance="header">Text</label>
<param name="text" type="bool" gui-text="text">true</param>
<param name="tspan" type="bool" gui-text="tspan">true</param>
<param name="flowRoot" type="bool" gui-text="flowRoot">true</param>
<param name="flowRegion" type="bool" gui-text="flowRegion">true</param>
<param name="flowPara" type="bool" gui-text="flowPara">true</param>
</vbox>
<separator/>
<vbox>
<label appearance="header">Gradients</label>
<param name="linearGradient" type="bool" gui-text="linearGradient">true</param>
<param name="radialGradient" type="bool" gui-text="radialGradient">true</param>
<param name="meshGradient" type="bool" gui-text="meshGradient">true</param>
<param name="meshRow" type="bool" gui-text="meshRow">true</param>
<param name="meshPatch" type="bool" gui-text="meshPatch">true</param>
<param name="stop" type="bool" gui-text="stop">true</param>
</vbox>
<separator/>
<vbox>
<label appearance="header">Objects / Misc</label>
<hbox>
<vbox>
<!--<param name="svg" type="bool" gui-text="svg">true</param>-->
<!--<param name="sodipodi" type="bool" gui-text="sodipodi">true</param>-->
<param name="clipPath" type="bool" gui-text="clipPath">true</param>
<param name="defs" type="bool" gui-text="defs">true</param>
<param name="image" type="bool" gui-text="image">true</param>
<param name="mask" type="bool" gui-text="mask">true</param>
<param name="marker" type="bool" gui-text="marker">true</param>
<param name="metadata" type="bool" gui-text="metadata">true</param>
</vbox>
<spacer/>
<vbox>
<param name="pattern" type="bool" gui-text="pattern">true</param>
<param name="script" type="bool" gui-text="script">true</param>
<param name="switch" type="bool" gui-text="switch">true</param>
<param name="symbol" type="bool" gui-text="symbol">true</param>
<param name="use" type="bool" gui-text="use">true</param>
</vbox>
</hbox>
</vbox>
</hbox>
<separator/>
<param name="operationmode" type="optiongroup" appearance="combo" gui-text="Operation mode">
<option value="ungroup_only">Ungroup (flatten) only</option>
<option value="ungroup_and_filter">Ungroup (flatten) + Filter (drop)</option>
<option value="filter_only">Filter (drop) only</option>
<param name="tab" type="notebook">
<page name="tab_settings" gui-text="Settings">
<label appearance="header">Custom Element Types To Keep</label>
<hbox>
<vbox>
<label appearance="header">Geometry</label>
<param name="circle" type="bool" gui-text="circle">true</param>
<param name="ellipse" type="bool" gui-text="ellipse">true</param>
<param name="line" type="bool" gui-text="line">true</param>
<param name="path" type="bool" gui-text="path">true</param>
<param name="polyline" type="bool" gui-text="polyline">true</param>
<param name="polygon" type="bool" gui-text="polygon">true</param>
<param name="rect" type="bool" gui-text="rect">true</param>
</vbox>
<separator/>
<vbox>
<label appearance="header">Text</label>
<param name="text" type="bool" gui-text="text">true</param>
<param name="tspan" type="bool" gui-text="tspan">true</param>
<param name="flowRoot" type="bool" gui-text="flowRoot">true</param>
<param name="flowRegion" type="bool" gui-text="flowRegion">true</param>
<param name="flowPara" type="bool" gui-text="flowPara">true</param>
</vbox>
<separator/>
<vbox>
<label appearance="header">Gradients</label>
<param name="linearGradient" type="bool" gui-text="linearGradient">true</param>
<param name="radialGradient" type="bool" gui-text="radialGradient">true</param>
<param name="meshGradient" type="bool" gui-text="meshGradient">true</param>
<param name="meshRow" type="bool" gui-text="meshRow">true</param>
<param name="meshPatch" type="bool" gui-text="meshPatch">true</param>
<param name="stop" type="bool" gui-text="stop">true</param>
</vbox>
<separator/>
<vbox>
<label appearance="header">Objects / Misc</label>
<hbox>
<vbox>
<!--<param name="svg" type="bool" gui-text="svg">true</param>-->
<!--<param name="sodipodi" type="bool" gui-text="sodipodi">true</param>-->
<param name="clipPath" type="bool" gui-text="clipPath">true</param>
<param name="defs" type="bool" gui-text="defs">true</param>
<param name="image" type="bool" gui-text="image">true</param>
<param name="mask" type="bool" gui-text="mask">true</param>
<param name="marker" type="bool" gui-text="marker">true</param>
<param name="metadata" type="bool" gui-text="metadata">true</param>
</vbox>
<spacer/>
<vbox>
<param name="pattern" type="bool" gui-text="pattern">true</param>
<param name="script" type="bool" gui-text="script">true</param>
<param name="switch" type="bool" gui-text="switch">true</param>
<param name="symbol" type="bool" gui-text="symbol">true</param>
<param name="use" type="bool" gui-text="use">true</param>
</vbox>
</hbox>
</vbox>
</hbox>
<separator/>
<param name="operationmode" type="optiongroup" appearance="combo" gui-text="Operation mode">
<option value="ungroup_only">Ungroup (flatten) only</option>
<option value="ungroup_and_filter">Ungroup (flatten) + Filter (drop)</option>
<option value="filter_only">Filter (drop) only</option>
</param>
<param name="parsechildren" type="bool" gui-text="Perform operations on children of selection">true</param>
<param name="showdroplist" type="bool" gui-text="Show list of dropped items">false</param>
<param name="shownewgroupname" type="bool" gui-text="Show name of new group formation" gui-description="This helps to better identify the generated output.">false</param>
<param name="apply_transformations" type="bool" gui-text="Apply transformations (requires separate extension)" gui-description="This will call the extension 'Apply Transformations'. Helps avoiding geometry shifting">false</param>
<param name="cleanup" gui-text="Cleanup all unused groups (requires separate extension)" type="boolean" gui-description="This will call the extension 'Remove Empty Groups' if available">true</param>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">Ungrouper And Element Migrator/Filter</label>
<label>Running this extension works for current selection or if nothing is selected for whole document. It allows to flatten elements into one group and to drop elements while processing.</label>
<label>Unchecked elements will be dropped, if you selected a filter mode. Groups with transformations might puzzle anywhere. Please run "apply transformations" extension before to avoid this.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/migrategroups</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>000_about_fablabchemnitz.svg</image>
</page>
</param>
<param name="parsechildren" type="bool" gui-text="Perform operations on children of selection">true</param>
<param name="showdroplist" type="bool" gui-text="Show list of dropped items">false</param>
<param name="shownewgroupname" type="bool" gui-text="Show name of new group formation" gui-description="This helps to better identify the generated output.">false</param>
<param name="cleanup" gui-text="Cleanup all unused groups (requires separate extension)" type="boolean" gui-description="This will call the extension 'Remove Empty Groups' if available">true</param>
<separator/>
<label>Written by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<effect needs-live-preview="true">
<object-type>path</object-type>
<effects-menu>

View File

@ -16,52 +16,53 @@ import inkex
import os
from lxml import etree
class MigrateGroups(inkex.Effect):
class MigrateGroups(inkex.EffectExtension):
allElements = [] #list of all (sub)elements to process within selection
allGroups = [] #list of all groups (svg:g and svg:svg items) to delete for cleanup (for ungrouping)
allDrops = [] #list of all other elements except svg:g and svg:svg to drop while migrating (for filtering)
def __init__(self):
inkex.Effect.__init__(self)
self.arg_parser.add_argument("--ignorecustomselection", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--operationmode", default=False)
self.arg_parser.add_argument("--parsechildren", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--cleanup", type=inkex.Boolean, default = True, help = "Decimal tolerance")
self.arg_parser.add_argument("--showdroplist", type=inkex.Boolean, default=False)
self.arg_parser.add_argument("--shownewgroupname", type=inkex.Boolean, default=False)
def add_arguments(self, pars):
pars.add_argument("--tab")
#self.arg_parser.add_argument("--sodipodi", type=inkex.Boolean, default=True)
#self.arg_parser.add_argument("--svg", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--circle", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--clipPath", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--defs", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--ellipse", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--image", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--line", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--path", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--polyline", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--polygon", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--rect", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--text", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--tspan", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--linearGradient", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--radialGradient", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--mask", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--meshGradient", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--meshRow", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--meshPatch", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--metadata", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--script", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--symbol", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--stop", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--switch", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--use", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--flowRoot", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--flowRegion", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--flowPara", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--marker", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--pattern", type=inkex.Boolean, default=True)
pars.add_argument("--operationmode", default=False, help="Operation mode")
pars.add_argument("--parsechildren", type=inkex.Boolean, default=True, help="Perform operations on children of selection")
pars.add_argument("--showdroplist", type=inkex.Boolean, default=False, help="Show list of dropped items")
pars.add_argument("--shownewgroupname", type=inkex.Boolean, default=False, help="This helps to better identify the generated output.")
pars.add_argument("--apply_transformations", type=inkex.Boolean, default=False, help="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting")
pars.add_argument("--cleanup", type=inkex.Boolean, default = True, help = "This will call the extension 'Remove Empty Groups' if available")
#pars.add_argument("--sodipodi", type=inkex.Boolean, default=True)
#pars.add_argument("--svg", type=inkex.Boolean, default=True)
pars.add_argument("--circle", type=inkex.Boolean, default=True)
pars.add_argument("--clipPath", type=inkex.Boolean, default=True)
pars.add_argument("--defs", type=inkex.Boolean, default=True)
pars.add_argument("--ellipse", type=inkex.Boolean, default=True)
pars.add_argument("--image", type=inkex.Boolean, default=True)
pars.add_argument("--line", type=inkex.Boolean, default=True)
pars.add_argument("--path", type=inkex.Boolean, default=True)
pars.add_argument("--polyline", type=inkex.Boolean, default=True)
pars.add_argument("--polygon", type=inkex.Boolean, default=True)
pars.add_argument("--rect", type=inkex.Boolean, default=True)
pars.add_argument("--text", type=inkex.Boolean, default=True)
pars.add_argument("--tspan", type=inkex.Boolean, default=True)
pars.add_argument("--linearGradient", type=inkex.Boolean, default=True)
pars.add_argument("--radialGradient", type=inkex.Boolean, default=True)
pars.add_argument("--mask", type=inkex.Boolean, default=True)
pars.add_argument("--meshGradient", type=inkex.Boolean, default=True)
pars.add_argument("--meshRow", type=inkex.Boolean, default=True)
pars.add_argument("--meshPatch", type=inkex.Boolean, default=True)
pars.add_argument("--metadata", type=inkex.Boolean, default=True)
pars.add_argument("--script", type=inkex.Boolean, default=True)
pars.add_argument("--symbol", type=inkex.Boolean, default=True)
pars.add_argument("--stop", type=inkex.Boolean, default=True)
pars.add_argument("--switch", type=inkex.Boolean, default=True)
pars.add_argument("--use", type=inkex.Boolean, default=True)
pars.add_argument("--flowRoot", type=inkex.Boolean, default=True)
pars.add_argument("--flowRegion", type=inkex.Boolean, default=True)
pars.add_argument("--flowPara", type=inkex.Boolean, default=True)
pars.add_argument("--marker", type=inkex.Boolean, default=True)
pars.add_argument("--pattern", type=inkex.Boolean, default=True)
def effect(self):
@ -97,7 +98,7 @@ class MigrateGroups(inkex.Effect):
namespace.append("{http://www.w3.org/2000/svg}flowPara") if self.options.flowPara else ""
namespace.append("{http://www.w3.org/2000/svg}marker") if self.options.marker else ""
namespace.append("{http://www.w3.org/2000/svg}pattern") if self.options.pattern else ""
#inkex.utils.debug(namespace)
#self.msg(namespace)
#in case the user made a manual selection instead of whole document parsing, we need to collect all required elements first
def parseChildren(element):
@ -120,12 +121,12 @@ class MigrateGroups(inkex.Effect):
self.allElements.append(element)
#if we dont want to ungroup but filter out elements, or ungroup and filter, we need to divide the elements with respect to the namespace (user selection)
elif self.options.operationmode == "filter_only" or self.options.operationmode == "ungroup_and_filter":
#inkex.utils.debug(element.tag)
#self.msg(element.tag)
if element.tag in namespace: #if the element is in namespace and no group type we will regroup the item. so we will not remove it
if element not in self.allElements:
self.allElements.append(element)
else: #we add all remaining items (except svg:g and svg:svg) into the list for deletion
#inkex.utils.debug(element.tag)
#self.msg(element.tag)
if element.tag != inkex.addNS('g','svg') and element.tag != inkex.addNS('svg','svg') and element.tag != inkex.addNS('namedview','sodipodi'):
if element not in self.allDrops:
self.allDrops.append(element)
@ -135,14 +136,26 @@ class MigrateGroups(inkex.Effect):
if element not in self.allGroups:
self.allGroups.append(element)
applyTransformAvailable = False # at first we apply external extension
try:
import applytransform
applyTransformAvailable = True
except Exception as e:
# self.msg(e)
self.msg("Calling 'Apply Transformations' extension failed. Maybe the extension is not installed. You can download it from official InkScape Gallery. Skipping ...")
if self.options.apply_transformations is True and applyTransformAvailable is True:
applytransform.ApplyTransform().recursiveFuseTransform(self.document.getroot())
#check if we have selected elements or if we should parse the whole document instead
selected = [] #total list of elements to parse
if len(self.svg.selected) == 0:
for element in self.document.getroot().iter(tag=etree.Element):
if element != self.document.getroot():
selected.append(element)
else:
for id, element in self.svg.selected.items():
for element in self.svg.selected.values():
parseChildren(element)
#get all elements from the selection.
@ -151,17 +164,17 @@ class MigrateGroups(inkex.Effect):
#some debugging block
#check output
#inkex.utils.debug("--- Selected items (with or without children) ---")
#inkex.utils.debug(selected)
#inkex.utils.debug("--- All elements (except groups)---")
#inkex.utils.debug(len(self.allElements))
#inkex.utils.debug(self.allElements)
#inkex.utils.debug("--- All groups ---")
#inkex.utils.debug(len(self.allGroups))
#inkex.utils.debug(self.allGroups)
#inkex.utils.debug("--- All dropouts ---")
#inkex.utils.debug(len(self.allDrops))
#inkex.utils.debug(self.allDrops)
#self.msg("--- Selected items (with or without children) ---")
#self.msg(selected)
#self.msg("--- All elements (except groups)---")
#self.msg(len(self.allElements))
#self.msg(self.allElements)
#self.msg("--- All groups ---")
#self.msg(len(self.allGroups))
#self.msg(self.allGroups)
#self.msg("--- All dropouts ---")
#self.msg(len(self.allDrops))
#self.msg(self.allDrops)
migrate_log = "migrategroups.log"
@ -171,12 +184,12 @@ class MigrateGroups(inkex.Effect):
try:
os.remove(migrate_log)
except OSError as e:
inkex.utils.debug("Error while deleting previously generated log file " + migrate_log)
self.msg("Error while deleting previously generated log file " + migrate_log)
# show a list with items to delete. For ungroup mode it does not apply because we are not going to remove anything
if self.options.operationmode == "filter_only" or self.options.operationmode == "ungroup_and_filter":
if self.options.showdroplist:
inkex.utils.debug(str(len(self.allDrops)) + " elements were removed during nodes while migration:")
self.msg(str(len(self.allDrops)) + " elements were removed during nodes while migration.")
if len(self.allDrops) > 100: #if we print too much to the output stream we will freeze InkScape forever wihtout any visual error message. So we write to file instead
migrate_log_file = open('migrategroups.log', 'w')
else:
@ -185,12 +198,12 @@ class MigrateGroups(inkex.Effect):
if i.get('id') is not None:
migrateString = i.tag.replace("{http://www.w3.org/2000/svg}","svg:") + " id:" + i.get('id')
if migrate_log_file is None:
inkex.utils.debug(migrateString)
self.msg(migrateString)
else:
migrate_log_file.write(migrateString + "\n")
if migrate_log_file is not None:
migrate_log_file.close()
inkex.utils.debug("Detailed output was dumped into file " + os.path.join(os.getcwd(), migrate_log))
self.msg("Detailed output was dumped into file " + os.path.join(os.getcwd(), migrate_log))
# remove all groups from the selection and form a new single group of it by copying with old IDs.
if self.options.operationmode == "ungroup_only" or self.options.operationmode == "ungroup_and_filter":
@ -198,7 +211,7 @@ class MigrateGroups(inkex.Effect):
newGroup = self.document.getroot().add(inkex.Group()) #make a new group at root level
newGroup.set('id', self.svg.get_unique_id('migrate-')) #generate some known ID with the prefix 'migrate-'
if self.options.shownewgroupname == True:
inkex.utils.debug("The migrated elements are now in group with ID " + str(newGroup.get('id')))
self.msg("The migrated elements are now in group with ID " + str(newGroup.get('id')))
index = 0
for element in self.allElements: #we have a list of elements which does not cotain any other elements like svg:g or svg:svg
newGroup.insert(index, element) #we do not copy any elements. we just rearrange them by moving to another place (group index)
@ -224,7 +237,7 @@ class MigrateGroups(inkex.Effect):
import cleangroups
cleangroups.CleanGroups.effect(self)
except:
inkex.utils.debug("Calling 'Remove Empty Groups' extension failed. Maybe the extension is not installed. You can download it from official InkScape Gallery.")
self.msg("Calling 'Remove Empty Groups' extension failed. Maybe the extension is not installed. You can download it from official InkScape Gallery.")
if __name__ == '__main__':
MigrateGroups().run()

View File

@ -3,9 +3,8 @@
<name>Papercraft Unfold</name>
<id>fablabchemnitz.de.papercraft_unfold</id>
<param name="tab" type="notebook">
<page name="general" gui-text="Input / General">
<param name="inputfile" type="path" gui-text="Input File" gui-description="The model to unfold" filetypes="obj,off,ply,stl"
mode="file">/your/beautiful/3dmodel/file</param>
<page name="tab_general" gui-text="Input / General">
<param name="inputfile" type="path" gui-text="Input File" gui-description="The model to unfold" filetypes="obj,off,ply,stl" mode="file">/your/beautiful/3dmodel/file</param>
<param name="generatelabels" type="bool" gui-text="Generate labels for edges">true</param>
<param name="resizetoimport" type="bool" gui-text="Resize the canvas to the imported drawing's bounding box">true</param>
<param name="extraborder" type="float" precision="3" gui-text="Add extra border around fitted canvas">0.0</param>
@ -18,7 +17,7 @@
</param>
<param name="show_fstl" type="bool" gui-text="Show converted (and fixed) STL in fstl Viewer">true</param>
</page>
<page name="meshfixing" gui-text="Mesh Fixing / Adjusting (ADMesh)">
<page name="tab_meshfixing" gui-text="Mesh Fixing / Adjusting (ADMesh)">
<param name="exact" type="bool" gui-text="Only check for perfectly matched edges">true</param>
<param name="nearby" type="bool" gui-text="Find and connect nearby facets. Correct bad facets">true</param>
<param name="tolerance" type="float" min="0.0" max="10000.0" precision="4" gui-text="Initial tolerance to use for nearby check">0.0</param>
@ -35,11 +34,36 @@
<param name="xz_mirror" type="bool" gui-text="XZ-Mirror">false</param>
<param name="scale" type="float" min="0.0001" max="10000.0" precision="4" gui-text="Scale">1.0</param>
</page>
<page name="about" gui-text="About">
<label>Papercraft Unfold - by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<label>This project is a (fragile) toolchain to allow importing different models to create triangle mesh based flattenings. This extension also uses ADMesh to repair STL and to generate binary STL file. The fstl Viewer is used to have a checky view on the file. osresearch/papercraft finally flattens the file and creates the desired output.</label>
<page name="tab_about" gui-text="About">
<label appearance="header">Papercraft Unfold</label>
<label>This project is a (fragile) toolchain to allow importing different models to create triangle mesh based flattenings. This extension also uses ADMesh to repair STL and to generate a binary STL file. The fstl Viewer is used to have a checky view on the file. osresearch/papercraft finally flattens the binary STL file and creates the desired output.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/papercraftunfold</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/osresearch/papercraft</label>
<label appearance="url">https://github.com/fstl-app/fstl</label>
<label appearance="url">https://github.com/admesh/admesh</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
@ -53,4 +77,4 @@
<script>
<command location="inx" interpreter="python">papercraft_unfold.py</command>
</script>
</inkscape-extension>
</inkscape-extension>

View File

@ -72,9 +72,8 @@ admesh is sensible for moving from one dir to another
#################################################################
Module licenses
- papercraft - 26307b8 (https://github.com/osresearch/papercraft) - GPL v2 License
- model-converter - commit a8d809a (https://github.com/tforgione/model-converter-python) - MIT License
- admesh - 0.98.3 (https://github.com/admesh/admesh) - GPL License
- fstl - (https://github.com/fstl-app/fstl) - MIT License
"""
class Unfold(inkex.EffectExtension):

View File

@ -2,28 +2,55 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Paperfold</name>
<id>fablabchemnitz.de.paperfold</id>
<param name="inputfile" type="path" gui-text="Input File" filetypes="obj,off,ply,stl" gui-description="The model to unfold" mode="file">/your/beautiful/3dmodel/file</param>
<param name="printNumbers" type="bool" gui-text="Print numbers on the cut edges">true</param>
<param name="scalefactor" type="float" precision="3" min="0.0001" max="10000.0" gui-text="Manual scale factor" gui-description="default is 1.0">1.0</param>
<param name="resizetoimport" type="bool" gui-text="Resize the canvas to the imported drawing's bounding box">true</param>
<param name="extraborder" type="float" precision="3" gui-text="Add extra border around fitted canvas">0.0</param>
<param name="extraborder_units" type="optiongroup" appearance="combo" gui-text="Border offset units">
<option value="mm">mm</option>
<option value="cm">cm</option>
<option value="in">in</option>
<option value="pt">pt</option>
<option value="px">px</option>
<param name="tab" type="notebook">
<page name="tab_settings" gui-text="Paperfold for Inkscape">
<param name="inputfile" type="path" gui-text="Input File" filetypes="obj,off,ply,stl" gui-description="The model to unfold" mode="file">/your/beautiful/3dmodel/file</param>
<param name="printNumbers" type="bool" gui-text="Print numbers on the cut edges">true</param>
<param name="scalefactor" type="float" precision="3" min="0.0001" max="10000.0" gui-text="Manual scale factor" gui-description="default is 1.0">1.0</param>
<param name="resizetoimport" type="bool" gui-text="Resize the canvas to the imported drawing's bounding box">true</param>
<param name="extraborder" type="float" precision="3" gui-text="Add extra border around fitted canvas">0.0</param>
<param name="extraborder_units" type="optiongroup" appearance="combo" gui-text="Border offset units">
<option value="mm">mm</option>
<option value="cm">cm</option>
<option value="in">in</option>
<option value="pt">pt</option>
<option value="px">px</option>
</param>
<param name="color_valley_cut" type="color" appearance="colorbutton" gui-text="Color for valley cuts">255</param>
<param name="color_mountain_cut" type="color" appearance="colorbutton" gui-text="Color for mountain cuts">1968208895</param>
<param name="color_valley_perforate" type="color" appearance="colorbutton" gui-text="Color for valley perforations">3422552319</param>
<param name="color_mountain_perforate" type="color" appearance="colorbutton" gui-text="Color for mountain perforations">879076607</param>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">Paperfold for Inkscape</label>
<label>Paperfold is another flattener for triangle mesh files, heavily based on paperfoldmodels by Felix Scholz aka felixfeliz. Possible input files are STL, Wavefront OBJ, PLY and OFF.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/paperfold</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/felixfeliz/paperfoldmodels</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>000_about_fablabchemnitz.svg</image>
</page>
</param>
<param name="color_valley_cut" type="color" appearance="colorbutton" gui-text="Color for valley cuts">255</param>
<param name="color_mountain_cut" type="color" appearance="colorbutton" gui-text="Color for mountain cuts">1968208895</param>
<param name="color_valley_perforate" type="color" appearance="colorbutton" gui-text="Color for valley perforations">3422552319</param>
<param name="color_mountain_perforate" type="color" appearance="colorbutton" gui-text="Color for mountain perforations">879076607</param>
<separator/>
<label>paperfold for InkScape - by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
<label>This project is strongly based on:</label>
<label appearance="url">https://github.com/felixfeliz/paperfoldmodels</label>
<effect needs-live-preview="true">
<object-type>all</object-type>
<effects-menu>

View File

@ -519,6 +519,7 @@ def writeSVG(self, unfolding, size, printNumbers):
class Unfold(inkex.EffectExtension):
def add_arguments(self, pars):
pars.add_argument("--tab")
pars.add_argument("--inputfile")
pars.add_argument("--printNumbers", type=inkex.Boolean, default=False, help="Print numbers on the cut edges")
pars.add_argument("--scalefactor", type=float, default=1.0, help="Manual scale factor")

View File

@ -2,36 +2,62 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Primitive (Michael Fogleman)</name>
<id>fablabchemnitz.de.primitive</id>
<label appearance="header">Settings</label>
<separator/>
<param name="keeporiginal" type="bool" gui-text="Keep original image on canvas">false</param>
<param name="cliprect" type="bool" gui-text="Draw clipping rectangle">true</param>
<param name="n" type="int" min="0" max="99999" gui-text="Number of shapes">100</param>
<param name="m" appearance="combo" type="optiongroup" default="1" gui-text="Mode">
<option value="0">Combo</option>
<option value="1">Triangle</option>
<option value="2">Rectangle</option>
<option value="3">Ellipse</option>
<option value="4">Circle</option>
<option value="5">Rotated rectangle</option>
<option value="6">Beziers</option>
<option value="7">Rotated ellipse</option>
<option value="8">Polygon</option>
<param name="tab" type="notebook">
<page name="tab_general" gui-text="Primitive">
<label appearance="header">Settings</label>
<separator/>
<param name="keeporiginal" type="bool" gui-text="Keep original image on canvas">false</param>
<param name="cliprect" type="bool" gui-text="Draw clipping rectangle">true</param>
<param name="n" type="int" min="0" max="99999" gui-text="Number of shapes">100</param>
<param name="m" appearance="combo" type="optiongroup" default="1" gui-text="Mode">
<option value="0">Combo</option>
<option value="1">Triangle</option>
<option value="2">Rectangle</option>
<option value="3">Ellipse</option>
<option value="4">Circle</option>
<option value="5">Rotated rectangle</option>
<option value="6">Beziers</option>
<option value="7">Rotated ellipse</option>
<option value="8">Polygon</option>
</param>
<param name="rep" type="int" min="0" max="99999" gui-text="Extra shapes/iteration" gui-description="Sdd N extra shapes each iteration with reduced search (mostly good for beziers)">0</param>
<param name="r" type="int" min="1" max="99999" gui-text="Resize to size before processing (px)">256</param>
<param name="s" type="int" min="1" max="99999" gui-text="Output image size (px)">1024</param>
<param name="a" type="int" min="0" max="255" gui-text="Color alpha" gui-description="Use 0 to let the algorithm choose alpha for each shape">128</param>
<param name="bg_enabled" type="bool" gui-text="Use average starting background color">true</param>
<param name="bg" type="color" appearance="colorbutton" min="0" max="255" gui-text="Starting background color" gui-description="You need to disable average starting background to use this option">255</param>
<param name="j" type="int" min="0" max="32" gui-text="Number of parallel workers" gui-description="Default (0) uses all cores">0</param>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">Primitive (Michael Fogleman)</label>
<label>Primitive - Reproducing images with geometric primitives written in Go. Wrapped for Inkscape.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/primitive</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/fogleman/primitive</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<param name="rep" type="int" min="0" max="99999" gui-text="Extra shapes/iteration" gui-description="Sdd N extra shapes each iteration with reduced search (mostly good for beziers)">0</param>
<param name="r" type="int" min="1" max="99999" gui-text="Resize to size before processing (px)">256</param>
<param name="s" type="int" min="1" max="99999" gui-text="Output image size (px)">1024</param>
<param name="a" type="int" min="0" max="255" gui-text="Color alpha" gui-description="Use 0 to let the algorithm choose alpha for each shape">128</param>
<param name="bg_enabled" type="bool" gui-text="Use average starting background color">true</param>
<param name="bg" type="color" appearance="colorbutton" min="0" max="255" gui-text="Starting background color" gui-description="You need to disable average starting background to use this option">255</param>
<param name="j" type="int" min="0" max="32" gui-text="Number of parallel workers" gui-description="Default (0) uses all cores">0</param>
<spacer/>
<label appearance="header">About</label>
<separator/>
<label>Primitive - Reproducing images with geometric primitives written in Go. Wrapped for InkScape 1.X by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label appearance="url">https://github.com/fogleman/primitive</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3 for the wrapper, MIT for primitive</label>
<effect needs-live-preview="true">
<object-type>image</object-type>
<effects-menu>

View File

@ -56,6 +56,7 @@ class Primitive (inkex.EffectExtension):
return path
def add_arguments(self, pars):
pars.add_argument("--tab")
pars.add_argument("--keeporiginal", type=inkex.Boolean, default=False, help="Keep original image on canvas")
pars.add_argument("--cliprect", type=inkex.Boolean, default=True, help="Draw clipping rectangle")
pars.add_argument("--n", type=int, default=100, help="Number of shapes")

View File

@ -2,31 +2,56 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Styles To Layers</name>
<id>fablabchemnitz.de.styles_to_layers</id>
<param name="separateby" gui-text="Separate by" type="optiongroup" appearance="combo">
<option value="stroke">Stroke color</option>
<option value="stroke_width">Stroke width</option>
<option value="stroke_hairline">Stroke hairline</option>
<option value="stroke_opacity">Stroke opacity</option>
<option value="fill">Fill color</option>
<option value="fill_opacity">Fill opacity</option>
<param name="tab" type="notebook">
<page name="tab_settings" gui-text="Settings">
<param name="separateby" gui-text="Separate by" type="optiongroup" appearance="combo">
<option value="stroke">Stroke color</option>
<option value="stroke_width">Stroke width</option>
<option value="stroke_hairline">Stroke hairline</option>
<option value="stroke_opacity">Stroke opacity</option>
<option value="fill">Fill color</option>
<option value="fill_opacity">Fill opacity</option>
</param>
<param name="parsecolor" gui-text="Sort colors by" type="optiongroup" appearance="combo" gui-description="This option only applies to stroke color and fill color">
<option value="hexval">Hex value</option>
<option value="hue">Hue</option>
<option value="saturation">Saturation</option>
<option value="luminance">Luminance</option>
</param>
<param name="subdividethreshold" type="int" min="1" max="9999" gui-text="Number of sub layers" gui-description="A min/max range of the selected style type value will be calculated and you retrieve a set of layer (coarse grouping) with sub-layers (fine grouping). If you have less calculated sub layers than this threshold it will be limited automatically.">1</param>
<param name="decimals" type="int" min="0" max="10" gui-text="Decimal tolerance" gui-description="The more decimals the more distinct layers you will get. This only applies for the sub layers (threshold > 1)">1</param>
<param name="apply_transformations" type="bool" gui-text="Apply transformations (requires separate extension)" gui-description="This will call the extension 'Apply Transformations'. Helps avoiding geometry shifting">false</param>
<param name="cleanup" type="bool" gui-text="Cleanup all unused groups/layers (requires separate extension)" gui-description="This will call the extension 'Remove Empty Groups' if available">true</param>
<param name="put_unfiltered" type="bool" gui-text="Put unfiltered elements to a separate layer">false</param>
<param name="show_info" type="bool" gui-text="Show elements which have no style attributes to filter">false</param>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">Styles To Layers</label>
<label>This extension will re-layer your selected items or the whole document according to their style values (stroke or fill). The filtering applies only to style attribute of the elements. It does not filter for stroke or fill if they are set separately. You can use the separate 'Cleanup Styles' extension to migrate these separated attributes into style attribute.</label>
<label>2020 - 2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/stylestolayers</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>000_about_fablabchemnitz.svg</image>
</page>
</param>
<param name="parsecolor" gui-text="Sort colors by" type="optiongroup" appearance="combo" gui-description="This option only applies to stroke color and fill color">
<option value="hexval">Hex value</option>
<option value="hue">Hue</option>
<option value="saturation">Saturation</option>
<option value="luminance">Luminance</option>
</param>
<param name="subdividethreshold" type="int" min="1" max="9999" gui-text="Number of sub layers" gui-description="A min/max range of the selected style type value will be calculated and you retrieve a set of layer (coarse grouping) with sub-layers (fine grouping). If you have less calculated sub layers than this threshold it will be limited automatically.">1</param>
<param name="decimals" type="int" min="0" max="10" gui-text="Decimal tolerance" gui-description="The more decimals the more distinct layers you will get. This only applies for the sub layers (threshold > 1)">1</param>
<param name="apply_transformations" type="bool" gui-text="Apply transformations (requires separate extension)" gui-description="This will call the extension 'Apply Transformations'. Helps avoiding geometry shifting">false</param>
<param name="cleanup" type="bool" gui-text="Cleanup all unused groups/layers (requires separate extension)" gui-description="This will call the extension 'Remove Empty Groups' if available">true</param>
<param name="put_unfiltered" type="bool" gui-text="Put unfiltered elements to a separate layer">false</param>
<param name="show_info" type="bool" gui-text="Show elements which have no style attributes to filter">false</param>
<spacer/>
<label>This extension will re-layer your selected items or the whole document according to their style values (stroke or fill).</label>
<label>The filtering applies only to style attribute of the elements. It does not filter for stroke or fill if they are set separately. You can use the separate 'Cleanup Styles' extension to migrate these separated attributes into style attribute.</label>
<label>Tinkered by Mario Voigt / Stadtfabrikanten e.V. (2020)</label>
<label appearance="url">https://fablabchemnitz.de</label>
<effect>
<object-type>all</object-type>
<effects-menu>
@ -38,4 +63,4 @@
<script>
<command location="inx" interpreter="python">styles_to_layers.py</command>
</script>
</inkscape-extension>
</inkscape-extension>

View File

@ -40,6 +40,7 @@ class StylesToLayers(inkex.EffectExtension):
return layer
def add_arguments(self, pars):
pars.add_argument("--tab")
pars.add_argument("--apply_transformations", type=inkex.Boolean, default=False, help="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting")
pars.add_argument("--separateby", default = "stroke", help = "Separate by")
pars.add_argument("--parsecolors",default = "hexval", help = "Sort colors by")

View File

@ -3,7 +3,7 @@
<name>Filter</name>
<id>fablabchemnitz.de.vpype_filter</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Filter">
<page name="tab_settings_filter" gui-text="vpypetools Filter">
<label>Filter paths according to specified criterion. When an option is provided the corresponding criterion is applied and paths which do not respect the criterion are rejected.</label>
<param name="filter" type="bool" gui-hidden="true">true</param>
<param name="filter_tolerance" type="float" min="0.000" max="99999.000" precision="3" gui-text="tolerance (mm)" gui-description="Tolerance used to determined if a line is closed or not (default 0.050 mm)">0.050</param>
@ -14,7 +14,7 @@
<param name="filter_max_length_enabled" type="bool" gui-text="filter by max length">false</param>
<param name="filter_max_length" type="float" min="0.000" max="99999.000" precision="3" gui-text="maximum length (mm)" gui-description="Keep lines whose length isn't greater than value">0.000</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_general_settings" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -42,15 +42,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Filter</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,7 +3,7 @@
<name>vpype Free Mode</name>
<id>fablabchemnitz.de.vpype_free_mode</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Free Mode Entries">
<page name="tab_settings_freemode" gui-text="vpypetools Free Mode Entries">
<label>Enter your desired command pipes and enable/disable as much fields as you like.</label>
<param name="freemode" type="bool" gui-hidden="true">true</param>
<param name="freemode_cmd1" type="string" appearance="multiline" gui-text="Command Set 1">layout 1024x768 translate 150px 50px</param>
@ -19,7 +19,7 @@
<separator/>
<param name="freemode_show_cmd" type="bool" gui-text="Show command" gui-description="Print the full command chain. Helpful for debugging.">false</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -47,17 +47,15 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<page name="tab_reference" gui-text="CLI Reference">
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="header">General:</label>
<label xml:space="preserve"> lmove, lcopy, ldelete, show, stat</label>
<label appearance="header">Input/Output (*):</label>
<label xml:space="preserve">* works but not recommended to use inside InkScape</label>
<label xml:space="preserve"> read, write</label>
<label xml:space="preserve">* works but not recommended to use inside Inkscape</label>
<label xml:space="preserve"> read, write (we use Inkscape's current canvas for this)</label>
<label appearance="header">Layout and transforms:</label>
<label xml:space="preserve"> layout, scale, translate, skew, rotate, scaleto, snap, crop, trim, pagesize</label>
<label appearance="header">Plotting optimization:</label>
@ -68,16 +66,40 @@
<label xml:space="preserve"> begin, end, line, rect, circle, ellipse, arc, text, grid, frame, random</label>
<label appearance="header">External:</label>
<label xml:space="preserve"> vpype-text, hatched, occult, script, ...</label>
<spacer/>
<separator/>
<label appearance="header">Supported basis units:</label>
<label xml:space="preserve"> cm, mm, in, pt, pc, px | not supported: %, m, em, ex, ft</label>
<label appearance="header">Supported angle units:</label>
<label xml:space="preserve"> deg, grad, rad, turn</label>
<separator/>
<label appearance="header">vpypetools for vpype 1.6 (2021-03-10) - by Mario Voigt / Stadtfabrikanten e.V. (2021)</label>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Free Mode</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,13 +3,13 @@
<name>Line Merging (Combine Paths)</name>
<id>fablabchemnitz.de.vpype_linemerging</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Line Merging (Combine Paths)">
<page name="tab_settings_linemerge" gui-text="vpypetools Line Merging (Combine Paths)">
<label>Merge lines whose endings and starts overlap or are very close.</label>
<param name="linemerge" type="bool" gui-hidden="true">true</param>
<param name="linemerge_tolerance" type="float" min="0.000" max="99999.000" precision="3" gui-text="tolerance (mm)" gui-description="Maximum distance between two line endings that should be merged (default 0.500 mm)">0.500</param>
<param name="linemerge_no_flip" type="bool" gui-text="no flip" gui-description="Disable reversing stroke direction for merging">false</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -37,15 +37,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Line Merging (Combine Paths)</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,12 +3,12 @@
<name>Line Sorting</name>
<id>fablabchemnitz.de.vpype_linesorting</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Line Sorting">
<page name="tab_settings_linesort" gui-text="vpypetools Line Sorting">
<label>Sort lines to minimize travel distances.</label>
<param name="linesort" type="bool" gui-hidden="true">true</param>
<param name="linesort_no_flip" type="bool" gui-text="Disable flipping" gui-description="Disable reversing stroke direction for optimization '--no-flip'">false</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -36,15 +36,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Line Sorting</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,12 +3,12 @@
<name>Multipass</name>
<id>fablabchemnitz.de.vpype_multipass</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Multipass">
<page name="tab_settings_multipass" gui-text="vpypetools Multipass">
<label>Add multiple passes to each line. Each line is extended with a mirrored copy of itself, optionally multiple times. This is useful for pens that need several passes to ensure a good quality.</label>
<param name="multipass" type="bool" gui-hidden="true">true</param>
<param name="multipass_count" type="int" min="2" max="9999" gui-text="count" gui-description="How many passes for each line (default 2)">2</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -36,15 +36,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Multipass</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,13 +3,13 @@
<name>Occult Plugin (HLR)</name>
<id>fablabchemnitz.de.vpype_plugin_occult</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Occult Plugin (HLR)">
<page name="tab_settings_occult" gui-text="vpypetools Occult Plugin (HLR)">
<label>This plugin command removes lines hidden by polygons. It acts like a trimmer to receive a clean set of visible paths only. It does not remove common lines between opened paths, but for closed polygons. You need to install occult plugin for vpype. See vpypetools documentation.</label>
<param name="plugin_occult" type="bool" gui-hidden="true">true</param>
<param name="plugin_occult_tolerance" type="float" min="0.000" max="99999.000" precision="3" gui-text="tolerance (mm)" gui-description="Max distance between start and end point to consider a path closed (default 0.01 mm)">0.01</param>
<param name="plugin_occult_keepseparatelayer" gui-text="Put occulted lines to separate layer" type="bool">false</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -37,15 +37,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Occult Plugin (HLR)</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,12 +3,12 @@
<name>Relooping</name>
<id>fablabchemnitz.de.vpype_relooping</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Relooping">
<page name="tab_settings_relooping" gui-text="vpypetools Relooping">
<label>Randomize the seam location of closed paths.</label>
<param name="reloop" type="bool" gui-hidden="true">true</param>
<param name="reloop_tolerance" type="float" min="0.000" max="99999.000" precision="3" gui-text="tolerance (mm)" gui-description="Controls how close the path beginning and end must be to consider it closed (default 0.500 mm)">0.500</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -36,15 +36,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Relooping</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,11 +3,11 @@
<name>Split All (Break Paths)</name>
<id>fablabchemnitz.de.vpype_splitall</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Split All (Break Paths)">
<page name="tab_settings_splitall" gui-text="vpypetools Split All (Break Paths)">
<label>Split all paths into their constituent segments. This command may be used together with linemerge for cases such as densely-connected meshes where the latter cannot optimize well enough by itself. This command will filter out segments with identical end-points. Note that since some paths (especially curved ones) can be made of a large number of segments, this command may significantly increase the processing time of the pipeline.</label>
<param name="splitall" type="bool" gui-hidden="true">true</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -35,15 +35,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Split All (Break Paths)</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>

View File

@ -3,13 +3,13 @@
<name>Trimming</name>
<id>fablabchemnitz.de.vpype_trimming</id>
<param name="tab" type="notebook">
<page name="freemode" gui-text="Trimming">
<page name="tab_settings_trimming" gui-text="vpypetools Trimming">
<label>This command trims the geometries by the provided X and Y margins with respect to the current bounding box.</label>
<param name="trim" type="bool" gui-hidden="true">true</param>
<param name="trim_x_margin" type="float" min="0.000" max="99999.000" precision="3" gui-text="Trim margin - x direction (mm)">0.000</param>
<param name="trim_y_margin" type="float" min="0.000" max="99999.000" precision="3" gui-text="Trim margin - y direction (mm)">0.000</param>
</page>
<page name="general_settings" gui-text="General Settings">
<page name="tab_settings_general" gui-text="General Settings">
<label appearance="header">Preprocessing</label>
<param name="apply_transformations" type="bool" gui-text="Use 'Apply Transformations' extension" gui-description="Run 'Apply Transformations' extension before running vpype. Helps avoiding geometry shifting. Disabled for 'Multilayer/document'">false</param>
<spacer/>
@ -37,15 +37,34 @@
<param name="lines_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of tooling lines (px)" gui-description="Gets overwritten if 'Use style of first selected element' is enabled">1.000</param>
<param name="trajectories_stroke_width" type="float" min="0.001" max="99999.000" precision="3" gui-text="Stroke width of trajectory lines (px)">1.000</param>
</page>
<page name="about" gui-text="About">
<label appearance="header">vpypetools documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<label appearance="header">CLI reference (command list)</label>
<label appearance="url">https://vpype.readthedocs.io/en/stable/reference.html</label>
<separator/>
<label appearance="url">https://fablabchemnitz.de</label>
<label>License: GNU GPL v3</label>
</page>
<page name="tab_about" gui-text="About">
<label appearance="header">vpypetools Trimming</label>
<label>2021 / written by Mario Voigt (Stadtfabrikanten e.V. / FabLab Chemnitz)</label>
<spacer/>
<label appearance="header">Online Documentation</label>
<label appearance="url">https://y.stadtfabrikanten.org/vpypetools</label>
<spacer/>
<label appearance="header">Contributing</label>
<label appearance="url">https://gitea.fablabchemnitz.de/MarioVoigt/mightyscape-1.X</label>
<label appearance="url">mailto:mario.voigt@stadtfabrikanten.org</label>
<spacer/>
<label appearance="header">Third Party Modules</label>
<label appearance="url">https://github.com/abey79/vpype</label>
<spacer/>
<label appearance="header">MightyScape Extension Collection</label>
<label>This piece of software is part of the MightyScape for Inkscape Extension Collection and is licensed under GNU GPL v3</label>
<label appearance="url">https://y.stadtfabrikanten.org/mightyscape-overview</label>
</page>
<page name="tab_donate" gui-text="Donate">
<label appearance="header">Coffee + Pizza</label>
<label>We are the Stadtfabrikanten, running the FabLab Chemnitz since 2016. A FabLab is an open workshop that gives people access to machines and digital tools like 3D printers, laser cutters and CNC milling machines.</label>
<spacer/>
<label>You like our work and want to support us? You can donate to our non-profit organization by different ways:</label>
<label appearance="url">https://y.stadtfabrikanten.org/donate</label>
<spacer/>
<label>Thanks for using our extension and helping us!</label>
<image>../000_about_fablabchemnitz.svg</image>
</page>
</param>
<effect needs-live-preview="true">
<effects-menu>