ADN Open CIS
Сообщество программистов Autodesk в СНГ

28/12/2013

Определение записи таблицы блоков связанной с Листом

Чтобы добавить примитивы на Лист, необходимо найти запись таблицы блоков, связанную с этим листом. Каждый лист хранит ObjectId записи таблицы блоков, с которой он ассоциирован. Ниже код добавляющий окружность к выбранному Листу.

Код - C#: [Выделить]
  1. [CommandMethod("EntAddLayout")]
  2. static public void EntAddLayout()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.     // Спрашиваем имя листа
  8.     PromptStringOptions opts = new PromptStringOptions("Укажите имя листа ");
  9.     opts.AllowSpaces = true;
  10.     PromptResult layoutName = ed.GetString(opts);
  11.     if (layoutName.Status != PromptStatus.OK)
  12.         return;
  13.     using (Transaction tx = db.TransactionManager.StartTransaction())
  14.     {
  15.       DBDictionary dLayouts =
  16.          tx.GetObject(db.LayoutDictionaryId, OpenMode.ForRead) as DBDictionary;
  17.       // Проверяем имя листа
  18.       if (dLayouts.Contains(layoutName.StringResult))
  19.       {
  20.         ObjectId id = dLayouts.GetAt(layoutName.StringResult);
  21.         Layout layout = tx.GetObject(id, OpenMode.ForRead) as Layout;
  22.         // layout.BlockTableRecordId – получаем id блока
  23.         BlockTableRecord bt = tx.GetObject(
  24.                             layout.BlockTableRecordId,
  25.                      OpenMode.ForWrite) as BlockTableRecord;
  26.         // в качестве текста добавим Окружность
  27.         Circle circle = new Circle(Point3d.Origin, Vector3d.ZAxis, 10.0);
  28.         bt.AppendEntity(circle);
  29.         tx.AddNewlyCreatedDBObject(circle, true);
  30.         // сделаем лист текущим
  31.         LayoutManager layoutMgr = LayoutManager.Current;
  32.         layoutMgr.CurrentLayout = layoutName.StringResult;
  33.       }
  34.       tx.Commit();
  35.     }
  36. }

Источник: http://adndevblog.typepad.com/autocad/2012/06/identifying-the-block-table-record-of-the-layout.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=425

Опубликовано 28.12.2013