Through the Interface: Creating an AutoCAD layer using .NET

May 2015

Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


« January’s Plugin of the Month: FacetCurve | Main | More DevLabs currently planned for 2010 »

January 13, 2010

Creating an AutoCAD layer using .NET

Sometimes I receive a question which makes me think “I must have posted something that shows that by now, surely?” and yet I can’t find it. So please accept my apologies if this post is redundant and I’m just repeating myself. :-)

Here’s the question that had me thinking:

I don't know how may I create a new layer in drawing.

And here’s some code I threw together to show this. It defines a simple command called CL which creates a layer with the name proposed by the user, after validating the name using the SymbolUtilityServices namespace (which I admit not to having used before, at least not via the .NET layer). It also sets the colour-index of the layer to an auto-incremented value, and sets the current layer to the newly-created one (so it shows up nicely in AutoCAD’s user interface).

Here’s the C# code:

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Colors;


namespace LayerCreation


  public class Commands


    // For fun let's assign each new layer with a new colour


    static short _colorIndex = 0;



    public void CreateLayer()


      Document doc =


      Database db = doc.Database;

      Editor ed = doc.Editor;


      Transaction tr =


      using (tr)


        // Get the layer table from the drawing


        LayerTable lt =






        // Check the layer name, to see whether it's

        // already in use


        PromptStringOptions pso =

          new PromptStringOptions(

            "\nEnter new layer name: "


        pso.AllowSpaces = true;


        // A variable for the layer name


        string layName = "";




          PromptResult pr = ed.GetString(pso);


          // Just return if the user cancelled

          // (will abort the transaction as we drop out of the using

          // statement's scope)


          if (pr.Status != PromptStatus.OK)





            // Validate the provided symbol table name







            // Only set the layer name if it isn't in use


            if (lt.Has(pr.StringResult))


                "\nA layer with this name already exists."



              layName = pr.StringResult;




            // An exception has been thrown, indicating the

            // name is invalid



              "\nInvalid layer name."




        } while (layName == "");


        // Create our new layer table record...


        LayerTableRecord ltr = new LayerTableRecord();


        // ... and set its properties


        ltr.Name = layName;

        ltr.Color =

          Color.FromColorIndex(ColorMethod.ByAci, _colorIndex);


        // Add the new layer to the layer table



        ObjectId ltId = lt.Add(ltr);

        tr.AddNewlyCreatedDBObject(ltr, true);


        // Set the layer to be current for this drawing


        db.Clayer = ltId;


        // Commit the transaction




        // Report what we've done



          "\nCreated layer named \"{0}\" with " +

          "a color index of {1}.",

          layName, _colorIndex++






When we run the CL command, the user will be asked for a layer name which – assuming it’s valid and isn’t already used in the current drawing – will be used to name the newly created layer. If the name is invalid or already in use, the code will loop until valid and usable name is provided (or the user cancels).

Command: CL

Enter new layer name: 1

Created layer named "1" with a color index of 0.

Command: CL

Enter new layer name: 1

A layer with this name already exists.

Enter new layer name: 0

A layer with this name already exists.

Enter new layer name: *

Invalid layer name.

Enter new layer name: 2

Created layer named "2" with a color index of 1.

Command: CL

Enter new layer name: 3

Created layer named "3" with a color index of 2.

blog comments powered by Disqus


10 Random Posts