ease up and more stable reload drawing
This commit is contained in:
parent
d75ec118c2
commit
cdc3408a4b
@ -5,28 +5,45 @@ from lxml import etree
|
||||
|
||||
class Reload(inkex.EffectExtension):
|
||||
|
||||
'''
|
||||
This extension gets the current doc path and reads it as doc
|
||||
Then we clear the recent document from all items except basic stuff like root (svg:svg), defs and namedview
|
||||
finally we overwrite all attributes from svg:svg, defs and namedview to the recent
|
||||
'''
|
||||
|
||||
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)
|
||||
|
||||
originalRoot = self.document.getroot()
|
||||
originalNamedview = self.svg.namedview
|
||||
originalDefs = originalRoot.find("{http://www.w3.org/2000/svg}defs")
|
||||
originalRoot.clear() #drop all children and attributes from root
|
||||
|
||||
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)
|
||||
|
||||
copyRoot = doc.getroot()
|
||||
copyNamedview = copyRoot.find(inkex.addNS('namedview', 'sodipodi'))
|
||||
copyDefs = copyRoot.find("{http://www.w3.org/2000/svg}defs")
|
||||
for child in copyRoot.getchildren():
|
||||
originalRoot.append(child)
|
||||
|
||||
children = doc.getroot().getchildren()
|
||||
for child in children:
|
||||
root.append(child)
|
||||
for k in kept:
|
||||
k.delete()
|
||||
|
||||
#update all attributes in originalSVG
|
||||
for copyAttrib in copyRoot.attrib:
|
||||
originalRoot.attrib[copyAttrib] = copyRoot.attrib[copyAttrib]
|
||||
|
||||
#update all attributes in originalNamedview
|
||||
for copyAttrib in copyNamedview.attrib:
|
||||
originalNamedview.attrib[copyAttrib] = copyNamedview.attrib[copyAttrib]
|
||||
|
||||
#update all attributes in originalDefs
|
||||
for copyAttrib in copyDefs.attrib:
|
||||
originalDefs.attrib[copyAttrib] = copyDefs.attrib[copyAttrib]
|
||||
|
||||
if __name__ == '__main__':
|
||||
Reload().run()
|
Reference in New Issue
Block a user