Add Layer

Demonstrates how to add a layer to a Rhino model and validate that it does not already exist.

partial class Examples
{
  public static Rhino.Commands.Result AddLayer(Rhino.RhinoDoc doc)
  {
    // Cook up an unused layer name
    string unused_name = doc.Layers.GetUnusedLayerName(false);

    // Prompt the user to enter a layer name
    Rhino.Input.Custom.GetString gs = new Rhino.Input.Custom.GetString();
    gs.SetCommandPrompt("Name of layer to add");
    gs.SetDefaultString(unused_name);
    gs.AcceptNothing(true);
    gs.Get();
    if (gs.CommandResult() != Rhino.Commands.Result.Success)
      return gs.CommandResult();

    // Was a layer named entered?
    string layer_name = gs.StringResult().Trim();
    if (string.IsNullOrEmpty(layer_name))
    {
      Rhino.RhinoApp.WriteLine("Layer name cannot be blank.");
      return Rhino.Commands.Result.Cancel;
    }

    // Is the layer name valid?
    if (!Rhino.DocObjects.Layer.IsValidName(layer_name))
    {
      Rhino.RhinoApp.WriteLine(layer_name + " is not a valid layer name.");
      return Rhino.Commands.Result.Cancel;
    }

    // Does a layer with the same name already exist?
    int layer_index = doc.Layers.Find(layer_name, true);
    if (layer_index >= 0)
    {
      Rhino.RhinoApp.WriteLine("A layer with the name {0} already exists.", layer_name);
      return Rhino.Commands.Result.Cancel;
    }

    // Add a new layer to the document
    layer_index = doc.Layers.Add(layer_name, System.Drawing.Color.Black);
    if (layer_index < 0)
    {
      Rhino.RhinoApp.WriteLine("Unable to add {0} layer.", layer_name);
      return Rhino.Commands.Result.Failure;
    }
    return Rhino.Commands.Result.Success;
  }
}
Partial Friend Class Examples
  Public Shared Function AddLayer(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
	' Cook up an unused layer name
	Dim unused_name As String = doc.Layers.GetUnusedLayerName(False)

	' Prompt the user to enter a layer name
	Dim gs As New Rhino.Input.Custom.GetString()
	gs.SetCommandPrompt("Name of layer to add")
	gs.SetDefaultString(unused_name)
	gs.AcceptNothing(True)
	gs.Get()
	If gs.CommandResult() <> Rhino.Commands.Result.Success Then
	  Return gs.CommandResult()
	End If

	' Was a layer named entered?
	Dim layer_name As String = gs.StringResult().Trim()
	If String.IsNullOrEmpty(layer_name) Then
	  Rhino.RhinoApp.WriteLine("Layer name cannot be blank.")
	  Return Rhino.Commands.Result.Cancel
	End If

	' Is the layer name valid?
	If Not Rhino.DocObjects.Layer.IsValidName(layer_name) Then
	  Rhino.RhinoApp.WriteLine(layer_name & " is not a valid layer name.")
	  Return Rhino.Commands.Result.Cancel
	End If

	' Does a layer with the same name already exist?
	Dim layer_index As Integer = doc.Layers.Find(layer_name, True)
	If layer_index >= 0 Then
	  Rhino.RhinoApp.WriteLine("A layer with the name {0} already exists.", layer_name)
	  Return Rhino.Commands.Result.Cancel
	End If

	' Add a new layer to the document
	layer_index = doc.Layers.Add(layer_name, System.Drawing.Color.Black)
	If layer_index < 0 Then
	  Rhino.RhinoApp.WriteLine("Unable to add {0} layer.", layer_name)
	  Return Rhino.Commands.Result.Failure
	End If
	Return Rhino.Commands.Result.Success
  End Function
End Class
import Rhino
import scriptcontext
import System.Guid, System.Drawing.Color

def AddLayer():
    # Cook up an unused layer name
    unused_name = scriptcontext.doc.Layers.GetUnusedLayerName(False)

    # Prompt the user to enter a layer name
    gs = Rhino.Input.Custom.GetString()
    gs.SetCommandPrompt("Name of layer to add")
    gs.SetDefaultString(unused_name)
    gs.AcceptNothing(True)
    gs.Get()
    if gs.CommandResult()!=Rhino.Commands.Result.Success:
        return gs.CommandResult()

    # Was a layer named entered?
    layer_name = gs.StringResult().Trim()
    if not layer_name:
        print "Layer name cannot be blank."
        return Rhino.Commands.Result.Cancel

    # Is the layer name valid?
    if not Rhino.DocObjects.Layer.IsValidName(layer_name):
        print layer_name, "is not a valid layer name."
        return Rhino.Commands.Result.Cancel

    # Does a layer with the same name already exist?
    layer_index = scriptcontext.doc.Layers.Find(layer_name, True)
    if layer_index>=0:
        print "A layer with the name", layer_name, "already exists."
        return Rhino.Commands.Result.Cancel

    # Add a new layer to the document
    layer_index = scriptcontext.doc.Layers.Add(layer_name, System.Drawing.Color.Black)
    if layer_index<0:
        print "Unable to add", layer_name, "layer."
        return Rhino.Commands.Result.Failure

    return Rhino.Commands.Result.Success


if __name__=="__main__":
    AddLayer()