/* LayerABC version 1.0 (bubble sort layers by name) (c) Steve Reeves December 2004 www.stever.demon.co.uk comments & suggestions to lscript@stever.demon.co.uk */ @version 2.2 @warnings @script modeler main { // Interface section var1 = "UnNamed"; reqbegin("LayerABC v1.0"); reqsize(569,260); c1 = ctlstring("Name for unnamed layers:",var1); ctlposition(c1,14,115,450,20); c3 = ctltext("","","LayerABC will now sort the layers of the currently selected object in alphabetical order based upon the layer name."); ctlposition(c3,14,5,535,26); c2 = ctltext("","Any unnamed layers (with model data) will be named as specified below and sorted accordingly."); ctlposition(c2,14,40,365,13); c4 = ctltext("","All layers devoid of data will be moved to the end of the sorted layers.","Lightwave will automatically remove these layers (and their layer names) on subsequent object saves."); ctlposition(c4,14,61,475,26); c5 = ctltext("","This plugin is supplied free of charge - it is used entirely at the users own risk. No liability for anything accepted!",""); ctlposition(c5,14,160,475,26); c6 = ctltext(""," lscript@stever.demon.co.uk www.stever.demon.co.uk",""); ctlposition(c6,14,180,475,26); return if !reqpost(); UnnamedLayerName = getvalue(c1); reqend(); object = Mesh(0); // define object to get layer names // Get maximum layer number ldata = lyrdata(); maxlayer = 1; for (i=1; i<=size(ldata); i++) maxlayer = ldata[i] if (maxlayer < ldata[i]); // Find un-named layers and name them as per user instructions for (i = 1; i <= maxlayer; i++) if (object.layerName(i) == Nil) { lyrsetfg(i); setlayername(UnnamedLayerName); } // Find empty layers and name them so that they appear at the end of the sorted list lempty = lyrempty(); for (i=1; i<=size(lempty); i++) { lyrsetfg(lempty[i]); setlayername("zzzzzzzzzzzzzz (Empty Layer)"); } // put layer names in to an array and do bubble sort for(i = 1; i <= maxlayer; i++) namearray[i] = object.layerName(i); finished = false; while(!finished) { finished = true; for (i = 1; i < maxlayer; i++) { if (namearray[i] > namearray[i + 1]) { finished = false; topname = namearray[i]; bottomname = namearray[i + 1]; namearray[i] = bottomname; namearray[i + 1] = topname; } } } // create the working layers for (l=1; l <= maxlayer; l++) { lyrsetfg(l); copy(); name = object.layerName(l); delete(); lyrsetfg(l + maxlayer); paste(); setlayername(name); } // Move the layers to the correct order for (baselayer = 1; baselayer <= maxlayer; baselayer++) { targetname = namearray[baselayer]; loopflag = 0; for (targetlayer = (maxlayer + 1); targetlayer <= (maxlayer * 2); targetlayer++) { lyrsetfg(targetlayer); targetlayername = object.layerName(targetlayer); if(targetlayername == targetname) { if(loopflag == 0) { copy(); delete(); setlayername(""); lyrsetfg(baselayer); paste(); setlayername(targetname); loopflag = 1; } } } } // tidyup lyrsetfg(1); } // main