Не используемые GraphicsStyle в семействах

Автор Тема: Не используемые GraphicsStyle в семействах  (Прочитано 3074 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Как определить какие GraphicsStyle можно удалить из семейства?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
На вскидку - найти элементы из семейства (new ElementIsElementTypeFilter(true) или collector.WhereElementIsNotElementType()), получить их геометрию (с учетом того, что некоторые из них - ViewSpecific, для таких нужно получать геометрию на их родном виде), рекурсивно собрать используемые GeometryObject.GraphicsStyleId), удалить все остальные GraphicsStyle-ы

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Также думал начать с геометрии - не выбирает геометрию в редакторе семейств
Код - 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.  

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Во первых, при чем тут element.Document.ActiveView? Смотреть нужно по OwnerViewId.

Во-вторых, для ряда элементов геометрию может и не вернуть, группа например, или метка, как бы и норм.

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
все равно 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.  

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
для ряда элементов геометрию может и не вернуть, группа например, или метка

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Не выдает даже для линий((

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Это не "даже", это "для". Значит, для DetailLine-ов напрямую берем из свойства LineStyle

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Возможно у самого GraphicsStyle есть способ, который сигнализирует что он применен к элементу?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Нет

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Понятно. Спасибо.