Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

How to copy layer structure by number sequence?

Contributor ,
Aug 11, 2022 Aug 11, 2022

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:

a.JPGexpand image


Effect to be achieved:

b.jpgexpand image

TOPICS
Scripting
842
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Contributor , Aug 20, 2022 Aug 20, 2022
Translate
Adobe
Guide ,
Aug 11, 2022 Aug 11, 2022

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?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Aug 11, 2022 Aug 11, 2022

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.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Aug 13, 2022 Aug 13, 2022

Is there a forum God to help me look at it? 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Aug 17, 2022 Aug 17, 2022

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!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Aug 20, 2022 Aug 20, 2022
LATEST

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

https://community.adobe.com/t5/illustrator-discussions/how-to-highlighted-select-a-specified-layer/m... 

 

2)Duplicate Layer

https://community.adobe.com/t5/illustrator-discussions/quot-duplicate-layer-quot-command-in-script/m... 

 

3)Rename Layer

https://community.adobe.com/t5/illustrator-discussions/how-to-move-and-align-objects-with-scripts/m-... 

 

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
		}
	}
}

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines