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

ADN Club => Revit API => Тема начата: Iurii от 24-02-2020, 20:01:07

Название: Как установить светильник ?
Отправлено: Iurii от 24-02-2020, 20:01:07
Опыта программирования под Revit ARI нет, пользуясь вашей ссылкой на уроки Autodesk попытался расставить хотя бы 1 светильник в выбранных помещениях. Но они ставятся на пол. В этом форуме нашёл попытки решить эту проблему, но она не была решена. Попытался в меру сил найти на английском, нашёл:
 https://thebuildingcoder.typepad.com/blog/2009/08/electrical-settings-and-lighting-fixtures.html
но, я не смог полностью разобраться в логике, и я так понимаю там устаревший диалект C#.
Короче, мне необходимо установить светильники на потолок (в помещениях фальш-потолки, семейство именно "Многослойные потолки").
Алгоритм расстановки я придумал, не понимаю, как установить светильник в конкретную позицию на потолке. Уже потихоньку пару недель над этим сижу, продвижек нет.
Спасибо заранее.
Название: Re: Как установить светильник ?
Отправлено: Agens от 25-02-2020, 09:27:35
используется метод https://www.revitapidocs.com/2015/7febcfdb-dbfa-317a-1c5e-882621f3e846.htm, XYZ location...
Название: Re: Как установить светильник ?
Отправлено: Александр Игнатович от 25-02-2020, 10:26:18
Ну тут с азов надо начинать. Светильники - это пользовательские семейства. Пользовательские семейства могут поддерживать различные опции размещения. Светильники, вероятнее всего, реализованы как семейства на основе грани. Сначала посмотри, как они работают в UI, потом глянь значение свойства Family.FamilyPlacementType.

Дальше смотрим в API методы для размещения семейства - NewFamilyInstance, видим, что там их аж 12 штук. Сразу отбрасываем 4 - где идёт речь о размещении семейства на основе линии, в оставшихся 8 смотрим, где речь идёт о host-овых элементах. Да, можно попробовать использовать метод из совета Агента выше, если работает - хорошо, если нет, или ожидаемый результат отличается от желаемого  - окей, остается 2 метода:
Код - C# [Выбрать]
  1. public FamilyInstance NewFamilyInstance(
  2.         Face face,
  3.         XYZ location,
  4.         XYZ referenceDirection,
  5.         FamilySymbol symbol
  6. )
Здесь обрати внимание, что пишут в SDK насчёт параметра referenceDirection. Начни со значения XYZ.Zero/

И 2 метод:
Код - C# [Выбрать]
  1. public FamilyInstance NewFamilyInstance(
  2.         Reference reference,
  3.         XYZ location,
  4.         XYZ referenceDirection,
  5.         FamilySymbol symbol
  6. )

Он тебе может пригодиться позже, когда потребуется размещать семейства на поверхностях элементов из связанных файлов.