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

ADN Club => Revit API => Тема начата: Art от 14-10-2018, 18:42:10

Название: Load familySymbol
Отправлено: Art от 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();
Название: Re: Load familySymbol
Отправлено: Александр Игнатович от 14-10-2018, 19:17:02
вторым параметром метода LoadFamilySymbol должно идти имя типоразмера, Вы же ищете типоразмер семейства несущего каркаса в документе и его формируете имя с учетом его Id. Зачем?
Название: Re: Load familySymbol
Отправлено: Art от 14-10-2018, 19:21:04
я думал второй параметр это новое имя для типа и хотел генерировать его для каждого созданного элемента.
Как здесь будет правильно написать эту строчку? И где посмотреть, как это делается для остальных элементов?
Название: Re: Load familySymbol
Отправлено: Александр Игнатович от 14-10-2018, 19:26:19
Ну вообще сначала стоит поискать семейство/типоразмер в проекте, если есть, то загружать заново как бы нет смысла. Вторым параметром указывается имя типоразмера из загружаемого семейства. В данном случае, только Вы знаете, как называется типоразмер в семействе, которое Вы пытаетесь загрузить

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

а это я не понял
Название: Re: Load familySymbol
Отправлено: Art от 14-10-2018, 19:32:50
И где посмотреть, как это делается для остальных элементов?
а это я не понял
Данных rfa файлов не загружено в проект. Я как раз пытаюсь их загрузить (во вкладке тип у балки не вываливается данный familysymbol). Поэтому логично было бы задавать ему имя, а не что-то по нему искать.
Для остальных элементов - колонн, плит перекрытия и т.п.
Откуда я знаю название типоразмера? Я должен его загрузить в проект ручками и посмотреть на какой-то параметр через revitLookup?
Название: Re: Load familySymbol
Отправлено: Александр Игнатович от 14-10-2018, 19:44:44
Смотрите, у Вас есть семейство rfa файл. В нем задано несколько типоразмеров (откройте в редакторе семейств и посмотрите), семейство можно загрузить целиком (LoadFamily), либо если все типы не нужны, тогда уже LoadFamilySymbol, но тогда передаем конкретное имя типа. По "остальным элементам" - зависит от типа - колонны - пользовательские семейства, используем LoadFamily / LoadFamilySymbol, перекрытия - системные семейства, получаем существующий тип, вызываем метод Duplicate - создаем новый и настраиваем параметры