Layer.Name Property

LayerName Property

Gets or sets the name of this layer.

Namespace:  Rhino.DocObjects
Assembly:  RhinoCommon (in RhinoCommon.dll)
Since: 5.0
Syntax
public override string Name { get; set; }
Public Overrides Property Name As String
	Get
	Set

Property Value

Type: String
Examples
using Rhino.Commands;

partial class Examples
{
  public static Rhino.Commands.Result SelLayer(Rhino.RhinoDoc doc)
  {
    // Prompt for a layer name
    string 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 back
    Rhino.DocObjects.RhinoObject[] rhobjs = doc.Objects.FindByLayer(layername);
    if (rhobjs == null || rhobjs.Length < 1)
      return Rhino.Commands.Result.Cancel;

    for (int i = 0; i < rhobjs.Length; i++)
      rhobjs[i].Select(true);
    doc.Views.Redraw();
    return Rhino.Commands.Result.Success;
  }
}
Partial Class Examples
  Public Shared Function SelLayer(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
    Dim rc As Rhino.Commands.Result
    ' Prompt for a layer name
    Dim layername As String = doc.Layers.CurrentLayer.Name
    rc = Rhino.Input.RhinoGet.GetString("Name of layer to select objects", True, layername)
    If rc <> Rhino.Commands.Result.Success Then Return rc

    ' Get all of the objects on the layer. If layername is bogus, you will
    ' just get an empty list back
    Dim rhobjs As Rhino.DocObjects.RhinoObject() = doc.Objects.FindByLayer(layername)
    If rhobjs Is Nothing OrElse rhobjs.Length < 1 Then
      Return Rhino.Commands.Result.Cancel
    End If

    For i As Integer = 0 To rhobjs.Length - 1
      rhobjs(i).Select(True)
    Next
    doc.Views.Redraw()
    Return Rhino.Commands.Result.Success
  End Function
End Class
Python
import Rhino
import scriptcontext
import System.Guid, System.Drawing.Color

def SelLayer():
    # 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)
    if not rhobjs: Rhino.Commands.Result.Cancel

    for obj in rhobjs: obj.Select(True)
    scriptcontext.doc.Views.Redraw()
    return Rhino.Commands.Result.Success

if __name__=="__main__":
    SelLayer()
Examples
using Rhino;
using Rhino.Input;
using Rhino.Commands;
using Rhino.DocObjects;
using System;
using System.Linq;

namespace examples_cs
{
  public class RenameLayerCommand : Command
  {
    public override string EnglishName { get { return "csRenameLayer"; } }

    protected override Result RunCommand(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))
        return Result.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.Layers
                             where 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);
        return Result.Nothing;
      }
      else if (matching_layers.Count == 1)
      {
        layer_to_rename = matching_layers[0];
      }
      else if (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];
        else return Result.Nothing;
      }

      if (layer_to_rename == null)
        return Result.Nothing;

      layer_name = "";
      rc = RhinoGet.GetString("New layer name", true, ref layer_name);
      if (rc != Result.Success)
        return rc;
      if (String.IsNullOrWhiteSpace(layer_name))
        return Result.Nothing;

      layer_to_rename.Name = layer_name;
      if (!layer_to_rename.CommitChanges())
        return Result.Failure;
      return Result.Success;
    }
  }
}
Imports Rhino
Imports Rhino.Input
Imports Rhino.Commands
Imports Rhino.DocObjects
Imports System.Linq

Namespace examples_vb
  Public Class RenameLayerCommand
    Inherits Command
    Public Overrides ReadOnly Property EnglishName() As String
      Get
        Return "vbRenameLayer"
      End Get
    End Property

    Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
      Dim layer_name As String = ""
      Dim rc = RhinoGet.GetString("Name of layer to rename", True, layer_name)
      If rc <> Result.Success Then
        Return rc
      End If
      If [String].IsNullOrWhiteSpace(layer_name) Then
        Return Result.[Nothing]
      End If

      ' 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.Layers Where layer.Name = layer_name Select layer).ToList()

      Dim layer_to_rename As Layer = Nothing
      If matching_layers.Count = 0 Then
        RhinoApp.WriteLine("Layer ""{0}"" does not exist.", layer_name)
        Return Result.[Nothing]
      ElseIf matching_layers.Count = 1 Then
        layer_to_rename = matching_layers(0)
      ElseIf matching_layers.Count > 1 Then
        For i As Integer = 0 To matching_layers.Count - 1
          RhinoApp.WriteLine("({0}) {1}", i + 1, matching_layers(i).FullPath.Replace("::", "->"))
        Next
        Dim selected_layer As Integer = -1
        rc = RhinoGet.GetInteger("which layer?", True, selected_layer)
        If rc <> Result.Success Then
          Return rc
        End If
        If selected_layer > 0 AndAlso selected_layer <= matching_layers.Count Then
          layer_to_rename = matching_layers(selected_layer - 1)
        Else
          Return Result.[Nothing]
        End If
      End If

      If layer_to_rename Is Nothing Then
        Return Result.[Nothing]
      End If

      layer_name = ""
      rc = RhinoGet.GetString("New layer name", True, layer_name)
      If rc <> Result.Success Then
        Return rc
      End If
      If [String].IsNullOrWhiteSpace(layer_name) Then
        Return Result.[Nothing]
      End If

      layer_to_rename.Name = layer_name
      If Not layer_to_rename.CommitChanges() Then
        Return Result.Failure
      End If
      Return Result.Success
    End Function
  End Class
End Namespace
Python
import rhinoscriptsyntax as rs
from scriptcontext import doc

def rename():
    layerName = rs.GetString("Name of layer to rename")

    matchingLayers = [layer for layer in doc.Layers if layer.Name == layerName]

    layerToRename = None
    if len(matchingLayers) == 0:
        print "Layer \"{0}\" does not exist.".format(layerName)
        return
    if len(matchingLayers) == 1:
        layerToRename = matchingLayers[0]
    elif len(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()
    return

if __name__ == "__main__":
    rename()
See Also