Yeah, it is grouped. Here you go (it will unwrap the single group but it doesn’t account for any group transformations, which in your case there is none so it isn’t a problem, just noting for others)
import re
from PyQt5 import *
from PyQt5.QtSvg import QSvgRenderer
from PyQt5.QtGui import QImage, QPainter, QPixmap
import xml.etree.ElementTree as ET
doc = Krita.instance().activeDocument()
layer = doc.activeNode()
dlg = QtWidgets.QFileDialog()
dlg.setFileMode(QtWidgets.QFileDialog.AnyFile)
filename = dlg.getOpenFileName(None, "Open SVG", "", "SVG files (*.svg)")
file = open(filename[0],'r')
data = file.read()
svgHeader = re.compile('(^.*?\<svg.*?["\']\\s*\>\\s*(<defs\/>|<defs>.*?<\/defs>|)).*$', re.DOTALL).sub(r'\1',data)
w = doc.width()
h = doc.height()
x = 0
y = 0
svg = ET.fromstring(data)
allshapes = svg.findall('*')
shapes = []
for shape in allshapes:
tag = shape.tag.split('}')
if len(tag) > 1: shape.tag = tag[1]
if shape.tag != 'defs' and shape.tag != 'namedview':
shapes.append(shape)
if len(shapes) == 1 and shapes[0].tag == 'g':
shapes = shapes[0].findall('*')
groupLayer = doc.createGroupLayer('Group Import')
for shape in shapes:
data = str(ET.tostring(shape))
data = re.sub('ns0:','', data)
data = svgHeader + data + '</svg>'
svgrenderer = QSvgRenderer(bytearray(data, encoding='utf-8'))
image = QImage(w, h, QImage.Format_ARGB32)
image.fill(0x00000000)
svgrenderer.render(QPainter(image))
ptr = image.constBits()
ptr.setsize(image.byteCount())
rLayer = doc.createNode(shape.get("id"), "paintLayer")
rLayer.setPixelData(bytes(ptr.asarray()),x,y,w,h)
groupLayer.addChildNode(rLayer, None)
layer.parentNode().addChildNode(groupLayer, layer)
doc.refreshProjection()