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

14/04/2021

Как подсветить примитив внутри блока или внешней ссылки - NET

Вопрос: Для того чтобы подсветить примитив в текущем пространстве (Модели или Листа) достаточно воспользоваться методом Entity.Highlight(). А как подсветить примитив, который находится в составе блока (возможно вложенного блока) или во внешней ссылке?

Ответ:  Для этой цели следует воспользоваться методом Entity.Highhlight(FullSubentPath  subId), предварительно создав правильный FullSubentPath.

Ниже приведен код, который подсвечивает примитив внутри самого вложенного блока или внешней ссылки:

Код - C#: [Выделить]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;
  5. using System.Collections.Generic;
  6.  
  7. // This line is not mandatory, but improves loading performances
  8. [assembly: CommandClass(typeof(TestHighLight.MyCommands))]
  9.  
  10. namespace TestHighLight
  11. {
  12.   public class MyCommands
  13.   {
  14.     [CommandMethod("XHLight")]
  15.     public void XHLightHandler()
  16.     {
  17.       Document doc = Application.DocumentManager.MdiActiveDocument;
  18.       if (doc == null) return;
  19.       Editor ed = doc.Editor;
  20.       Database db = doc.Database;
  21.       PromptNestedEntityResult rs =
  22.         ed.GetNestedEntity("\nВыберите примитив: ");
  23.       if (rs.Status == PromptStatus.OK)
  24.       {
  25.         List<ObjectId> ids = new List<ObjectId>(rs.GetContainers());
  26.         ids.Reverse(); // Реверсируем коллекцию примитивов для подсветки
  27.         ids.Add(rs.ObjectId);
  28.         foreach (ObjectId id in ids)
  29.         {
  30.           ed.WriteMessage("\nId={0} Class={1} Database={2}", id,
  31.             id.ObjectClass.Name, id.Database.OriginalFileName);
  32.         }
  33. #pragma warning disable 0618
  34.         using (Entity en = ids[0].Open(OpenMode.ForRead) as Entity)
  35.         {
  36.           FullSubentityPath path = new FullSubentityPath(ids.ToArray(), SubentityId.Null);
  37.           en.Highlight(path, true);
  38.           ed.GetString("\nДля продолжения нажмите ENTER...");
  39.           en.Unhighlight(path, true);
  40.         }
  41. #pragma warning restore
  42.       }
  43.     }
  44.   }
  45. }
  46.  

 

Автор: Александр Ривилис
Опубликовано 14.04.2021