1- from krita import Krita , InfoObject
1+ from krita import Krita
22from PyQt5 .QtWidgets import QFileDialog
33
44def 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
1212def 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