Kean Walmsley


  • About the Author
    Kean on Google+

April 2014

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      







« Showing a splash-screen from your AutoCAD .NET application | Main | Creating an AutoCAD table containing block images using .NET »

June 06, 2007

Creating an AutoCAD table using .NET

This suggestion came in a few weeks ago from Kélcyo Pereira, and I've borrowed some code from Sreekar Devatha, from DevTech India, to help implement the suggestion.

The following C# code creates a very simple table and inserts it at the position selected by the user. The table is really very simply - a 5 (row) x 3 (column) table created from string values, no other data-types. It picks up the current style and aligns each cell as "middle, center". That's really all there is to it.

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.Runtime;


namespace TableCreation

{

  public class Commands

  {

    [CommandMethod("CRT")]

    static public void CreateTable()

    {

      Document doc =

        Application.DocumentManager.MdiActiveDocument;

      Database db = doc.Database;

      Editor ed = doc.Editor;


      PromptPointResult pr =

        ed.GetPoint("\nEnter table insertion point: ");

      if (pr.Status == PromptStatus.OK)

      {

        Table tb = new Table();

        tb.TableStyle = db.Tablestyle;

        tb.NumRows = 5;

        tb.NumColumns = 3;

        tb.SetRowHeight(3);

        tb.SetColumnWidth(15);

        tb.Position = pr.Value;


        // Create a 2-dimensional array

        // of our table contents

        string[,] str = new string[5, 3];

        str[0, 0] = "Part No.";

        str[0, 1] = "Name ";

        str[0, 2] = "Material ";

        str[1, 0] = "1876-1";

        str[1, 1] = "Flange";

        str[1, 2] = "Perspex";

        str[2, 0] = "0985-4";

        str[2, 1] = "Bolt";

        str[2, 2] = "Steel";

        str[3, 0] = "3476-K";

        str[3, 1] = "Tile";

        str[3, 2] = "Ceramic";

        str[4, 0] = "8734-3";

        str[4, 1] = "Kean";

        str[4, 2] = "Mostly water";


        // Use a nested loop to add and format each cell

        for (int i = 0; i < 5; i++)

        {

          for (int j = 0; j < 3; j++)

          {

            tb.SetTextHeight(i, j, 1);

            tb.SetTextString(i, j, str[i, j]);

            tb.SetAlignment(i, j, CellAlignment.MiddleCenter);

          }

        }

        tb.GenerateLayout();


        Transaction tr =

          doc.TransactionManager.StartTransaction();

        using (tr)

        {

          BlockTable bt =

            (BlockTable)tr.GetObject(

              doc.Database.BlockTableId,

              OpenMode.ForRead

            );

          BlockTableRecord btr =

            (BlockTableRecord)tr.GetObject(

              bt[BlockTableRecord.ModelSpace],

              OpenMode.ForWrite

            );

          btr.AppendEntity(tb);

          tr.AddNewlyCreatedDBObject(tb, true);

          tr.Commit();

        }

      }

    }

  }

}

And here's what you see when you run the CRT command and select a point:

Simple_table

I'd like to take this further by showing more advanced concepts around tables - please post a comment if you have a particular suggestion or request.

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d83452464869e200df351f56708833

Listed below are links to weblogs that reference Creating an AutoCAD table using .NET:

blog comments powered by Disqus

10 Random Posts