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

20/06/2014

Установка относительного порядка отрисовки примитивов с помощью .NET

Чтобы установить относительный порядок отрисовки одних примитивов относительно других можно воспользоваться методами DrawOrderTable.MoveAbove или DrawOrderTable.MoveBellow как показано ниже в коде.

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

 

Источник: http://adndevblog.typepad.com/autocad/2012/06/setting-relative-draw-order-of-entities-using-net.html

 

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

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