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

24/10/2016

Как в .NET выбрать грани 3DSOLID и изменить им цвет.

Недавно мы обсуждали как это сделать средствами ObjectARX. Сегодня рассмотрим, как это делается в .NET API:

Код - C#: [Выделить]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.Colors;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.DatabaseServices;
  6. using Autodesk.AutoCAD.Geometry;
  7. using Autodesk.AutoCAD.EditorInput;
  8.  
  9. #pragma warning disable 0618
  10.  
  11. [assembly: CommandClass(typeof(Rivilis.ChangeFaceColor))]
  12.  
  13. namespace Rivilis
  14. {
  15.   public class ChangeFaceColor
  16.   {
  17.     [CommandMethod("ChgFaceColor")]
  18.     public void ChgFaceColor()
  19.     {
  20.       Document doc = Application.DocumentManager.MdiActiveDocument;
  21.       if (doc == null)
  22.         return;
  23.       Editor ed = doc.Editor;
  24.       PromptSelectionOptions pso = new PromptSelectionOptions();
  25.       pso.ForceSubSelections = true;
  26.       // Фильтр только твердые тела - 3DSOLID
  27.       SelectionFilter flt =
  28.         new SelectionFilter(new TypedValue[] { new TypedValue((int)DxfCode.Start, "3DSOLID") });
  29.       PromptSelectionResult prs = ed.GetSelection(pso, flt);
  30.       if (prs.Status != PromptStatus.OK)
  31.         return;
  32.       SelectedObject[] sobjs = new SelectedObject[prs.Value.Count];
  33.       // Из набора получаем всю информацию об отобранных подобъектах
  34.       prs.Value.CopyTo(sobjs, 0);
  35.       foreach (SelectedObject so in sobjs)
  36.       {
  37.         SelectedSubObject[] subObjs = so.GetSubentities();
  38.         foreach (SelectedSubObject subObj in subObjs)
  39.         {
  40.           FullSubentityPath path = subObj.FullSubentityPath;
  41.           using (Solid3d sol = so.ObjectId.Open(OpenMode.ForWrite) as Solid3d)
  42.           {
  43.             // Меняем цвет выбранным граням
  44.             sol.SetSubentityColor(path.SubentId, Color.FromColorIndex(ColorMethod.ByAci, 1));
  45.           }
  46.         }
  47.       }
  48.      }
  49.   }
  50. }

 

Так выглядит работа команды ChgFaceColor:

Автор: Александр Ривилис

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

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