diff --git a/extensions/fablabchemnitz/boukwamp_code/bouwkamp_code.inx b/extensions/fablabchemnitz/boukwamp_code/bouwkamp_code.inx
deleted file mode 100644
index 40e23467..00000000
--- a/extensions/fablabchemnitz/boukwamp_code/bouwkamp_code.inx
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- Bouwkamp Code
- fablabchemnitz.de.bouwkamp
-
-
- 21, 112, 112, [50, 35, 27], [8, 19], [15, 17, 11], [6, 24], [29, 25, 9, 2], [7, 18], [16], [42], [4, 37], [33]
- true
-
-
-
-
-
-
- all
-
-
-
-
-
-
-
-
diff --git a/extensions/fablabchemnitz/boukwamp_code/bouwkamp_code.py b/extensions/fablabchemnitz/boukwamp_code/bouwkamp_code.py
deleted file mode 100644
index 8493f916..00000000
--- a/extensions/fablabchemnitz/boukwamp_code/bouwkamp_code.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/env python3
-'''
-BSD 3-Clause License
-
-Copyright (c) 2019, Pascal Wagler
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-This Inkscape extension allows you to generate squared squares and squared rectangles from
-Bouwkamp codes and table codes.
-'''
-
-import re
-import inkex
-from lxml import etree
-
-class BouwkampCode(inkex.EffectExtension):
- """
- This Inkscape extension allows you to generate squared squares and squared rectangles from
- Bouwkamp codes and table codes.
- """
-
- def add_arguments(self, pars):
- pars.add_argument('--tab')
- pars.add_argument('--bouwkamp_code', default='21, 112, 112, [50, 35, 27], [8, 19], [15, 17, 11], [6, 24], [29, 25, 9, 2], [7, 18], [16], [42], [4, 37], [33]', help='The Bouwkamp code.'
- )
- pars.add_argument('--wrap_in_group', type=inkex.Boolean, default=True, help='Should the generated items be wrapped inside a group.'
- )
-
- def effect(self):
- # compute center of the view
- center = self.svg.namedview.center
-
- # create the group that holds all the elements
- container = self.svg.get_current_layer()
- if self.options.wrap_in_group:
- group_attributes = {
- inkex.addNS('label', 'inkscape'): 'BouwkampSquares',
- 'transform': 'translate' + str(center)
- }
- group = etree.SubElement(self.svg.get_current_layer(), 'g', group_attributes)
- container = group
-
- # parse the bouwkamp code string as a list
- bouwkamp_code = self.parse_bouwkamp_code_from_string(self.options.bouwkamp_code)
-
- # show an error message and exit if the bouwkamp code is invalid
- try:
- self.exception_on_invalid_bouwkamp_code(bouwkamp_code)
- except ValueError as exception:
- inkex.errormsg(str(exception))
- return
-
- # draw the bouwkamp code
- self.draw_bouwkamp_code(container, center, bouwkamp_code)
-
- @staticmethod
- def exception_on_invalid_bouwkamp_code(bouwkamp_code):
- """
- Raises a ValueError if the passed list is not a valid Bouwkamp code.
- """
-
- if not bouwkamp_code: #len(bouwkamp_code) == 0
- raise ValueError('Error: Invalid Bouwkamp code.\n\nThe Bouwkamp code is emtpy. ' +
- 'Please specify a valid Bouwkamp code.')
-
- if len(bouwkamp_code) - 3 != bouwkamp_code[0]:
- raise ValueError('Error: Invalid Bouwkamp code.\n\nThe Bouwkamp code has the wrong ' +
- 'length. The first number needs to specify how many squares ' +
- 'should be drawn.')
-
- @staticmethod
- def parse_bouwkamp_code_from_string(bouwkamp_code_string):
- """
- Converts a Bouwkamp code string into a list of integers. Any parentheses, commas and
- spaces are stripped. Extended Bouwkamp codes are not supported.
- """
-
- # replace every character (except numbers) with a space
- text = re.sub('[^0-9]', ' ', bouwkamp_code_string)
- # collapse all spaces to just one space
- text = re.sub(' {1,}', ' ', text).strip()
- # split the string into small strings and convert them to integers
- numbers = [int(x) for x in text.split(" ")]
-
- return numbers
-
- def draw_bouwkamp_code(self, parent, center, bouwkamp_code):
- """
- Draws the passed Bouwkamp code (a list of integers) with rectangles.
- """
-
- order = bouwkamp_code[0]
- width = bouwkamp_code[1]
- # height = bouwkamp_code[2]
- code = bouwkamp_code[3:] # cut the first three elements away
-
- i = 0
- helper = [0] * 900
-
- for rectangle in range(0, order):
- i = 0
- for j in range(1, width):
- if helper[j] < helper[i]:
- i = j
-
- position = (i, helper[i])
- dimension = (code[rectangle], code[rectangle])
- self.draw_rectangle(position, dimension, parent, center)
-
- for j in range(0, code[rectangle]):
- helper[i+j] += code[rectangle]
-
- def draw_rectangle(self, position, dimension, parent, center):
- rectangle_style = {
- 'opacity': '1',
- 'stroke': '#000000',
- 'stroke-width': str(self.svg.unittouu('2px')),
- 'fill': '#FFFFFF'
- }
-
- transform = ""
- if not self.options.wrap_in_group:
- transform = 'translate' + str(center)
-
- rectangle_attributes = {
- 'transform': transform,
- 'style': str(inkex.Style(rectangle_style)),
- inkex.addNS('label', 'inkscape'): "Rectangle "+str(dimension[0]),
- 'x': str(position[0]),
- 'y': str(position[1]),
- 'width': str(dimension[0]),
- 'height': str(dimension[1])
- }
-
- etree.SubElement(parent, inkex.addNS('rect', 'svg'), rectangle_attributes)
-
-if __name__ == '__main__':
- BouwkampCode().run()
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/boukwamp_code/meta.json b/extensions/fablabchemnitz/boukwamp_code/meta.json
deleted file mode 100644
index 264fab2f..00000000
--- a/extensions/fablabchemnitz/boukwamp_code/meta.json
+++ /dev/null
@@ -1,20 +0,0 @@
-[
- {
- "name": "Bouwkamp Code",
- "id": "fablabchemnitz.de.bouwkamp_code",
- "path": "boukamp_code",
- "original_name": "Bouwkamp code",
- "original_id": "de.pascalwagler.inkscape.bouwkamp",
- "license": "BSD 3-Clause License",
- "license_url": "https://github.com/Wandmalfarbe/bouwkamp-code-generator/blob/master/LICENSE",
- "comment": "ported to Inkscape v1 by Mario Voigt",
- "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/boukamp_code",
- "fork_url": "https://github.com/Wandmalfarbe/bouwkamp-code-generator",
- "documentation_url": "https://stadtfabrikanten.org/display/IFM/Bouwkamp+Code",
- "inkscape_gallery_url": null,
- "main_authors": [
- "github.com/Wandmalfarbe",
- "github.com/vmario89"
- ]
- }
-]
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/estucheria/meta.json b/extensions/fablabchemnitz/estucheria/meta.json
new file mode 100644
index 00000000..fe9f83bb
--- /dev/null
+++ b/extensions/fablabchemnitz/estucheria/meta.json
@@ -0,0 +1,20 @@
+[
+ {
+ "name": "Estucheria - ",
+ "id": "fablabchemnitz.de.estucheria.",
+ "path": "estucheria",
+ "original_name": "",
+ "original_id": "org.inkscape.estucheria.",
+ "license": "GNU GPL v3",
+ "license_url": "https://gitlab.com/aljurado/packaging-inkscape-extensions/-/blob/master/LICENSE",
+ "comment": "",
+ "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/estucheria",
+ "fork_url": "https://gitlab.com/aljurado/packaging-inkscape-extensions",
+ "documentation_url": "https://stadtfabrikanten.org/display/IFM/Estucheria",
+ "inkscape_gallery_url": null,
+ "main_authors": [
+ "gitlab.com/aljurado",
+ "github.com/vmario89"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/gears/meta.json b/extensions/fablabchemnitz/gears/meta.json
new file mode 100644
index 00000000..172dad2a
--- /dev/null
+++ b/extensions/fablabchemnitz/gears/meta.json
@@ -0,0 +1,23 @@
+[
+ {
+ "name": "Gears",
+ "id": "fablabchemnitz.de.gears",
+ "path": "gears",
+ "original_name": "Gear-dev",
+ "original_id": "com.gihub.jnweiger.inkscape-gears-dev",
+ "license": "GNU GPL v2",
+ "license_url": "https://github.com/ssentinel/inkscape-gears-dev/blob/master/gears-dev.py",
+ "comment": "fork of https://github.com/jnweiger/inkscape-gears-dev",
+ "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/gears",
+ "fork_url": "https://github.com/ssentinel/inkscape-gears-dev",
+ "documentation_url": "https://stadtfabrikanten.org/display/IFM/Gears",
+ "inkscape_gallery_url": null,
+ "main_authors": [
+ "github.com/ssentinel",
+ "github.com/Neon22",
+ "github.com/jnweiger",
+ "github.com/eggsactly",
+ "github.com/vmario89"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/gears2/meta.json b/extensions/fablabchemnitz/gears2/meta.json
new file mode 100644
index 00000000..7d006aa4
--- /dev/null
+++ b/extensions/fablabchemnitz/gears2/meta.json
@@ -0,0 +1,20 @@
+[
+ {
+ "name": "Gears2",
+ "id": "fablabchemnitz.de.gears2",
+ "path": "gears2",
+ "original_name": "Gears2",
+ "original_id": "com.attoparsec.filter.gears",
+ "license": "GNU GPL v2",
+ "license_url": "https://gitlab.com/inkscape/extensions/-/blob/master/render_gears.py",
+ "comment": "",
+ "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/gears2",
+ "fork_url": "https://github.com/attoparsec/inkscape-extensions",
+ "documentation_url": "https://stadtfabrikanten.org/display/IFM/Gears2",
+ "inkscape_gallery_url": null,
+ "main_authors": [
+ "github.com/attoparsec",
+ "github.com/vmario89"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/globe/globe.inx b/extensions/fablabchemnitz/globe/globe.inx
deleted file mode 100644
index c2284069..00000000
--- a/extensions/fablabchemnitz/globe/globe.inx
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- Globe
- fablabchemnitz.de.globe
- 8
- 5
- 0
- 0
- false
-
- path
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/globe/globe.py b/extensions/fablabchemnitz/globe/globe.py
deleted file mode 100644
index f219570f..00000000
--- a/extensions/fablabchemnitz/globe/globe.py
+++ /dev/null
@@ -1,266 +0,0 @@
-#!/usr/bin/env python3
-'''
-Globe rendering extension for Inkscape
-Copyright (C) 2009 Gerrit Karius
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-About the Globe rendering extension:
-
-
-
-'''
-from __future__ import division
-import inkex
-from math import *
-from lxml import etree
-
-#TODO: put the globe in the center of the view canvas
-
-def draw_ellipse_rotated(cx,cy,rx,ry, width, fill, name, parent, rotationAngle):
- a = cos(rotationAngle)
- b = sin(rotationAngle)
- c = -sin(rotationAngle)
- d = cos(rotationAngle)
- e = -(a*cx + c*cy) + cx
- f = -(b*cx + d*cy) + cy
- style = { 'stroke': '#000000', 'stroke-width':str(width), 'fill':fill}
- if rx == 0:
- x1 = cx
- x2 = cx
- y1 = cy - ry
- y2 = cy + ry
- circle_attribs = {'style':str(inkex.Style(style)),
- inkex.addNS('label','inkscape'):name,
- 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2),
- 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'}
- elif ry == 0:
- x1 = cx - rx
- x2 = cx + rx
- y1 = cy
- y2 = cy
- circle_attribs = {'style':str(inkex.Style(style)),
- inkex.addNS('label','inkscape'):name,
- 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2),
- 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'}
- else:
- circle_attribs = {'style':str(inkex.Style(style)),
- inkex.addNS('label','inkscape'):name,
- inkex.addNS('cx','sodipodi'):str(cx),
- inkex.addNS('cy','sodipodi'):str(cy),
- inkex.addNS('rx','sodipodi'):str(rx),
- inkex.addNS('ry','sodipodi'):str(ry),
- inkex.addNS('type','sodipodi'):'arc',
- 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'}
- etree.SubElement(parent, inkex.addNS('path','svg'), circle_attribs)
-
-def draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, name, parent, rotationAngle, segmentAngleStart, segmentAngleEnd):
- a = cos(rotationAngle)
- b = sin(rotationAngle)
- c = -sin(rotationAngle)
- d = cos(rotationAngle)
- e = -(a*cx + c*cy) + cx
- f = -(b*cx + d*cy) + cy
- style = { 'stroke': '#000000', 'stroke-width':str(width), 'fill':fill}
- if rx == 0:
- x1 = cx
- x2 = cx
- y1 = cy - ry
- y2 = cy + ry
- circle_attribs = {'style':str(inkex.Style(style)),
- inkex.addNS('label','inkscape'):name,
- 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2),
- 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'}
- elif ry == 0:
- x1 = cx - rx
- x2 = cx + rx
- y1 = cy
- y2 = cy
- circle_attribs = {'style':str(inkex.Style(style)),
- inkex.addNS('label','inkscape'):name,
- 'd':'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2),
- 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'}
- else:
- circle_attribs = {'style':str(inkex.Style(style)),
- inkex.addNS('label','inkscape'):name,
- inkex.addNS('cx','sodipodi'):str(cx),
- inkex.addNS('cy','sodipodi'):str(cy),
- inkex.addNS('rx','sodipodi'):str(rx),
- inkex.addNS('ry','sodipodi'):str(ry),
- inkex.addNS('start','sodipodi'):str(segmentAngleStart),
- inkex.addNS('end','sodipodi'):str(segmentAngleEnd),
- inkex.addNS('open','sodipodi'):'true',
- inkex.addNS('type','sodipodi'):'arc',
- 'transform':'matrix('+str(a)+','+str(b)+','+str(c)+','+str(d)+','+str(e)+','+str(f)+')'}
- etree.SubElement(parent, inkex.addNS('path','svg'), circle_attribs)
-
-
-class Globe(inkex.EffectExtension):
-
- def add_arguments(self, pars):
- pars.add_argument("--longitudeLineCount", type=int, default=15, help="Number of longitude lines")
- pars.add_argument("--latitudeLineCount", type=int, default=15, help="Number of latitude lines")
- pars.add_argument("--rotationXDegrees", type=float, default=45, help="Rotation around X axis (degrees)")
- pars.add_argument("--rotationYDegrees", type=float, default=-45, help="Rotation around Y axis (degrees)")
- pars.add_argument("--isSeeThrough", type=inkex.Boolean, default=False, help="Is the globe see-through")
-
- def effect(self):
-
- name = 'globe'
-
- # globe fill and stroke style
- fill = 'none'
- width = 1
-
- #input parameters - globe center and radius
- cyb = 500.0
- cxb = 500.0
- rb = 100.0
-
- longitudeRotationAngleDegrees = float(self.options.rotationYDegrees)
- tiltForwardAngleDegrees = float(self.options.rotationXDegrees)
-
- # inputs range fixing
- # tiltForwardAngle is adjusted to vary from 0 <= angle < pi
- if tiltForwardAngleDegrees >= 180.0:
- tiltForwardAngleDegrees -= 180.0
- elif tiltForwardAngleDegrees < 180.0:
- tiltForwardAngleDegrees += 180.0
-
- if self.options.longitudeLineCount > 0:
- angleSpacingLongitudeLinesDegrees = 180.0 / float(self.options.longitudeLineCount);
- # longitudeAngle is wrapped to vary from 0 <= angle < angleSpacingLongitudeLines.
- while longitudeRotationAngleDegrees < 0:
- longitudeRotationAngleDegrees += angleSpacingLongitudeLinesDegrees
- while longitudeRotationAngleDegrees >= angleSpacingLongitudeLinesDegrees:
- longitudeRotationAngleDegrees -= angleSpacingLongitudeLinesDegrees
-
- # units conversion from degrees to radians
- tiltForwardAngle = tiltForwardAngleDegrees * pi / 180.0;
- initialAngleLongitudeLines = longitudeRotationAngleDegrees * pi / 180.0
-
- # derived parameters
- rxb = rb
- ryb = rb
-
- #
- # start drawing
- #
-
- # create the group to put the globe in
- group_attribs = {inkex.addNS('label','inkscape'):name}
- parent = etree.SubElement(self.svg.get_current_layer(), 'g', group_attribs)
-
- # draw the outside border
- draw_ellipse_rotated(cxb,cyb,rxb,ryb, width, fill, 'border', parent, 0)
-
- # draw the longitude lines
- # elipse #0 corresponds to ring on the front (visible only as a straight vertical line)
- # elipse #n-1 corresponds to the ring that is almost 180 degrees away
- # elipse #n/2 corresponds to ring around the side (overlaps with globe boundary) (only if n is even)
- if self.options.longitudeLineCount > 0:
- angleSpacingLongitudeLines = pi / float(self.options.longitudeLineCount);
- yOfPole = ryb * cos(tiltForwardAngle)
- for i in range(0, self.options.longitudeLineCount):
- lineName = 'longitude' + str(i)
- # longitudeAngle is always from 0 to pi.
- # rotation angle is always from 0 to pi.
- # rx is never negative.
- longitudeAngle = ((float(i)) * angleSpacingLongitudeLines) + initialAngleLongitudeLines
- if tiltForwardAngleDegrees == 0 or tiltForwardAngleDegrees == 180.0:
- if longitudeAngle < pi/2:
- rotationAngle = 0.0
- else:
- rotationAngle = pi
- rx = rxb * sin(longitudeAngle)
-
- arcStart = pi/2
- arcEnd = -pi/2
-
- else:
- rotationAngle = acos(cos(longitudeAngle) / sqrt(1 - pow(sin(longitudeAngle)*cos(tiltForwardAngle), 2)))
- rx = rxb * sin(longitudeAngle) * cos(tiltForwardAngle)
- if rx < 0:
- rx = -rx
- arcStart = -pi/2
- arcEnd = pi/2
- else:
- arcStart = pi/2
- arcEnd = -pi/2
- ry = ryb
- cx = cxb
- cy = cyb
- if self.options.isSeeThrough:
- draw_ellipse_rotated(cx,cy,rx,ry, width, fill, lineName, parent, rotationAngle)
- else:
- draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, lineName, parent, rotationAngle, arcStart, arcEnd)
-
- # draw the latitude lines
- # elipse #0 corresponds to ring closest to north pole.
- # elipse #n-1 corresponds to ring closest to south pole.
- # equator is ring #(n-1)/2 (only if n is odd).
- if self.options.latitudeLineCount > 0:
- angleSpacingLatitudeLines = pi / (1.0 + float(self.options.latitudeLineCount));
- yOfPole = ryb * cos(tiltForwardAngle)
- for i in range(0, self.options.latitudeLineCount):
- lineName = 'latitude' + str(i)
- # angleOfCurrentLatitudeLine is always from 0 to pi.
- # tiltForwardAngle is always from 0 to pi.
- # ry is never negative.
- angleOfCurrentLatitudeLine = float(i + 1) * angleSpacingLatitudeLines
- rx = rxb * sin(angleOfCurrentLatitudeLine)
- ry = rx * sin(tiltForwardAngle)
- cx = cxb
- cy = cyb - yOfPole*cos(angleOfCurrentLatitudeLine)
- if self.options.isSeeThrough:
- #inkex.utils.debug(cx)
- #inkex.utils.debug(cy)
- #inkex.utils.debug(rx)
- #inkex.utils.debug(ry)
- #inkex.utils.debug(width)
- #inkex.utils.debug(fill)
- #inkex.utils.debug(lineName)
- #inkex.utils.debug(parent)
- draw_ellipse_rotated(cx,cy,rx,ry, width, fill, lineName, parent, 0)
- else:
- if tiltForwardAngle > pi/2:
- # tilt away from viewaer
- if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) > rxb:
- # elipse is not visible
- pass
- else:
- if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) < -rxb:
- # elipse is all visible
- segmentAngle = pi
- else:
- # elipse is only partially visible
- segmentAngle = acos(max(-1,min(1, -tan(tiltForwardAngle) / tan(angleOfCurrentLatitudeLine))))
- draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, lineName, parent, 0, pi/2+segmentAngle, pi/2-segmentAngle)
- else:
- # tilt towards viewer
- if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) < -rxb:
- # elipse is not visible
- pass
- else:
- if rxb * cos(angleOfCurrentLatitudeLine) / cos(tiltForwardAngle) > rxb:
- # elipse is all visible
- segmentAngle = pi
- else:
- # elipse is only partially visible
- segmentAngle = acos(max(-1,min(1, tan(tiltForwardAngle) / tan(angleOfCurrentLatitudeLine))))
- draw_ellipse_segment_rotated(cx,cy,rx,ry, width, fill, lineName, parent, 0, -pi/2+segmentAngle, -pi/2-segmentAngle)
-if __name__ == '__main__':
- Globe().run()
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/globe/meta.json b/extensions/fablabchemnitz/globe/meta.json
deleted file mode 100644
index 2e2eeb60..00000000
--- a/extensions/fablabchemnitz/globe/meta.json
+++ /dev/null
@@ -1,20 +0,0 @@
-[
- {
- "name": "Globe",
- "id": "fablabchemnitz.de.globe",
- "path": "globe",
- "original_name": "Globe",
- "original_id": "org.ekips.filter.globe",
- "license": "GNU GPL v2",
- "license_url": "https://github.com/hoday/InkscapeRenderGlobeExtension/blob/master/globe.py",
- "comment": "Render → Wireframe Sphere",
- "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/globe",
- "fork_url": "https://github.com/hoday/InkscapeRenderGlobeExtension",
- "documentation_url": "https://stadtfabrikanten.org/display/IFM/Globe",
- "inkscape_gallery_url": null,
- "main_authors": [
- "github.com/hoday",
- "github.com/vmario89"
- ]
- }
-]
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/guilloche_creations/guilloche_contour.inx b/extensions/fablabchemnitz/guilloche_creations/guilloche_contour.inx
index fbaf6316..a3ed82bf 100644
--- a/extensions/fablabchemnitz/guilloche_creations/guilloche_contour.inx
+++ b/extensions/fablabchemnitz/guilloche_creations/guilloche_contour.inx
@@ -1,7 +1,7 @@
Guilloche Contour
- fablabchemnitz.de.guilloche_contour
+ fablabchemnitz.de.guilloche_creations.guilloche_contour
diff --git a/extensions/fablabchemnitz/guilloche_creations/guilloche_pattern.inx b/extensions/fablabchemnitz/guilloche_creations/guilloche_pattern.inx
index c9a6a744..1bc959fb 100644
--- a/extensions/fablabchemnitz/guilloche_creations/guilloche_pattern.inx
+++ b/extensions/fablabchemnitz/guilloche_creations/guilloche_pattern.inx
@@ -1,7 +1,7 @@
Guilloche Pattern
- fablabchemnitz.de.guilloche_pattern
+ fablabchemnitz.de.guilloche_creations.guilloche_pattern
diff --git a/extensions/fablabchemnitz/guilloche_creations/meta.json b/extensions/fablabchemnitz/guilloche_creations/meta.json
new file mode 100644
index 00000000..38dbaee4
--- /dev/null
+++ b/extensions/fablabchemnitz/guilloche_creations/meta.json
@@ -0,0 +1,21 @@
+[
+ {
+ "name": "Guilloche ",
+ "id": "fablabchemnitz.de.guilloche_creations.guilloche_contour",
+ "path": "guilloche_contour",
+ "original_name": "Guilloche ",
+ "original_id": "org.inkscape.effect.guilloche_",
+ "license": "GNU GPL v3",
+ "license_url": "https://inkscape.org/de/~DrWiggly/%E2%98%85guillocheextensions-for-v1x",
+ "comment": "fork of https://inkscape.org/de/~fluent_user/%E2%98%85guilloche-pattern-extension",
+ "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/guilloche_creations",
+ "fork_url": "https://inkscape.org/de/~DrWiggly/%E2%98%85guillocheextensions-for-v1x",
+ "documentation_url": "https://stadtfabrikanten.org/display/IFM/Guilloche+Pattern",
+ "inkscape_gallery_url": null,
+ "main_authors": [
+ "inkscape.org/fluent_user",
+ "inkscape.org/DrWiggly",
+ "github.com/vmario89"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.inx b/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.inx
deleted file mode 100644
index 98030873..00000000
--- a/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.inx
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
- Hershey Text Alternative
- fablabchemnitz.de.hershey_text_alternative
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HersheySans1
- false
-
-
-
-
-
-
-
-
-
-The Quick Brown Fox Jumps Over a Lazy Dog
-
-
-
-
-
-
-
-
-
- all
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.py b/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.py
deleted file mode 100644
index f3229e2c..00000000
--- a/extensions/fablabchemnitz/hershey_text_alternative/hershey_text_alternative.py
+++ /dev/null
@@ -1,1878 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (C) 2019 - Windell H. Oskay, www.evilmadscientist.com
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-
-'''
-Hershey Text 3.0.3, 2019-11-11
-
-Copyright 2019, Windell H. Oskay, www.evilmadscientist.com
-
-Major revisions in Hershey Text 3.0:
-
-1. Migrate font format to use SVG fonts.
- - SVG fonts support unicode, meaning that we can use a full range of
- characters. We are no longer limited to the ASCII range that the
- historical Hershey font formats used.
- - Arbitrary curves are supported within glyphs; we are no longer limited to
- the straight line segments used in the historical Hershey format.
- - The set of fonts can now be expanded.
-
-2. Add a mechanism for adding your own SVG fonts, either within the
- folder containing the default fonts, or from an external file or directory.
- This is particularly important for installations where one does not
- have access to edit the contents of the Inkscape extensions directory.
-
-3. Support font mapping: If a given font face is used for a given block of
- text, check first to see if a matching SVG font is present. If not,
- substitute with the default (selected) stroke font from the list of
- included fonts.
-
-4. Instead of entering text (one line at a time) in the extension,
- this script now converts text (either all text, or all selected text)
- in the document, replacing it in place. While not every possible
- method of formatting text is supported, many are.
-
-'''
-
-import os
-import math
-from copy import deepcopy
-import inkex
-from inkex import Transform, Style, units
-from inkex.elements import load_svg, Group, TextElement, FlowPara, FlowSpan, Tspan, FlowRoot, Rectangle, Use, PathElement, Defs
-
-class HersheyTextAlternative(inkex.EffectExtension):
-
- def add_arguments(self, pars):
- pars.add_argument( "--tab", dest="mode", default="render", help="The active tab or mode when Apply was pressed" )
- pars.add_argument( "--fontface", dest="fontface", default="HersheySans1", help="The selected font face when Apply was pressed" )
- pars.add_argument( "--otherfont", dest="otherfont", default="", help="Optional other font name or path to use" )
- pars.add_argument( "--preserve", type=inkex.Boolean, dest="preserve_text", default=False, help="Preserve original text")
- pars.add_argument("--action", dest="util_mode", default="sample", help="The utility option selected")
- pars.add_argument("--text", dest="sample_text", default="sample", help="Text to use for font table")
-
- PX_PER_INCH = 96.0
-
- help_text = '''====== Hershey Text Help ======
-
-The Hershey Text extension is designed to replace text in your document (either
-selected text or all text) with specialized "stroke" or "engraving" fonts
-designed for plotters.
-
-Whereas regular "outline" fonts (e.g., TrueType) work by filling in the region
-inside an invisible outline, stroke fonts are composed only of individual lines
-or strokes with finite width; much like human handwriting when using a physical
-pen.
-
-Stroke fonts are most often used for creating text-like paths that computer
-controlled drawing and cutting machines (from pen plotters to CNC routers) can
-efficiently follow.
-
-A full user guide for Hershey Text is available to download from
- http://wiki.evilmadscientist.com/hershey
-
-
- ==== Basic operation ====
-
-To use Hershey Text, start with a document that contains text objects. Select
-the "Render" tab of Hershey Text, and choose a font face from the pop-up menu.
-
-When you click Apply, it will render all text elements on your page with the
-selected stroke-based typeface. If you would like to convert only certain text
-elements, click Apply with just those elements selected.
-
-If the "Preserve original text" box is checked, then the original text elements
-on the page will be preserved even when you click Apply. If it is unchecked,
-then the original font elements will be removed once rendered.
-
-You can generate a list of available SVG fonts or a list of all glyphs available
-in a given font by using the tools available on the "Utilities" tab.
-
-
- ==== How Hershey Text works ====
-
-Hershey Text works by performing font substitution, starting with the text in
-your document and replacing it with paths generated from the characters in the
-selected SVG font.
-
-Hershey Text uses fonts in the SVG font format. While SVG fonts are one of the
-few types that support stroke-based characters, it is important to note that
-converting an outline font to SVG format does not convert it to a stroke based
-font. Indeed, most SVG fonts are actually outline fonts.
-
-This extension *does not* convert outline fonts into stroke fonts, nor does it
-convert other fonts into SVG format. Its sole function is to replace the text
-in your document with paths from the selected SVG font.
-
-
- ==== Using an external SVG font ====
-
-To use an external SVG font -- one not included with the distribution -- select
-"Other" for the name of the font in the pop-up menu on the "Render" tab. Then,
-do one of the following:
-
-(1) Add your SVG font file (perhaps "example.svg") to the "svg_fonts" directory
-within your Inkscape extensions directory, and enter the name of the font
-("example") in the "Other SVG font name or path" box on the "Render" tab.
-
-or
-
-(2) Place your SVG font file anywhere on your computer, and enter the full path
-to the file in the "Other SVG font name or path" box on the "Render" tab.
-A full path might, for example, look like:
- /Users/Robin/Documents/AxiDraw/fonts/path_handwriting.svg
-
-
- ==== Using SVG fonts: Advanced methods ====
-
-In addition to using a single SVG font for substitution, you can also use
-font name mapping to automatically use particular stroke fonts in place of
-specific font faces, to support various automated workflows and to support
-the rapid use of multiple stroke font faces within the same document.
-
-Several SVG fonts are included with this distribution, including both
-single-stroke and multi-stroke fonts. These fonts are included within the
-"svg_fonts" directory within your Inkscape extensions directory.
-
-You can select the font that you would like to use from the pop-up menu on the
-"Render" Tab. You can also make use of your own SVG fonts.
-
-Order of preference for SVG fonts:
-
-(1) If there is an SVG font with name matching that of the font for a given
-piece of text, that font will be used. For example, if the original text is in
-font "FancyScript" and there is a file in svg_fonts with name FancyScript.svg,
-then FancyScript.svg will be used to render the text.
-
-(2) Otherwise (if there is no SVG font available matching the name of the font
-for a given block of text), the face selected from the "Font face" pop-up menu
-will be used as the default font when rendering text with Hershey Text.
-
-(3) You can also enter text in the "Name/Path" box, which can represent one of
-the following: (i) a font name (for a font located in the svg_fonts directory),
-(ii) the path to a font file elsewhere on your computer, or (iii) the path to a
-directory containing (one or more) font files.
-
-(3a) Using a font name:
-If you move a custom SVG font file into your svg_fonts directory, then you can
-enter the name of the SVG font in the "Name/Path" text box and select "Other"
-from the pop-up menu. Then, the named font will be used as the default.
-
-(3b) Using a file path:
-If you enter the path to an SVG font file in the "Name/Path" text box and
-select "Other" from the pop-up menu. Then, that font will be used as the
-default. All SVG fonts located in the same directory as that font file will
-also be available for name-based font substitution. If there are multiple
-font-name matches, files in an external directory take precedence over ones in
-the svg_fonts directory.
-
-(3c) Using a directory path:
-If you enter the path to a directory containing SVG font files in the
-"Name/Path" text box, then all SVG font files files in that directory will be
-available for name-based font substitution. If there are multiple font-name
-matches, files in an external directory take precedence over ones in the
-svg_fonts directory.
-
-
-
-Tips about using these methods with your own custom fonts:
-
-(A) These methods can be used to render different text elements with different
-SVG font faces. You can even rename a font -- either your own custom one or one
-of the bundled ones -- to match the name of a font that you're using. For
-example, if you rename a script font you name a font to "Helvetica.svg",
-then all text in Helvetica will be replaced with that SVG font.
-
-(B) Using a directory path (3c) is a particularly helpful method if you do
-not have access to modify the svg_fonts directory.
-
-
-
- ==== Limitations ====
-
-This extension renders text into non-editable paths, generated from the
-character geometry of SVG fonts. Once you have rendered the text, the resulting
-paths can be edited with path editing tools, but not text editing tools.
-
-Since this extension works by a process of font substitution, text spanning a
-single line will generally stay that way, whereas text flowed in a box (that
-may span multiple lines) will be re-flowed from scratch. Style information such
-as text size and line spacing can be lost in some cases.
-
-We recommend that you use the live preview option to achieve best results with
-this extension.
-
-
-(c) 2019 Windell H. Oskay
-Evil Mad Scientist Laboratories
-'''
-
- def getLengthInches(self, name):
- """
- Get the