.
This commit is contained in:
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Convert To Polylines</name>
|
||||
<id>fablabchemnitz.de.convert_to_polylines</id>
|
||||
<effect>
|
||||
<object-type>path</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="FabLab Chemnitz">
|
||||
<submenu name="Modify existing Path(s)"/>
|
||||
</submenu>
|
||||
</effects-menu>
|
||||
</effect>
|
||||
<script>
|
||||
<command location="inx" interpreter="python">convert_to_polylines.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
Extension for InkScape 1.0
|
||||
|
||||
Converts curves to polylines - a quick and dirty helper for a lot of elements. Basically the same functionality can be done with default UI featureset but with a lot more mouse clicks
|
||||
|
||||
Author: Mario Voigt / FabLab Chemnitz
|
||||
Mail: mario.voigt@stadtfabrikanten.org
|
||||
Date: 05.09.2020
|
||||
Last patch: 05.09.2020
|
||||
License: GNU GPL v3
|
||||
"""
|
||||
|
||||
import inkex
|
||||
from inkex.paths import Path
|
||||
|
||||
class ConvertToPolylines(inkex.EffectExtension):
|
||||
|
||||
#convert a path (curve) to a polyline and remove dangling/duplicate/useless overlapping handles (points)
|
||||
def convertPath(self, node):
|
||||
if node.tag == inkex.addNS('path','svg'):
|
||||
polypath = []
|
||||
i = 0
|
||||
for x, y in node.path.end_points:
|
||||
if i == 0:
|
||||
polypath.append(['M', [x,y]])
|
||||
else:
|
||||
polypath.append(['L', [x,y]])
|
||||
if i == 1 and polypath[len(polypath)-2][1] == polypath[len(polypath)-1][1]:
|
||||
polypath.pop(len(polypath)-1) #special handling for the seconds point after M command
|
||||
elif polypath[len(polypath)-2] == polypath[len(polypath)-1]: #get the previous point
|
||||
polypath.pop(len(polypath)-1)
|
||||
i += 1
|
||||
node.set('d', str(Path(polypath)))
|
||||
children = node.getchildren()
|
||||
if children is not None:
|
||||
for child in children:
|
||||
self.convertPath(child)
|
||||
|
||||
def effect(self):
|
||||
if len(self.svg.selected) == 0:
|
||||
self.convertPath(self.document.getroot())
|
||||
else:
|
||||
for id, item in self.svg.selected.items():
|
||||
self.convertPath(item)
|
||||
|
||||
if __name__ == '__main__':
|
||||
ConvertToPolylines().run()
|
Reference in New Issue
Block a user