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

ADN Club => Revit API => Тема начата: Олег от 05-02-2018, 12:28:09

Название: создать Round Duct
Отправлено: Олег от 05-02-2018, 12:28:09
Добрый день всем.
Вопрос может простой но я не смог сходу найти ответа.
Нужно в коде создавать круглые воздуховоды.
Подскажите пожалуйста куда смотреть ?
спасибо
Название: Re: создать Round Duct
Отправлено: Александр Пекшев aka Modis от 05-02-2018, 12:36:59
Не пробовал сам, но могу предположить, что для круглого нужно задать диаметр, а прямоугольного - высоту и ширину. А Ревит там сам уже разберется. Вот вроде похожая тема (https://forums.autodesk.com/t5/revit-api-forum/how-to-set-and-retrieve-a-size-of-created-ducts-with-api/td-p/4335642).
Название: Re: создать Round Duct
Отправлено: Олег от 05-02-2018, 12:38:19
спасибо.  интересная мысль. счас проверю

 :D
Название: Re: создать Round Duct
Отправлено: Олег от 05-02-2018, 12:46:25
после создания Duct он сразу стал квадратным
и конечно параметер диаметр отсутствует
Название: Re: создать Round Duct
Отправлено: WhiteShark от 05-02-2018, 13:00:35
Установите сначала дефолтный тип семейства для категории воздуховодов равный вашему желаемому а потом уже создавайте воздуховод. Типа того

Код - C# [Выбрать]
  1. private void SetDefaultTypeFromduct(Document document, FamilyInstance duct)
  2. {
  3.     ElementId ductCategoryId = new ElementId(BuiltInCategory.OST_Ducts);
  4.  
  5.     // It is necessary to test the type suitability to be a default family type, for not every type can be set as default.
  6.     // Trying to set a non-qualifying default type will cause an exception
  7.     if (duct.Symbol.IsValidDefaultFamilyType(ductCategoryId))
  8.     {
  9.         document.SetDefaultFamilyTypeId(ductCategoryId, duct.Symbol.Id);
  10.     }
  11. }
Название: Re: создать Round Duct
Отправлено: Алексей Кузин от 05-02-2018, 13:04:24
А как вы создаете дакт?

Код - C# [Выбрать]
  1. Duct.Create(doc, systemType.Id, ductType.Id, level.Id, start, end)

ductType.Id - это и есть тип дакта.

для поиска нужного типа могу предложить вот этот подход


       
Код - C# [Выбрать]
  1. public static List<DuctType> GetDuctTypes(this Document doc)
  2.         {
  3.             var collector = new FilteredElementCollector(doc);
  4.             collector.WherePasses(new ElementClassFilter(typeof(DuctType)));
  5.             return collector.OfType<DuctType>().ToList();
  6.         }
  7.  
  8.         private static List<DuctType> GetDuctTypes(Document doc, string shapeType)
  9.         {
  10.             var result = new List<DuctType>();
  11.             foreach (var type in doc.GetDuctTypes())
  12.             {
  13.                 var shapeName = type.get_Parameter(BuiltInParameter.ALL_MODEL_FAMILY_NAME);
  14.  
  15.                 if (shapeName.AsString() == shapeType)
  16.                 {
  17.                     result.Add(type);
  18.                 }
  19.             }
  20.  
  21.             return result;
  22.         }


где shapeType один из вариантов - "Rectangular Duct", "Round Duct", "Oval Duct". В результате получите список типов дактов нужного shape. А после создания уже у экземплята изменяете его размеры. в вашем случае диаметр.
Название: Re: создать Round Duct
Отправлено: Олег от 05-02-2018, 13:12:28
создаю через NewDuct
Название: Re: создать Round Duct
Отправлено: Алексей Кузин от 05-02-2018, 13:14:54
в методе NewDuct, если не ошибаюсь, тоже можно передавать DuctType.
Как получить нужный написано выше.

А вообще этот метод вроде как устаревший, помечен как obsolete в 2017 версии.
Название: Re: создать Round Duct
Отправлено: Олег от 05-02-2018, 13:16:14
верно.  есть такое. спасибо за ответ. счас попробую