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

18/06/2014

Изменение порядка отрисовки примитивов

Каждый блок в AutoCAD содержит информацию о порядке отрисовки примитивов в нём. Порядок отрисовки (DrawOrderTable) хранится в словаре расширения записи таблицы блоков. В .NET можно работать с этим словарем используя метод BlockTableRecord.DrawOrderTableId. Порядок отрисовки (DrawOrderTable), обеспечивает методы, такие как MoveToBottom, MoveToTop, MoveBelow, MoveAbove и так далее, которые позволяют изменить порядок отрисовки примитивов в блоке.

Код - C#: [Выделить]
  1. [CommandMethod("DrawOrderTest")]
  2. static public void DrawOrderTest()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.     string message = "\nВыберите примитив для переноса вниз ";
  8.     PromptEntityOptions options = new PromptEntityOptions(message);
  9.  
  10.     PromptEntityResult acSSPrompt = ed.GetEntity(options);
  11.  
  12.     if (acSSPrompt.Status != PromptStatus.OK)
  13.         return;
  14.  
  15.     using (Transaction tr = db.TransactionManager.StartTransaction())
  16.     {
  17.         Entity ent = tr.GetObject(acSSPrompt.ObjectId,
  18.                                         OpenMode.ForRead) as Entity;
  19.         // получаем блок
  20.         BlockTableRecord block = tr.GetObject(ent.BlockId,
  21.                                OpenMode.ForRead) as BlockTableRecord;
  22.  
  23.         // получаем таблицу порядка отрисовки блока
  24.         DrawOrderTable drawOrder =
  25.                                  tr.GetObject(block.DrawOrderTableId,
  26.                                 OpenMode.ForWrite) as DrawOrderTable;
  27.  
  28.         ObjectIdCollection ids = new ObjectIdCollection();
  29.         ids.Add(acSSPrompt.ObjectId);
  30.  
  31.         // переносим выбранный примитив так что он будет  
  32.         // отрисован в начале.
  33.         drawOrder.MoveToBottom(ids);
  34.  
  35.         tr.Commit();
  36.  
  37.     }
  38. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/06/changing-the-draw-order-of-the-entity.html

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

Опубликовано 18.06.2014
Отредактировано 20.06.2014 в 22:44:01