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

ADN Club => Revit API => Тема начата: sdv79 от 10-02-2021, 13:01:49

Название: Не используемые GraphicsStyle в семействах
Отправлено: sdv79 от 10-02-2021, 13:01:49
Как определить какие GraphicsStyle можно удалить из семейства?
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: Александр Игнатович от 10-02-2021, 14:09:18
На вскидку - найти элементы из семейства (new ElementIsElementTypeFilter(true) или collector.WhereElementIsNotElementType()), получить их геометрию (с учетом того, что некоторые из них - ViewSpecific, для таких нужно получать геометрию на их родном виде), рекурсивно собрать используемые GeometryObject.GraphicsStyleId), удалить все остальные GraphicsStyle-ы
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: sdv79 от 10-02-2021, 15:09:01
Также думал начать с геометрии - не выбирает геометрию в редакторе семейств
Код - C# [Выбрать]
  1.  
  2. new FilteredElementCollector(doc)
  3.       .WhereElementIsNotElementType()
  4.       .Where(w => w?.Category is { })
  5.       .ForEach(element =>
  6.       {
  7.                     Options options = new Options();
  8.                     options.ComputeReferences = true;
  9.                     options.IncludeNonVisibleObjects = true;
  10.                     if (element.Document.ActiveView != null)
  11.                         options.View = element.Document.ActiveView;
  12.                     else
  13.                         options.DetailLevel = ViewDetailLevel.Fine;
  14.                     var geoElem = element.get_Geometry(options); // выдает null
  15. }
  16.  
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: Александр Игнатович от 10-02-2021, 15:18:41
Во первых, при чем тут element.Document.ActiveView? Смотреть нужно по OwnerViewId.

Во-вторых, для ряда элементов геометрию может и не вернуть, группа например, или метка, как бы и норм.
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: sdv79 от 10-02-2021, 16:32:41
все равно null
Код - C# [Выбрать]
  1.            new FilteredElementCollector(doc)
  2.                 .WhereElementIsNotElementType()
  3.                 .Where(w => w?.Category is { })
  4.                 .ForEach(element =>
  5.                 {
  6.  
  7.                     if (doc.GetElement(element.OwnerViewId) is View view)
  8.                     {
  9.                         Options options = new()
  10.                         {
  11.                             View = view
  12.                         };
  13.  
  14.                         var geoElem = element.get_Geometry(options);  // выдает null
  15.                     }                  
  16.                 });
  17.  
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: Александр Игнатович от 10-02-2021, 16:47:10
для ряда элементов геометрию может и не вернуть, группа например, или метка
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: sdv79 от 10-02-2021, 16:52:29
Не выдает даже для линий((
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: Александр Игнатович от 10-02-2021, 17:14:59
Это не "даже", это "для". Значит, для DetailLine-ов напрямую берем из свойства LineStyle
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: sdv79 от 10-02-2021, 18:45:35
Возможно у самого GraphicsStyle есть способ, который сигнализирует что он применен к элементу?
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: Александр Игнатович от 12-02-2021, 11:40:21
Нет
Название: Re: Не используемые GraphicsStyle в семействах
Отправлено: sdv79 от 12-02-2021, 13:56:07
Понятно. Спасибо.