Copy link to clipboard
Copied
Hi,
I have a layer structure. I want to copy it according to a number sequence, that is, copy 1, 2, 3, 4, 5, 6, 7, 8... 100 layers. Their structures are the same, but the name of the main layer should be named according to the number. 1, 2, 3... Etc., but the names of all other sub layers cannot be changed. I wonder if there is such a script that can be implemented.
There is a "Copy Layer" command in the layer menu to copy the entire layer structure, but the word "copy" will be automatically added to all layer names, and the main layer cannot be named according to the number sequence, and the names need to be modified one by one, including all sub layer names. This is a very time-consuming and nerve wracking work, so try to use scripts to see if this can be achieved. Thank you.
Layer structure to copy:
Effect to be achieved:
Thanks @Silly-V @jduncan @Charu Rajput and @Disposition_Dev for help and ideas. I divided the problem of this post into the following three parts to solve it. Finally, it was solved:
1) Highlighted Layer
2)Duplicate Layer
3)Rename Layer
...Copy link to clipboard
Copied
Just to be clear, you want to duplicate an empty layer's structure (one layer and its sublayers), not any items on those layers/sublayers?
Copy link to clipboard
Copied
Sorry, I didn't make it clear.
Not only the layer structure, it should also copy all the items in the layers/sublayers if the layers/sublayers have items.
Copy link to clipboard
Copied
Is there a forum God to help me look at it?
Copy link to clipboard
Copied
Thanks @Silly-V @Charu Rajput for help and ideas.
I can solve 80% of my problems with the following script, but I haven't thought of a good way to keep the names of all the copied sub layers consistent with the source layers.
// Need to import “target layer” and “dupelayer” actions in the action panel in advance.
// The target layer ”1” to be copied is a sub layer under a parent layer.
function highlightLayerInContainer (targetLayer) {
var someTempPath = targetLayer.pathItems.rectangle(0, 0, 200, 200);
someTempPath.name = "TEMP [for highlighting]";
app.activeDocument.selection = null;
someTempPath.selected = true;
app.doScript("target layer", "Test Set 2");
someTempPath.remove();
}
for (var i=1;i<199;i++) {
highlightLayerInContainer(app.activeDocument.layers[0].layers[0]); // The target layer ”1” to be copied is a sub layer under a parent layer.
app.doScript("DupeLayer", "Test Set 2");
app.activeDocument.layers[0].layers[0].name=i+1; //number sequence name
}
I would be greatly appreciated if you could give me help or advice, Thanks in advance!
Copy link to clipboard
Copied
Thanks @Silly-V @jduncan @Charu Rajput and @Disposition_Dev for help and ideas. I divided the problem of this post into the following three parts to solve it. Finally, it was solved:
1) Highlighted Layer
2)Duplicate Layer
3)Rename Layer
Here I share the complete code I have sorted out. I hope this can be helpful to people with similar problems. Thanks!
// Highlihgt and duplicate layer
function highlightLayerInContainer (targetLayer) {
var someTempPath = targetLayer.pathItems.rectangle(0, 0, 200, 200);
someTempPath.name = "TEMP [for highlighting]";
app.activeDocument.selection = null;
someTempPath.selected = true;
app.doScript("target layer", "Test Set 2");
someTempPath.remove();
}
for (var i=1;i<199;i++) {
highlightLayerInContainer(app.activeDocument.layers[0].layers[0]); // my target layer was a sublayer
app.doScript("DupeLayer", "Test Set 2");
app.activeDocument.layers[0].layers[0].name=i+1 // number sequence name, target layer name set to "1"
}
var doc = app.activeDocument;
var layers = doc.layers;
// Rename all sublayers
for (var i = doc.layers.length - 1; i > -1; i--) {
recursiveRename(doc.layers[i]);
}
function recursiveRename(parent) {
for (var i = 0; i < parent.layers.length; i++) {
parent.layers[i].name = parent.layers[i].name.replace(/\scopy.*$/, "");
recursiveRename(parent.layers[i]);
}
}
// Action file
/version 3
/name [ 10
54657374205365742032
]
/isOpen 1
/actionCount 2
/action-1 {
/name [ 9
447570654c61796572
]
/keyIndex 0
/colorIndex 0
/isOpen 1
/eventCount 1
/event-1 {
/useRulersIn1stQuadrant 0
/internalName (ai_plugin_Layer)
/localizedName [ 5
4c61796572
]
/isOpen 1
/isOn 1
/hasDialog 0
/parameterCount 2
/parameter-1 {
/key 1836411236
/showInPalette -1
/type (integer)
/value 1
}
/parameter-2 {
/key 1851878757
/showInPalette -1
/type (ustring)
/value [ 19
4475706c69636174652053656c656374696f6e
]
}
}
}
/action-2 {
/name [ 12
746172676574206c61796572
]
/keyIndex 0
/colorIndex 0
/isOpen 1
/eventCount 3
/event-1 {
/useRulersIn1stQuadrant 0
/internalName (ai_plugin_Layer)
/localizedName [ 5
4c61796572
]
/isOpen 0
/isOn 1
/hasDialog 0
/parameterCount 2
/parameter-1 {
/key 1836411236
/showInPalette -1
/type (integer)
/value 19
}
/parameter-2 {
/key 1851878757
/showInPalette -1
/type (ustring)
/value [ 13
4c6f63617465204f626a656374
]
}
}
/event-2 {
/useRulersIn1stQuadrant 0
/internalName (ai_plugin_Layer)
/localizedName [ 5
4c61796572
]
/isOpen 0
/isOn 1
/hasDialog 0
/parameterCount 1
/parameter-1 {
/key 1836411236
/showInPalette -1
/type (integer)
/value 24
}
}
/event-3 {
/useRulersIn1stQuadrant 0
/internalName (ai_plugin_Layer)
/localizedName [ 5
4c61796572
]
/isOpen 0
/isOn 1
/hasDialog 0
/parameterCount 1
/parameter-1 {
/key 1836411236
/showInPalette -1
/type (integer)
/value 25
}
}
}