diff --git a/README.md b/README.md
index ee9b9f1..3267321 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
-In short: A maintained extension collection for Inkscape 1.2, working on Windows and Linux. There are **237 extension folders** with **432 .inx files** inside. We also take part at https://inkscape.org/gallery/=extension/ (with single extension uploads).
+In short: A maintained extension collection for Inkscape 1.2, working on Windows and Linux. There are **239 extension folders** with **459 .inx files** inside. We also take part at https://inkscape.org/gallery/=extension/ (with single extension uploads).
# About MightyScape
diff --git a/extensions/fablabchemnitz/apply_transformations/apply_transformations.py b/extensions/fablabchemnitz/apply_transformations/apply_transformations.py
index e864953..9290d77 100644
--- a/extensions/fablabchemnitz/apply_transformations/apply_transformations.py
+++ b/extensions/fablabchemnitz/apply_transformations/apply_transformations.py
@@ -141,10 +141,7 @@ class ApplyTransformations(inkex.EffectExtension):
or not isequal(newxy2[0], newxy3[0])
or not isequal(newxy1[1], newxy2[1])
):
- inkex.utils.errormsg(
- "Warning: Shape %s (%s) is approximate only, try Object to path first for better results"
- % (element.TAG, element.get("id"))
- )
+ inkex.utils.errormsg(f"Warning: Shape {node.TAG} ({node.get('id')}) is approximate only, try Object to path first for better results")
if element.TAG == "ellipse":
element.set("rx", edgex / 2)
@@ -204,10 +201,7 @@ class ApplyTransformations(inkex.EffectExtension):
inkex.addNS('text', 'svg'),
inkex.addNS('image', 'svg')]:
element.attrib['transform'] = str(transf)
- inkex.utils.errormsg(
- "Shape %s (%s) not yet supported. Not all transforms will be applied. Try Object to path first"
- % (element.TAG, element.get("id"))
- )
+ inkex.utils.errormsg(f"Shape {node.TAG} ({node.get('id')}) not yet supported. Not all transforms will be applied. Try Object to path first")
else:
# e.g.
self.scaleStrokeWidth(element, transf)
diff --git a/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.py b/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.py
index 1f7a5af..f976612 100644
--- a/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.py
+++ b/extensions/fablabchemnitz/box_maker_generic_generator/box_maker_generic_generator.py
@@ -1540,7 +1540,8 @@ class BoxFace:
InteriorHeight = self.bottom_right_corner.y_end_joint * Height_percentage / 100.0
l_NotchLine = NotchLine((0, 0, 1), (InteriorHeight, 0, 1), math.pi/2, z_joint_size)
- StartHole = l_NotchLine.start_line_joint_y + l_NotchLine.JointSize
+ #First hole z computation. Start at notch line but add delta if Height_percentage is not 100%
+ StartHole = l_NotchLine.start_line_joint_y + l_NotchLine.JointSize + self.bottom_right_corner.y_end_joint - InteriorHeight
Spacing = 2*l_NotchLine.JointSize
DebugMsg("drawFaceWithHoles, Hole Start ="+str(StartHole)+" Spacing="+str(Spacing)+" n_holes"+str(l_NotchLine.nb_finger_joint//2)
+' n_slot='+str(n_slot)+' slot_size='+str(slot_size)+" Delta_Pos="+str(DeltaHolePosition)+'\n')
@@ -1548,7 +1549,8 @@ class BoxFace:
#For each wall, draw holes corresponding at each notch on zbox
for j in range(int(l_NotchLine.nb_finger_joint//2)):
drawHole(self.path, i*(slot_size+thickness) - DeltaHolePosition -thickness, StartHole + j*Spacing, thickness, l_NotchLine.JointSize, burn)
-
+ DebugMsg("drawHole, Slot="+str(i)+", j="+str(j)+", x="+str(i*(slot_size+thickness) - DeltaHolePosition -thickness)+" y="+str(StartHole + j*Spacing)+'\n')
+
#Close the path if asked
if ClosePath:
self.path.Close()
diff --git a/extensions/fablabchemnitz/dxf2papercraft/meta.json b/extensions/fablabchemnitz/dxf2papercraft/meta.json
index 23df6d3..12715fb 100644
--- a/extensions/fablabchemnitz/dxf2papercraft/meta.json
+++ b/extensions/fablabchemnitz/dxf2papercraft/meta.json
@@ -10,7 +10,7 @@
"license_url": "https://sourceforge.net/projects/dxf2papercraft/files/dxf2papercraft_v0.2.tgz/download",
"comment": "Written by Mario Voigt",
"source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/dxf2papercraft",
- "fork_url": "",
+ "fork_url": null,
"documentation_url": "https://stadtfabrikanten.org/display/IFM/DXF+2+Papercraft",
"inkscape_gallery_url": "https://inkscape.org/~MarioVoigt/%E2%98%85dxf2papercraft",
"contributors": [
diff --git a/extensions/fablabchemnitz/label_guides/label_guides.py b/extensions/fablabchemnitz/label_guides/label_guides.py
index 9192110..e28fa8c 100644
--- a/extensions/fablabchemnitz/label_guides/label_guides.py
+++ b/extensions/fablabchemnitz/label_guides/label_guides.py
@@ -428,7 +428,7 @@ class LabelGuides(inkex.Effect):
# Draw horizontal guides
for g in guides['h']:
- add_SVG_guide(0, self.svg.viewport_height - g, 'horz', colour, nv)
+ add_SVG_guide(0, self.svg.viewbox_height - g, 'horz', colour, nv)
def _draw_centre_guides(self, document, label_opts, colour):
"""
@@ -444,7 +444,7 @@ class LabelGuides(inkex.Effect):
for g in range(0, len(guides['h']), 2):
pos = (guides['h'][g] + guides['h'][g + 1]) / 2
- add_SVG_guide(0, self.svg.viewport_height - pos, 'horz', colour, nv)
+ add_SVG_guide(0, self.svg.viewbox_height - pos, 'horz', colour, nv)
def _draw_shapes(self, document, label_opts, inset):
"""
diff --git a/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.py b/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.py
index 3cbbecd..179e0c3 100644
--- a/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.py
+++ b/extensions/fablabchemnitz/open_in_roland_cutstudio/open_in_roland_cutstudio.py
@@ -22,14 +22,6 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
'''
-# The source code is a horrible mess. I apologize for your inconvenience, but hope that it still helps. Feel free to improve :-)
-# Keep everything python2 compatible as long as people out there are using Inkscape <= 0.92.4!
-
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import absolute_import
-
from builtins import open
from builtins import map
from builtins import str
@@ -57,6 +49,11 @@ import string
DEVNULL = open(os.devnull, 'w')
atexit.register(DEVNULL.close)
+# work around Inkscape 1.3 failing to start when it "calls itself" (Inkscape -> Extension -> Inkscape):
+# https://gitlab.com/inkscape/inkscape/-/issues/4163
+# https://gitlab.com/inkscape/extensions/-/merge_requests/534
+# TODO: Rewrite most parts of this extension using the inkex python module. This removes the need for such workarounds.
+os.environ["SELF_CALL"] = "true"
def message(s):
sys.stderr.write(s+"\n")
@@ -71,9 +68,9 @@ def which(program, raiseError, extraPaths=[], subdir=None):
"""
pathlist=os.environ["PATH"].split(os.pathsep)
if "nt" in os.name:
- pathlist.append(os.environ.get("ProgramFiles","C:\Program Files\\"))
- pathlist.append(os.environ.get("ProgramFiles(x86)","C:\Program Files (x86)\\"))
- pathlist.append("C:\Program Files\\") # needed for 64bit inkscape on 64bit Win7 machines
+ pathlist.append(os.environ.get('ProgramFiles','C:\\Program Files\\'))
+ pathlist.append(os.environ.get('ProgramFiles(x86)','C:\\Program Files (x86)\\'))
+ pathlist.append('C:\\Program Files\\') # needed for 64bit inkscape on 64bit Win7 machines
pathlist.append(os.path.dirname(os.path.dirname(os.getcwd()))) # portable application in the current directory
pathlist += extraPaths
if subdir:
@@ -286,8 +283,8 @@ def EPS2CutstudioEPS(src, dest, mirror=False):
m=m.transpose()
#debug("with {}".format(m))
pnew = numpy.matmul(m, p)
- x=float(pnew[0])
- y=float(pnew[1])
+ x=float(pnew.item(0))
+ y=float(pnew.item(1))
#debug("to: {} {}".format(x, y))
return [x, y]
def outputMoveto(x, y):
@@ -410,7 +407,7 @@ if "--selftest" in sys.argv:
if os.name=="nt":
DETACHED_PROCESS = 8 # start as "daemon"
- Popen([which("CutStudio\CutStudio.exe", True), "/import", destination], creationflags=DETACHED_PROCESS, close_fds=True)
+ Popen([which("CutStudio\\CutStudio.exe", True), "/import", destination], creationflags=DETACHED_PROCESS, close_fds=True)
else: #check if we have access to "wine"
CUTSTUDIO_C_DRIVE = str(Path.home()) + "/.wine/drive_c/"
CUTSTUDIO_PATH_LINUX_WINE = CUTSTUDIO_C_DRIVE + "Program Files (x86)/CutStudio/CutStudio.exe"
diff --git a/extensions/fablabchemnitz/pixel2svg/meta.json b/extensions/fablabchemnitz/pixel2svg/meta.json
index effffef..537edc5 100644
--- a/extensions/fablabchemnitz/pixel2svg/meta.json
+++ b/extensions/fablabchemnitz/pixel2svg/meta.json
@@ -10,7 +10,7 @@
"license_url": "https://gitlab.com/su-v/inx-pixel2svg/-/blob/master/COPYING",
"comment": "ported to Inkscape v1 manually by Mario Voigt",
"source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/pixel2svg",
- "fork_url": "ttps://gitlab.com/su-v/inx-pixel2svg",
+ "fork_url": "https://gitlab.com/su-v/inx-pixel2svg",
"documentation_url": "https://stadtfabrikanten.org/display/IFM/Pixel2SVG",
"inkscape_gallery_url": null,
"contributors": [
diff --git a/extensions/fablabchemnitz/raster_perspective/raster_perspective.py b/extensions/fablabchemnitz/raster_perspective/raster_perspective.py
index 95c223d..d1776e9 100644
--- a/extensions/fablabchemnitz/raster_perspective/raster_perspective.py
+++ b/extensions/fablabchemnitz/raster_perspective/raster_perspective.py
@@ -80,9 +80,10 @@ class RasterPerspective(inkex.Effect):
if str(envelope_node) == "image" and str(the_image_node) == "path":
envelope_node, the_image_node = self.svg.selection #switch
- if str(the_image_node) != "image" and str(envelope_node) != "path":
- inkex.utils.debug(WARN)
- return
+ if str(the_image_node) != "image" or str(envelope_node) != "path":
+ inkex.errormsg(WARN)
+ exit()
+
img_width, img_height = the_image_node.width, the_image_node.height
try:
diff --git a/extensions/fablabchemnitz/shapes/meta.json b/extensions/fablabchemnitz/shapes/meta.json
index 3b19d6e..5088b76 100644
--- a/extensions/fablabchemnitz/shapes/meta.json
+++ b/extensions/fablabchemnitz/shapes/meta.json
@@ -7,10 +7,10 @@
"original_name": "Shapes for 1.0",
"original_id": "org.inkscape.effect.shapes1",
"license": "GNU GPL v2",
- "license_url": "https://www.arakne.es/wp-content/uploads/2017/08/arakne_shapes_1.zip",
+ "license_url": "https://www.arakne.es/inkscape-shapes-nueva-version-compatible-con-inkscape-1-2",
"comment": "",
"source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/shapes",
- "fork_url": "https://www.arakne.es/en/inkscape-1-0-shapes-extension-new-version/",
+ "fork_url": "https://www.arakne.es/inkscape-shapes-nueva-version-compatible-con-inkscape-1-2",
"documentation_url": "https://stadtfabrikanten.org/display/IFM/Shapes",
"inkscape_gallery_url": null,
"contributors": [
diff --git a/extensions/fablabchemnitz/sine_and_lace/meta.json b/extensions/fablabchemnitz/sine_and_lace/meta.json
index 782d6c3..f188952 100644
--- a/extensions/fablabchemnitz/sine_and_lace/meta.json
+++ b/extensions/fablabchemnitz/sine_and_lace/meta.json
@@ -1,20 +1,20 @@
[
{
- "name": "Slic3r STL Input",
- "id": "fablabchemnitz.de.slic3r_stl_input",
- "path": "slic3r_stl_input",
+ "name": "Sine And Lace",
+ "id": "fablabchemnitz.de.sine_and_lace",
+ "path": "sine_and_lace",
"dependent_extensions": null,
- "original_name": "STL Input",
- "original_id": "com.github.jnweiger.inkscape.input.stl",
- "license": "GNU GPL v2",
- "license_url": "https://github.com/jnweiger/inkscape-input-stl/blob/master/LICENSE",
+ "original_name": "Sine and Lace",
+ "original_id": "command.experiment.sineandlace",
+ "license": "GNU GPL v3",
+ "license_url": "https://github.com/evil-mad/EggBot/blob/master/LICENSE",
"comment": "",
- "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/slic3r_stl_input",
- "fork_url": "https://github.com/jnweiger/inkscape-input-stl",
- "documentation_url": "https://stadtfabrikanten.org/display/IFM/Slic3r+STL+Input",
+ "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/sine_and_lace",
+ "fork_url": "https://github.com/evil-mad/EggBot",
+ "documentation_url": "https://stadtfabrikanten.org/display/IFM/Sine+And+Lace",
"inkscape_gallery_url": null,
"contributors": [
- "github.com/jnweiger",
+ "github.com/evil-mad",
"github.com/eridur-de"
]
}
diff --git a/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.inx b/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.inx
index 8940d0d..91eb2af 100644
--- a/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.inx
+++ b/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.inx
@@ -44,6 +44,7 @@
1
1
1.5
+ 1
true
5
diff --git a/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.py b/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.py
index 4c6dca5..536a8f5 100644
--- a/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.py
+++ b/extensions/fablabchemnitz/stroke_font_creator/render_stroke_font_text.py
@@ -150,6 +150,9 @@ class RenderStrokeFontText(Effect):
addFn('--lineSpacing', action = 'store', type = typeFloat, dest = 'lineSpacing', \
default = '1.5', help = 'Spacing between the lines')
+ addFn('--strokeWidthMult', action = 'store', type = typeFloat, dest = 'strokeWidthMult', \
+ default = '1', help = 'Stroke Width Proportion')
+
addFn('--flowInBox', action = 'store', type = typeBool, dest = 'flowInBox', \
default = False, help = 'Fit the text in the selected rectangle objects')
@@ -196,7 +199,7 @@ class RenderStrokeFontText(Effect):
extPath = os.path.dirname(os.path.abspath(__file__))
- strokeWidth = 0.02 * fontSize
+ strokeWidth = 0.02 * fontSize * strokeWidthMult
layer = getCurrentLayer(self)
renderer = InkscapeFontRenderer(layer, getViewCenter(self), strokeWidth)
diff --git a/extensions/fablabchemnitz/sudoku/meta.json b/extensions/fablabchemnitz/sudoku/meta.json
index d716ff4..730b777 100644
--- a/extensions/fablabchemnitz/sudoku/meta.json
+++ b/extensions/fablabchemnitz/sudoku/meta.json
@@ -1,20 +1,20 @@
[
{
- "name": "Sundial Declining",
- "id": "fablabchemnitz.de.sundial_declining",
- "path": "sundial_declining",
+ "name": "Sudoku",
+ "id": "fablabchemnitz.de.sudoku",
+ "path": "sudoku",
"dependent_extensions": null,
- "original_name": "Sundial",
- "original_id": "fr.electropol.tableausimple.inkscape",
- "license": "Public Domain",
- "license_url": "https://inkscape.org/de/~TomasUrban/%E2%98%85sundial-declining",
+ "original_name": "Sudoku",
+ "original_id": "org.inkscape.render.sudoku",
+ "license": "GNU GPL v3",
+ "license_url": "https://github.com/neocogent/inkscape-sudoku/blob/master/LICENCE",
"comment": "ported to Inkscape v1 by Mario Voigt",
- "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/sundial_declining",
- "fork_url": "https://inkscape.org/de/~TomasUrban/%E2%98%85sundial-declining",
- "documentation_url": "https://stadtfabrikanten.org/display/IFM/Sundial+Declining",
+ "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/sudoku",
+ "fork_url": "https://github.com/neocogent/inkscape-sudoku",
+ "documentation_url": "https://stadtfabrikanten.org/display/IFM/Sudoku",
"inkscape_gallery_url": null,
"contributors": [
- "inkscape.org/TomasUrban",
+ "github.com/neocogent",
"github.com/eridur-de"
]
}
diff --git a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/export.py b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/export.py
index 39fc79a..deb7022 100644
--- a/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/export.py
+++ b/extensions/fablabchemnitz/svg2shenzhen/svg2shenzhen/export.py
@@ -15,7 +15,7 @@ from copy import deepcopy
from inkex import bezier
from inkex.transforms import Transform
from pathlib import Path
-
+import re
homePath = str()
homePath = Path.home()
@@ -276,8 +276,8 @@ class Svg2ShenzhenExport(inkex.Effect):
def setInkscapeScaling(self):
root = self.document.getroot()
- height = float(root.get('height').replace("mm", ""))
- width = float(root.get('width').replace("mm", ""))
+ height = float(re.sub(r'[a-zA-Z]+', "", root.get('height')))
+ width = float(re.sub(r'[a-zA-Z]+', "", root.get('width')))
self.doc_width = width
self.doc_height = height
@@ -293,8 +293,8 @@ class Svg2ShenzhenExport(inkex.Effect):
def setDocumentSquare(self):
root = self.document.getroot()
- height = float(root.attrib['height'].replace("mm", ""))
- width = float(root.attrib['width'].replace("mm", ""))
+ height = float(re.sub(r'[a-zA-Z]+', "", root.attrib['height']))
+ width = float(re.sub(r'[a-zA-Z]+', "", root.attrib['width']))
if (width > height):
root.attrib['height'] = str(width) + "mm"