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

ADN Club => Revit API => Тема начата: Павел Тер-Микаэлян от 02-02-2018, 14:01:33

Название: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 14:01:33
Добрый день. Подскажите пожалуйста, есть такое семейство:
MP_Kermi_Profil-K(22,33).rfa (http://fayloobmennik.cloud/7188250)
В нем нельзя удалять элементы, в частности, надпись с названием фирмы, которую разработчики сделали импортированной геометрией и занесли в шаблон семейства.
Этот способ:
Код - C# [Выбрать]
  1. ICollection<ElementId> ElementIds= new FilteredElementCollector(doc)
  2.                                          .OfCategory(BuiltInCategory.OST_MechanicalEquipment).ToElementIds();
  3. doc.Delete(ElementIds);
  4.  
находит 3 элемента и выдает ошибку при удалении: One or more of the elementIds cannot be deleted.
     Данная проблема стоит остро в нашей фирме, т.к. передаваемые нам семейства от этих разработчиков не могут быть использованы при разработке документации и приходится тратить много времени на переделку этих семейств.
     Может у вас будут какие-нибудь идеи как удалить эту надпись или скрыть при оформлении документации?
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Виктор Чекалин от 02-02-2018, 14:25:46
Pabloa, судя по всему, тут проблема не в API. Я и в интерфейсе не могу удалить эту надпись.
(https://s14.postimg.org/vel2p9n3x/2018-02-02_16_23_20-_Autodesk_Revit_2018_-_Not_For_Resale_Version.png) (https://postimg.org/image/vel2p9n3x/)

А приведенный код удалит и сам радиатор, так как он тоже Mechanical Equipment. Нужно по другому определить эту надпись
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 14:31:28
Я тоже не смог удалить надпись в самой программе. Дал BIM'ам поиграться =)

Кстати, вдогонку - в этом семействе есть еще параметры Company и Copyright, которые я также не смог найти и удалить
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 14:41:58
Pabloa, судя по всему, тут проблема не в API. Я и в интерфейсе не могу удалить эту надпись.


А приведенный код удалит и сам радиатор, так как он тоже Mechanical Equipment. Нужно по другому определить эту надпись
В интерфейсе не удаляется, да, забыл сказать.
А в какой категории эта надпись я пока не понял. Но думаю, даже если найти ее, все равно doc.delete так же не сработает
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 15:22:25
Про параметры я наврал - я их сразу не увидел просто)
А вот не удаляемый элемент - это интересно. Ни вручную, ни программно не удаляется. Как создать такой - мы пока тоже не нашли. Но задачка интересная (в плане - сделать также) - будем думать
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 16:20:12
Данная проблема стоит остро в нашей фирме, т.к. передаваемые нам семейства от этих разработчиков не могут быть использованы при разработке документации и приходится тратить много времени на переделку этих семейств.
     Может у вас будут какие-нибудь идеи как удалить эту надпись или скрыть при оформлении документации?
А я не понял вот - в каком месте её видно?
Я вижу её только внутри редактора семейства - в документации (на листах или видах) я ее не вижу
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 17:17:59
А я не понял вот - в каком месте её видно?
Я вижу её только внутри редактора семейства - в документации (на листах или видах) я ее не вижу
Действительно, не видно в проекте. Неправильно меня информировали) Вопрос стоит в том, что фирма может предъявить претензии на основе нарушения авторского права, если не удалить эти надписи. Этих семейств 2000 в проекте. Заказчик требует BIM модель, которая не будет содержать идентификаторов каких-то сторонних организаций. Сторонняя организация делала для нас Архитектурную часть, но удалять эти надписи отказалась.
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 17:27:16
Есть лайфхак, как эту надпись "убрать", не удаляя самого элемента. Вся фишка заключается в том, что ему можно заменить геометрию.
Я проводил тесты с вашим семейством так:
Код - C# [Выбрать]
  1. using Autodesk.Revit.Attributes;
  2. using Autodesk.Revit.DB;
  3. using Autodesk.Revit.UI;
  4.  
  5. namespace Revit_PlanDimensions
  6. {
  7.     [Transaction(TransactionMode.Manual)]
  8.     [Regeneration(RegenerationOption.Manual)]
  9.     public class Test : IExternalCommand
  10.     {
  11.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  12.         {
  13.             var doc = commandData.Application.ActiveUIDocument.Document;
  14.             using (Transaction tr = new Transaction(doc, "TEST"))
  15.             {
  16.                 tr.Start();
  17.  
  18.                 var el = doc.GetElement(new ElementId(14082675)) as FreeFormElement;
  19.                 var el2 = doc.GetElement(new ElementId(14082241));
  20.                
  21.                 foreach (GeometryObject geometryObject in el2.get_Geometry(new Options()))
  22.                 {
  23.                     if (geometryObject is Solid solid)
  24.                     {
  25.                         el?.UpdateSolidGeometry(solid);
  26.                         break;
  27.                     }
  28.                 }
  29.                 tr.Commit();
  30.             }
  31.             return Result.Succeeded;
  32.         }
  33.     }
  34. }
Здесь: 14082675 - идентификатор того самого неудаляемого элемента, 14082241 - идентификатор элемента выдавливания, которым создано оборудование. Радиатор короче =)
После работы кода неудаляемый элемент меняет свою форму на форму оборудования.
Это вот идея, от которой вы можете отталкиваться. Например, можно создать полый элемент выдавливания с размерами 1х1х1 (меньше нельзя) и заменить на его геометрию. Этот элемент потом хрен найдешь в семействе =))
Проблема только в том, что этот код работает при запуске в редакторе семейства. На счет того, чтобы провернуть трюк прям из документа - я не уверен что можно
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 17:38:45
Здесь: 14082675 - идентификатор того самого неудаляемого элемента, 14082241 - идентификатор элемента выдавливания, которым создано оборудование. Радиатор короче =)
После работы кода неудаляемый элемент меняет свою форму на форму оборудования.
Это вот идея, от которой вы можете отталкиваться. Например, можно создать полый элемент выдавливания с размерами 1х1х1 (меньше нельзя) и заменить на его геометрию. Этот элемент потом хрен найдешь в семействе =))
Проблема только в том, что этот код работает при запуске в редакторе семейства. На счет того, чтобы провернуть трюк прям из документа - я не уверен что можно
Ого, вот это да)) Спасибо громадное))) вы просто гений)))) бегу тестировать))))
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 18:04:41
Александр Пекшев aka Modis, Все получилось, только почему-то надпись удаляется, а не заменяется) Так даже лучше, только я не понял почему.
Этот блок я по другому переписал, а все остальное осталось
Код - C# [Выбрать]
  1.  if (geometryObject is Solid)
  2.                     {
  3.                         el?.UpdateSolidGeometry((Solid)geometryObject);
  4.                         break;
  5.                     }
  6.  
В любом случае, большое вам спасибо :)))
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 18:06:45
Все получилось, только почему-то надпись удаляется, а не заменяется)
Она не удаляется, а становится на тоже самое место, где находится элемент из которого вы брали solid. Если брали из радиатора, то просто подвиньте мышкой радиатор и увидите там второй такой-же, только полый
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 18:08:07
Этот блок я по другому переписал
Зачем?
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 18:10:44
Зачем?
вот здесь if (geometryObject is Solid solid) подчеркивает красным solid, может у меня c# не той версии
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 18:11:22
Она не удаляется, а становится на тоже самое место, где находится элемент из которого вы брали solid. Если брали из радиатора, то просто подвиньте мышкой радиатор и увидите там второй такой-же, только полый
Точно) спасибо))
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 18:12:10
может у меня c# не той версии
100%. Это добавили в одной из последних версий
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 18:20:11
Александр Пекшев aka Modis, А вы не поняли каким образом вставляются такие геометрии в семейство? Через "Импорт Сапр" не так загружает геометрию.
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 18:22:45
Александр Пекшев aka Modis, А вы не поняли каким образом вставляются такие геометрии в семейство? Через "Импорт Сапр" не так загружает геометрию.
Понял конечно =)
Точнее нашёл - Delete is unavailable for some Elements in a Revit Family (http://revitclinic.typepad.com/my_weblog/2011/03/delete-is-unavailable-for-some-elements-in-a-revit-family.html)
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 18:30:58
Понял конечно =)
Точнее нашёл - Delete is unavailable for some Elements in a Revit Family
Но только там показывается как создаются шаблоны семейств, то есть просто переименованием расширения, а вот как в само семейство, на основе которого создается шаблон, вставить этот FreeFormElement?
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Александр Пекшев aka Modis от 02-02-2018, 18:36:37
Понял конечно =)
Точнее нашёл - Delete is unavailable for some Elements in a Revit Family
Но только там показывается как создаются шаблоны семейств, то есть просто переименованием расширения, а вот как в само семейство, на основе которого создается шаблон, вставить этот FreeFormElement?
Сам FreeFormElement также можно создать программно. Для его создания нужен только один solid (http://www.revitapidocs.com/2018.1/a8aa4123-03a0-14c7-f4e5-7bc5a076aa8d.htm).
Ну а создать солид нужной геометрии (точнее - полый элемент выдавливания. Ему в эскизе можно задать сколько угодно замкнутых контуров) - это уже дело техники
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: Павел Тер-Микаэлян от 02-02-2018, 18:49:28
Сам FreeFormElement также можно создать программно. Для его создания нужен только один solid.
Ну а создать солид нужной геометрии (точнее - полый элемент выдавливания. Ему в эскизе можно задать сколько угодно замкнутых контуров) - это уже дело техники
Ясно) спасибо) На все вопросы ответили))) ... так сразу и не догадаешься UpdateSolidGeometry использовать)) ... странно, что не сделали метода для удаления..
Название: Re: Удаление элементов семейства, созданных в шаблоне семейства
Отправлено: glusch от 09-10-2020, 09:49:59
Добрый день.
Возможно ли удалить из семейства опирание на грань (перекрытие или стена)? Или может есть варианты копирования семейства со всеми типоразмерами и зависимостями в чистый шаблон?