Script [Random one group select per every layer with suffix *m*]

Script [Random one group select per every layer with suffix *m*]

951polo
Explorer Explorer
384 Views
2 Replies
Message 1 of 3

Script [Random one group select per every layer with suffix *m*]

951polo
Explorer
Explorer

Hello everyone, I need a little help. I have a working script for a year and I got stuck in one part and I can't solve it. the script should do this: -select all layers with suffix exmp: "*m*" -random select one Group from all layers "*m*" -must not indicate objects but only groups, because random selection works poorly if "group_1"(10objects) and "group_2"(300objects).

 

currently the script is as follows:

run 1: layer 1 select 0 group

            layer 2 select 2 groups

run 2: layer 1 select 1 group

            layer 2 select 1 group

run 3: layer 1 select 2 groups

             layer 2 select 0 group

 

run 1 and 3 are bad. run 2 is correct

 

 

	----- Select layer with suffix and group ------ work
showtextg1 = "*m*"
nodesInsideLayerWithPrefix = for nodeOn in objects where isGroupHead nodeOn and matchPattern nodeOn.layer.name pattern:showtextg1 collect nodeOn
if nodesInsideLayerWithPrefix.count > 0 then 
select nodesInsideLayerWithPrefix

if selection.count != 0 then
	(
	hide $	
		
selObjsArr = for nodeOn in objects where isGroupHead nodeOn and matchPattern nodeOn.layer.name pattern:showtextg1 collect nodeOn						
if selObjsArr.count != 0 then												
  (               												
  layersArr = #()												
  for o in selObjsArr do					
  (																					 
  selObjLayer = o.layer																					 
  appendIfUnique layersArr selObjLayer												
  )												

objToSelArr = #()						
for la in layersArr do 							
	(		
	la.nodes 
	append objToSelArr (nodes[random 1 nodes.count])								
         )							
	select objToSelArr					
	)
	)					

----- UnHide all what is selected ------ work
hiddenObjs = for obj in objects where obj.isNodeHidden collect obj
unhide selection hiddenObjs ;

 

iwant this result:

group - ok.jpg

 Thanks for any advice.

0 Likes
Accepted solutions (1)
385 Views
2 Replies
Replies (2)
Message 2 of 3

denisT.MaxDoctor
Advisor
Advisor
Accepted solution

 

(
	dict = dictionary #string
	for k = 1 to layermanager.count-1 do 
	(
		layer = layermanager.getlayer k
		if findstring layer.name "m" != undefined do
		(
			layer.nodes &nodes
			groupheads = for n in nodes where isgrouphead n collect n 
			if groupheads.count > 0 do dict[layer.name] = groupheads
		)
	) 
	forsel = for d in dict collect d.value[random 1 d.value.count]
	if forsel.count > 0 then select forsel else clearselection()
)

 

0 Likes
Message 3 of 3

951polo
Explorer
Explorer

Well thank you.

0 Likes