Load familySymbol

Автор Тема: Load familySymbol  (Прочитано 2314 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 0
Load familySymbol
« : 14-10-2018, 18:42:10 »
Надеюсь, я ещё не исчерпал Вашу доброту на сегодня.
Пользуюсь таким кодом. Все работает, балка устанавливается. Но мое визуальное я раздражает вид двутавра, и я решил поменять его на бетонную балку. С этим есть проблемы, т.к. в (out gotSymbol) летит null. Путь вроде указан верным. Error от "не могу загрузить файл" я не получаю. В чем проблема?
Так же, мне интересно, меняется ли путь до Library у разных ревитов и как мне получить в этом случае program_path до него?
Код - C# [Выбрать]
  1. Transaction t = new Transaction(activeDoc, "Create Beam");
  2.                 t.Start();
  3.                 Line line = Line.CreateBound(start/ 304.797, end / 304.797);
  4.                 FilteredElementCollector collector = new FilteredElementCollector(activeDoc);
  5.                 collector.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_StructuralFraming);
  6.                 FamilySymbol gotSymbol = collector.FirstElement() as FamilySymbol;
  7.                 gotSymbol.Activate();
  8.                 string filename = "C:\\ProgramData\\Autodesk\\RVT 2019\\Libraries\\Russia\\Каркас несущий\\Бетон\\Бетон-Балка прямоугольного сечения.rfa"
  9.                 // пробовал ещё @"C:\ProgramData\Autodesk\RVT 2019\Libraries\Russia\Каркас несущий\Бетон\Бетон-Балка прямоугольного сечения.rfa"
  10.                 activeDoc.LoadFamilySymbol(filename, "load"+gotSymbol.Id.ToString(), out gotSymbol);
  11.                
  12.                 FamilyInstance instance = activeDoc.Create.NewFamilyInstance(line, gotSymbol, level.level_Revit, Autodesk.Revit.DB.Structure.StructuralType.Beam);
  13.                 instance.get_Parameter(BuiltInParameter.Z_OFFSET_VALUE).Set(elevation / 304.797);
  14.                 t.Commit();

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Load familySymbol
« Ответ #1 : 14-10-2018, 19:17:02 »
вторым параметром метода LoadFamilySymbol должно идти имя типоразмера, Вы же ищете типоразмер семейства несущего каркаса в документе и его формируете имя с учетом его Id. Зачем?

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 0
Re: Load familySymbol
« Ответ #2 : 14-10-2018, 19:21:04 »
я думал второй параметр это новое имя для типа и хотел генерировать его для каждого созданного элемента.
Как здесь будет правильно написать эту строчку? И где посмотреть, как это делается для остальных элементов?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Load familySymbol
« Ответ #3 : 14-10-2018, 19:26:19 »
Ну вообще сначала стоит поискать семейство/типоразмер в проекте, если есть, то загружать заново как бы нет смысла. Вторым параметром указывается имя типоразмера из загружаемого семейства. В данном случае, только Вы знаете, как называется типоразмер в семействе, которое Вы пытаетесь загрузить

И где посмотреть, как это делается для остальных элементов?

а это я не понял

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 0
Re: Load familySymbol
« Ответ #4 : 14-10-2018, 19:32:50 »
И где посмотреть, как это делается для остальных элементов?
а это я не понял
Данных rfa файлов не загружено в проект. Я как раз пытаюсь их загрузить (во вкладке тип у балки не вываливается данный familysymbol). Поэтому логично было бы задавать ему имя, а не что-то по нему искать.
Для остальных элементов - колонн, плит перекрытия и т.п.
Откуда я знаю название типоразмера? Я должен его загрузить в проект ручками и посмотреть на какой-то параметр через revitLookup?

Отмечено как Решение Art 14-10-2018, 19:56:27

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Load familySymbol
« Ответ #5 : 14-10-2018, 19:44:44 »
Смотрите, у Вас есть семейство rfa файл. В нем задано несколько типоразмеров (откройте в редакторе семейств и посмотрите), семейство можно загрузить целиком (LoadFamily), либо если все типы не нужны, тогда уже LoadFamilySymbol, но тогда передаем конкретное имя типа. По "остальным элементам" - зависит от типа - колонны - пользовательские семейства, используем LoadFamily / LoadFamilySymbol, перекрытия - системные семейства, получаем существующий тип, вызываем метод Duplicate - создаем новый и настраиваем параметры