small enhancement in invetory sticker, added quick svg reload extension

This commit is contained in:
Mario Voigt 2021-08-05 21:49:41 +02:00
parent 7d567fd928
commit 375ccb664d
4 changed files with 49 additions and 9 deletions

View File

@ -397,15 +397,9 @@ class InventorySticker(inkex.Effect):
root.set("viewBox", "%f %f %f %f" % (0, 0, sticker_width, sticker_height)) root.set("viewBox", "%f %f %f %f" % (0, 0, sticker_width, sticker_height))
#clean the document (make it blank) to avoid printing duplicated things #clean the document (make it blank) to avoid printing duplicated things
ct = 0
for node in self.document.xpath('//*', namespaces=inkex.NSS): for node in self.document.xpath('//*', namespaces=inkex.NSS):
ct = ct + 1 if node.TAG not in ('svg', 'defs', 'namedview'):
if ct > 3: #we keep svg:svg, sodipodi:namedview and svg:defs which defines the default canvas without any content inside node.delete()
#inkex.errormsg(str(node))
try:
root.remove(node)
except Exception as e:
pass
#set the document units #set the document units
self.document.getroot().find(inkex.addNS("namedview", "sodipodi")).set("inkscape:document-units", "px") self.document.getroot().find(inkex.addNS("namedview", "sodipodi")).set("inkscape:document-units", "px")

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Reload drawing</name>
<id>fablabchemnitz.de.reload</id>
<effect needs-document="true" needs-live-preview="false">
<object-type>all</object-type>
<effects-menu>
<submenu name="FabLab Chemnitz"/>
</effects-menu>
</effect>
<script>
<command location="inx" interpreter="python">reload.py</command>
</script>
</inkscape-extension>

View File

@ -0,0 +1,32 @@
#!/usr/bin/env python3
import inkex
from lxml import etree
class Reload(inkex.EffectExtension):
def effect(self):
currentDoc = self.document_path()
if currentDoc == "":
self.msg("Your document is not saved as a permanent file yet. Cannot reload.")
exit(1)
stream = open(self.document_path(), 'r')
p = etree.XMLParser(huge_tree=True)
doc = etree.parse(stream, parser=etree.XMLParser(huge_tree=True))
stream.close()
root = self.document.getroot()
kept = [] #required. if we delete them directly without adding new defs or namedview, inkscape will crash
for node in self.document.xpath('//*', namespaces=inkex.NSS):
if node.TAG not in ('svg', 'defs', 'namedview'):
node.delete()
elif node.TAG in ('defs', 'namedview'): #except 'svg'
kept.append(node)
children = doc.getroot().getchildren()
for child in children:
root.append(child)
for k in kept:
k.delete()
if __name__ == '__main__':
Reload().run()