18/06/2014
Изменение порядка отрисовки примитивов
Каждый блок в AutoCAD содержит информацию о порядке отрисовки примитивов в нём. Порядок отрисовки (DrawOrderTable) хранится в словаре расширения записи таблицы блоков. В .NET можно работать с этим словарем используя метод BlockTableRecord.DrawOrderTableId. Порядок отрисовки (DrawOrderTable), обеспечивает методы, такие как MoveToBottom, MoveToTop, MoveBelow, MoveAbove и так далее, которые позволяют изменить порядок отрисовки примитивов в блоке.
Код - C#: [Выделить]
- [CommandMethod("DrawOrderTest")]
- static public void DrawOrderTest()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- string message = "\nВыберите примитив для переноса вниз ";
- PromptEntityOptions options = new PromptEntityOptions(message);
- PromptEntityResult acSSPrompt = ed.GetEntity(options);
- if (acSSPrompt.Status != PromptStatus.OK)
- return;
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- Entity ent = tr.GetObject(acSSPrompt.ObjectId,
- OpenMode.ForRead) as Entity;
- // получаем блок
- BlockTableRecord block = tr.GetObject(ent.BlockId,
- OpenMode.ForRead) as BlockTableRecord;
- // получаем таблицу порядка отрисовки блока
- DrawOrderTable drawOrder =
- tr.GetObject(block.DrawOrderTableId,
- OpenMode.ForWrite) as DrawOrderTable;
- ObjectIdCollection ids = new ObjectIdCollection();
- ids.Add(acSSPrompt.ObjectId);
- // переносим выбранный примитив так что он будет
- // отрисован в начале.
- drawOrder.MoveToBottom(ids);
- tr.Commit();
- }
- }
Источник: 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