24/10/2016
Как в .NET выбрать грани 3DSOLID и изменить им цвет.
Недавно мы обсуждали как это сделать средствами ObjectARX. Сегодня рассмотрим, как это делается в .NET API:
Код - C#: [Выделить]
- using System;
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.Colors;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Geometry;
- using Autodesk.AutoCAD.EditorInput;
- #pragma warning disable 0618
- [assembly: CommandClass(typeof(Rivilis.ChangeFaceColor))]
- namespace Rivilis
- {
- public class ChangeFaceColor
- {
- [CommandMethod("ChgFaceColor")]
- public void ChgFaceColor()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null)
- return;
- Editor ed = doc.Editor;
- PromptSelectionOptions pso = new PromptSelectionOptions();
- pso.ForceSubSelections = true;
- // Фильтр только твердые тела - 3DSOLID
- SelectionFilter flt =
- new SelectionFilter(new TypedValue[] { new TypedValue((int)DxfCode.Start, "3DSOLID") });
- PromptSelectionResult prs = ed.GetSelection(pso, flt);
- if (prs.Status != PromptStatus.OK)
- return;
- SelectedObject[] sobjs = new SelectedObject[prs.Value.Count];
- // Из набора получаем всю информацию об отобранных подобъектах
- prs.Value.CopyTo(sobjs, 0);
- foreach (SelectedObject so in sobjs)
- {
- SelectedSubObject[] subObjs = so.GetSubentities();
- foreach (SelectedSubObject subObj in subObjs)
- {
- FullSubentityPath path = subObj.FullSubentityPath;
- using (Solid3d sol = so.ObjectId.Open(OpenMode.ForWrite) as Solid3d)
- {
- // Меняем цвет выбранным граням
- sol.SetSubentityColor(path.SubentId, Color.FromColorIndex(ColorMethod.ByAci, 1));
- }
- }
- }
- }
- }
- }
Так выглядит работа команды ChgFaceColor:
Автор: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=7407
Опубликовано 24.10.2016