Skip to content

Commit 17a0472

Browse files
authored
Update and rename ExportMultiLayerSVG.py to merge_svg_layers.py
1 parent a0f45f5 commit 17a0472

File tree

1 file changed

+10
-24
lines changed

1 file changed

+10
-24
lines changed
Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
from krita import Krita, InfoObject
1+
from krita import Krita
22
from PyQt5.QtWidgets import QFileDialog
33

44
def find_vector_layers(layer, vector_layers):
55
""" Recursively find all vector layers, even inside groups. """
6-
if layer.type() == 'grouplayer': # If it's a group, search inside it
6+
if layer.type() == 'grouplayer':
77
for child in layer.childNodes():
88
find_vector_layers(child, vector_layers)
9-
elif layer.type() == 'vectorlayer': # If it's a vector layer, add it
9+
elif layer.type() == 'vectorlayer':
1010
vector_layers.append(layer)
1111

1212
def merge_all_vector_layers_and_export():
13+
""" Merges all vector layers in Krita and exports them as a single SVG. """
1314
app = Krita.instance()
1415
doc = app.activeDocument()
1516

@@ -20,59 +21,47 @@ def merge_all_vector_layers_and_export():
2021
root = doc.rootNode()
2122
vector_layers = []
2223

23-
# Recursively find all vector layers (including inside groups)
2424
for layer in root.childNodes():
2525
find_vector_layers(layer, vector_layers)
2626

2727
if len(vector_layers) < 2:
2828
print("Not enough vector layers to merge.")
2929
return
3030

31-
# Create a new group layer
3231
group_layer = doc.createGroupLayer("Merged Vector Layers")
33-
root.addChildNode(group_layer, None) # Add group at the top level
32+
root.addChildNode(group_layer, None)
3433

3534
doc.refreshProjection()
3635

3736
copied_layers = []
3837

39-
# Copy vector layers into the new group (leave originals untouched)
4038
for layer in vector_layers:
41-
layer_copy = layer.duplicate() # Create a duplicate
42-
layer_copy.setName(layer.name() + " (Copy)") # Rename to avoid conflicts
43-
group_layer.addChildNode(layer_copy, None) # Add copy to the group
39+
layer_copy = layer.duplicate()
40+
layer_copy.setName(layer.name() + " (Copy)")
41+
group_layer.addChildNode(layer_copy, None)
4442
copied_layers.append(layer_copy)
4543

4644
doc.refreshProjection()
4745

48-
# Merge copied layers from top to bottom
4946
while len(group_layer.childNodes()) > 1:
50-
top_layer = group_layer.childNodes()[-1] # Get the topmost layer
47+
top_layer = group_layer.childNodes()[-1]
5148
below_layer = group_layer.childNodes()[-2] if len(group_layer.childNodes()) > 1 else None
5249

5350
if below_layer:
5451
top_layer.mergeDown()
5552
doc.refreshProjection()
5653

57-
# Get the final merged vector layer
5854
merged_layer = group_layer.childNodes()[0] if group_layer.childNodes() else None
5955

6056
if merged_layer:
61-
print("All vector layers successfully merged into a single layer inside the group.")
62-
print("Original layers remain unchanged.")
63-
64-
# Prompt the user for an SVG filename
6557
file_dialog = QFileDialog()
6658
file_dialog.setDefaultSuffix("svg")
6759
save_path, _ = file_dialog.getSaveFileName(None, "Save Merged Vector Layer as SVG", "", "SVG Files (*.svg)")
6860
save_path = ''.join(save_path)
6961

70-
# Validate file
7162
if save_path:
72-
# Convert the layer to an SVG XML string
7363
svg = merged_layer.toSvg()
7464
try:
75-
# Try and save the SVG
7665
with open(save_path, "w") as file:
7766
file.writelines(svg)
7867
print(f"SVG exported successfully: {save_path}")
@@ -82,13 +71,10 @@ def merge_all_vector_layers_and_export():
8271
else:
8372
print("SVG export cancelled.")
8473

85-
# Remove the temporary "Merged Vector Layers" group
8674
print("Removing temporary merged layer group...")
87-
root.removeChildNode(group_layer) # Remove the group from the document
75+
root.removeChildNode(group_layer)
8876
doc.refreshProjection()
8977
print("Temporary merged group deleted.")
9078

9179
else:
9280
print("Error: No merged vector layer found.")
93-
94-
merge_all_vector_layers_and_export()

0 commit comments

Comments
 (0)