Вставка семейства

Автор Тема: Вставка семейства  (Прочитано 7273 раз)

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

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Вставка семейства
« : 23-05-2019, 15:57:17 »
Как правильно вставить семейство по координатам в Room?
Код - C# [Выбрать]
  1. FamilyInstance fm = document.Create.NewFamilyInstance(start_point, family, StructuralType.NonStructural);
вставляет в абсолютный ноль. Перемещение элемента не помогает.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Вставка семейства
« Ответ #1 : 23-05-2019, 16:21:39 »
Ну во-первых, в room семейства не вставляются. Они создаются непосредственно в модели, либо на host-е, либо на виде. Могу предположить, что:
а) либо start_point - это точка XYZ.Zero
б) либо использован не тот overload-метод для Вашего конкретного семейства
в) либо, если Вы работаете с созданным семейством дальше в коде, до вызова регенерации familyInstance.Location.Point будет показывать XYZ.Zero

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Вставка семейства
« Ответ #2 : 24-05-2019, 09:46:46 »
Александр Игнатович, про Room указала, т.к. если комнаты смежные у них стена (host) будет общий.
Точка рассчитывается и при передачи в функцию, дает нужные координаты.
Работаю дальше с семейством, чтобы внести данные в поля.
Вставляю вот так
Код - C# [Выбрать]
  1. document.Create.NewFamilyInstance(start_point, family, document.GetElement(elId), StructuralType.NonStructural);

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Вставка семейства
« Ответ #3 : 24-05-2019, 11:05:08 »
Да, тут нужно в зависимости от семейства нужный метод использовать, есть ещё варианты размещать на поверхности host-а (те overload-ы метода NewFamilyInstance, у которых первый параметр типа Face и Reference)

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Вставка семейства
« Ответ #4 : 27-05-2019, 10:16:38 »
Александр Игнатович, да, через хост получилось. Только возникла другая проблема: как вставить внутри комнаты семейство?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Вставка семейства
« Ответ #5 : 27-05-2019, 10:25:44 »
А в чём собственно состоит проблема? Ещё раз напомню, инстансы семейств создаются в пространстве модели (ну или на видах, если речь идёт о 2D-семействах, типа аннотаций или элементов узлов, но это явно не относится к этой задаче).

В зависимости от того, как построено семейство, нужно использовать соответствующий метод из overload-ов Document.NewFamilyInstance, т.е. семейство может вставляться просто в заданную точку, оно может быть на основе линии, либо с вариантами на поверхность некоторого host-а

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Вставка семейства
« Ответ #6 : 27-05-2019, 10:58:20 »


с другой стороны должен быть.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Вставка семейства
« Ответ #7 : 27-05-2019, 11:07:54 »
Попробуйте получить Reference методом HostObjectUtils.GetSideFaces и использовать метод
Код - C# [Выбрать]
  1. public FamilyInstance NewFamilyInstance(
  2.         Reference reference,
  3.         XYZ location,
  4.         XYZ referenceDirection,
  5.         FamilySymbol symbol
  6. )

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Вставка семейства
« Ответ #8 : 27-05-2019, 15:11:48 »
Исключение выбрасывает: Thrown when the function cannot get the face from the reference, or, when the Family cannot be placed as line-based on an input face reference, because its FamilyPlacementType is not WorkPlaneBased.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Вставка семейства
« Ответ #9 : 27-05-2019, 16:49:46 »
FamilyPlacementType is not WorkPlaneBased
Так может в этом дело?

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Вставка семейства
« Ответ #10 : 28-05-2019, 08:47:37 »
Александр Игнатович, ставить галочку в семействе и переделывать некоторые - не вариант.

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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Вставка семейства
« Ответ #11 : 28-05-2019, 09:36:08 »
Александр Игнатович, один вопрос: как можно найти ось середины стены и задать ее как Plane?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Вставка семейства
« Ответ #12 : 28-05-2019, 11:53:12 »
ставить галочку в семействе и переделывать некоторые - не вариант.

Значит, переписать код :-) Посмотрите свойство Family.FamilyPlacementType

один вопрос: как можно найти ось середины стены и задать ее как Plane?

Так, смотрите, на 95% API Revit-а позволяет только то, что можно сделать руками. Я, конечно, могу быть не прав, но work-plane-based семейства создаются только на поверхностях.

Смотрим свойство HostFace созданного экземпляра:


Теперь экспериментируем с получением из этой стенки Reference-а:


Т.е. всё как бы правильно, семейство расположено на Exterior face-е стенки

Если я, всё-таки, не прав, можете попробовать получить Reference как в этой статье:

https://thebuildingcoder.typepad.com/blog/2018/09/rebar-wall-centreline-core-and-grid-dimensioning.html







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

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Вставка семейства
« Ответ #13 : 06-06-2019, 13:28:45 »
Александр Игнатович, получилось через reference и отзеркаливание элемента.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Вставка семейства
« Ответ #14 : 06-06-2019, 14:39:15 »
 :) Супер