14/04/2021
Как подсветить примитив внутри блока или внешней ссылки - NET
Вопрос: Для того чтобы подсветить примитив в текущем пространстве (Модели или Листа) достаточно воспользоваться методом Entity.Highlight(). А как подсветить примитив, который находится в составе блока (возможно вложенного блока) или во внешней ссылке?
Ответ: Для этой цели следует воспользоваться методом Entity.Highhlight(FullSubentPath subId), предварительно создав правильный FullSubentPath.
Ниже приведен код, который подсвечивает примитив внутри самого вложенного блока или внешней ссылки:
Код - C#: [Выделить]
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.EditorInput;
- using Autodesk.AutoCAD.Runtime;
- using System.Collections.Generic;
- // This line is not mandatory, but improves loading performances
- [assembly: CommandClass(typeof(TestHighLight.MyCommands))]
- namespace TestHighLight
- {
- public class MyCommands
- {
- [CommandMethod("XHLight")]
- public void XHLightHandler()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- Database db = doc.Database;
- PromptNestedEntityResult rs =
- ed.GetNestedEntity("\nВыберите примитив: ");
- if (rs.Status == PromptStatus.OK)
- {
- List<ObjectId> ids = new List<ObjectId>(rs.GetContainers());
- ids.Reverse(); // Реверсируем коллекцию примитивов для подсветки
- ids.Add(rs.ObjectId);
- foreach (ObjectId id in ids)
- {
- ed.WriteMessage("\nId={0} Class={1} Database={2}", id,
- id.ObjectClass.Name, id.Database.OriginalFileName);
- }
- #pragma warning disable 0618
- using (Entity en = ids[0].Open(OpenMode.ForRead) as Entity)
- {
- FullSubentityPath path = new FullSubentityPath(ids.ToArray(), SubentityId.Null);
- en.Highlight(path, true);
- ed.GetString("\nДля продолжения нажмите ENTER...");
- en.Unhighlight(path, true);
- }
- #pragma warning restore
- }
- }
- }
- }
Автор: Александр Ривилис
Опубликовано 14.04.2021
Опубликовано 14.04.2021