usingRhino.Commands;partialclassExamples{publicstaticRhino.Commands.ResultSelLayer(Rhino.RhinoDoc doc){// Prompt for a layer namestring layername = doc.Layers.CurrentLayer.Name;Result rc =Rhino.Input.RhinoGet.GetString("Name of layer to select objects",true,ref layername);if(rc !=Rhino.Commands.Result.Success)return rc;// Get all of the objects on the layer. If layername is bogus, you will// just get an empty list backRhino.DocObjects.RhinoObject[] rhobjs = doc.Objects.FindByLayer(layername);if(rhobjs ==null|| rhobjs.Length<1)returnRhino.Commands.Result.Cancel;for(int i =0; i < rhobjs.Length; i++)
rhobjs[i].Select(true);
doc.Views.Redraw();returnRhino.Commands.Result.Success;}}
usingRhino;usingRhino.Input;usingRhino.Commands;usingRhino.DocObjects;usingSystem;usingSystem.Linq;namespace examples_cs
{publicclassRenameLayerCommand:Command{publicoverridestringEnglishName{get{return"csRenameLayer";}}protectedoverrideResultRunCommand(RhinoDoc doc,RunMode mode){string layer_name ="";var rc =RhinoGet.GetString("Name of layer to rename",true,ref layer_name);if(rc !=Result.Success)return rc;if(String.IsNullOrWhiteSpace(layer_name))returnResult.Nothing;// because of sublayers it's possible that more than one layer has the same name// so simply calling doc.Layers.Find(layerName) isn't good enough. If "layerName" returns// more than one layer then present them to the user and let him decide.var matching_layers =(from layer in doc.Layerswhere layer.Name== layer_name
select layer).ToList<Layer>();Layer layer_to_rename =null;if(matching_layers.Count==0){RhinoApp.WriteLine("Layer '{0}' does not exist.", layer_name);returnResult.Nothing;}elseif(matching_layers.Count==1){
layer_to_rename = matching_layers[0];}elseif(matching_layers.Count>1){for(int i =0; i < matching_layers.Count; i++){RhinoApp.WriteLine("({0}) {1}", i+1, matching_layers[i].FullPath.Replace("::","->"));}int selected_layer =-1;
rc =RhinoGet.GetInteger("which layer?",true,ref selected_layer);if(rc !=Result.Success)return rc;if(selected_layer >0&& selected_layer <= matching_layers.Count)
layer_to_rename = matching_layers[selected_layer -1];elsereturnResult.Nothing;}if(layer_to_rename ==null)returnResult.Nothing;
layer_name ="";
rc =RhinoGet.GetString("New layer name",true,ref layer_name);if(rc !=Result.Success)return rc;if(String.IsNullOrWhiteSpace(layer_name))returnResult.Nothing;
layer_to_rename.Name= layer_name;if(!layer_to_rename.CommitChanges())returnResult.Failure;returnResult.Success;}}}
importRhinoimport scriptcontext
importSystem.Guid,System.Drawing.ColordefSelLayer():# Prompt for a layer name
layername = scriptcontext.doc.Layers.CurrentLayer.Name
rc, layername =Rhino.Input.RhinoGet.GetString("Name of layer to select objects",True, layername)if rc!=Rhino.Commands.Result.Success:return rc
# Get all of the objects on the layer. If layername is bogus, you will# just get an empty list back
rhobjs = scriptcontext.doc.Objects.FindByLayer(layername)ifnot rhobjs:Rhino.Commands.Result.Cancelfor obj in rhobjs: obj.Select(True)
scriptcontext.doc.Views.Redraw()returnRhino.Commands.Result.Successif __name__=="__main__":SelLayer()
import rhinoscriptsyntax as rs
from scriptcontext import doc
defrename():
layerName = rs.GetString("Name of layer to rename")
matchingLayers =[layer for layer in doc.Layersif layer.Name== layerName]
layerToRename =Noneiflen(matchingLayers)==0:
print "Layer \"{0}\" does not exist.".format(layerName)returniflen(matchingLayers)==1:
layerToRename = matchingLayers[0]eliflen(matchingLayers)>1:
i =0;for layer in matchingLayers:
print "({0}) {1}".format(
i+1, matchingLayers[i].FullPath.replace("::","->"))
i +=1
selectedLayer = rs.GetInteger("which layer?",-1,1,len(matchingLayers))if selectedLayer ==None:return
layerToRename = matchingLayers[selectedLayer -1]
layerName = rs.GetString("New layer name")
layerToRename.Name= layerName
layerToRename.CommitChanges()returnif __name__ =="__main__":rename()
PartialClassExamplesPublicSharedFunctionSelLayer(ByVal doc AsRhino.RhinoDoc)AsRhino.Commands.ResultDim rc AsRhino.Commands.Result' Prompt for a layer nameDim layername AsString= doc.Layers.CurrentLayer.Name
rc =Rhino.Input.RhinoGet.GetString("Name of layer to select objects",True, layername)If rc <>Rhino.Commands.Result.SuccessThenReturn rc
' Get all of the objects on the layer. If layername is bogus, you will' just get an empty list backDim rhobjs AsRhino.DocObjects.RhinoObject()= doc.Objects.FindByLayer(layername)If rhobjs IsNothingOrElse rhobjs.Length<1ThenReturnRhino.Commands.Result.CancelEndIfFor i AsInteger=0To rhobjs.Length-1rhobjs(i).Select(True)Next
doc.Views.Redraw()ReturnRhino.Commands.Result.SuccessEndFunctionEndClass
ImportsRhinoImportsRhino.InputImportsRhino.CommandsImportsRhino.DocObjectsImportsSystem.LinqNamespace examples_vb
PublicClassRenameLayerCommandInheritsCommandPublicOverridesReadOnlyPropertyEnglishName()AsStringGetReturn"vbRenameLayer"EndGetEndPropertyProtectedOverridesFunctionRunCommand(doc AsRhinoDoc, mode AsRunMode)AsResultDim layer_name AsString=""Dim rc =RhinoGet.GetString("Name of layer to rename",True, layer_name)If rc <>Result.SuccessThenReturn rc
EndIfIf[String].IsNullOrWhiteSpace(layer_name)ThenReturnResult.[Nothing]EndIf' because of sublayers it's possible that more than one layer has the same name' so simply calling doc.Layers.Find(layerName) isn't good enough. If "layerName" returns' more than one layer then present them to the user and let him decide.Dim matching_layers =(From layer In doc.LayersWhere layer.Name= layer_name Select layer).ToList()Dim layer_to_rename AsLayer=NothingIf matching_layers.Count=0ThenRhinoApp.WriteLine("Layer ""{0}"" does not exist.", layer_name)ReturnResult.[Nothing]ElseIf matching_layers.Count=1Then
layer_to_rename =matching_layers(0)ElseIf matching_layers.Count>1ThenFor i AsInteger=0To matching_layers.Count-1RhinoApp.WriteLine("({0}) {1}", i +1,matching_layers(i).FullPath.Replace("::","->"))NextDim selected_layer AsInteger=-1
rc =RhinoGet.GetInteger("which layer?",True, selected_layer)If rc <>Result.SuccessThenReturn rc
EndIfIf selected_layer >0AndAlso selected_layer <= matching_layers.CountThen
layer_to_rename =matching_layers(selected_layer -1)ElseReturnResult.[Nothing]EndIfEndIfIf layer_to_rename IsNothingThenReturnResult.[Nothing]EndIf
layer_name =""
rc =RhinoGet.GetString("New layer name",True, layer_name)If rc <>Result.SuccessThenReturn rc
EndIfIf[String].IsNullOrWhiteSpace(layer_name)ThenReturnResult.[Nothing]EndIf
layer_to_rename.Name= layer_name
IfNot layer_to_rename.CommitChanges()ThenReturnResult.FailureEndIfReturnResult.SuccessEndFunctionEndClassEndNamespace