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

ADN Club => Revit API => Тема начата: Владимир Шу от 19-02-2020, 18:49:21

Название: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Владимир Шу от 19-02-2020, 18:49:21
Не получается записать в поле Host объекта FamilyInstance, ElementId элемента из связанного файла.

В коде это выглядит как то так:
Код - C# [Выбрать]
  1.       using (HostObject HostObj = HostDoc.GetElement(HostObjId) as HostObject)
  2.       {
  3.          FamilyInstance cutNew = Doc.Create.NewFamilyInstance(
  4.             InsertPoint,
  5.             FamilySqareFloor,
  6.              XYZ.BasisZ,
  7.             HostObj,
  8.             StructuralType.NonStructural);
  9.       }
HostObj  - объект из связанного файла
HostDoc - связанный файл
Doc - файл в котором создаю объект
Проблема в том, что в результате в cutNew.Host == null, а вроде как должно бы хоть что то и очень хочется, что бы ссылка была...

Может я что то не так делаю?
Как записать в экземпляр семейства ссылку на объект из связанного файла?

Off-Topic: показать
ЗЫ.
Проверка орфографии не знает русский язык
Название: Re: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Александр Игнатович от 19-02-2020, 18:58:37
Может я что то не так делаю?

Да :-)

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

Reference - ссылка на поверхность в связанном файле. Тебе еще понадобится метод:
Код - C# [Выбрать]
  1. Reference.CreateLinkReference
Название: Re: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Владимир Шу от 19-02-2020, 19:13:14
Ага, Спасибо. Опробую , отмечусь с решением.
Название: Re: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Александр Ривилис от 19-02-2020, 22:08:17
Off-Topic: показать
Off-Topic: hide
ЗЫ.
Проверка орфографии не знает русский язык
Случайно включилась - отключил её как класс.
Название: Re: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Владимир Шу от 20-02-2020, 14:27:58
Family cannot be placed as hosted on an input face reference, because its FamilyPlacementType is not WorkPlaneBased.
Я так понимаю, что это не со всякими семействами прокатывает и что делать бедолагам у который Family имеет FamilyPlacementType отличный от WorkPlaneBased, а к примеру OneLevelBased или OneLevelBasedHosted?
Название: Re: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Александр Игнатович от 20-02-2020, 15:49:02
Так такие семейства и через пользовательский интерфейс на элемент связанного файла не положишь
Название: Re: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Владимир Шу от 20-02-2020, 17:05:00
Звучит так, как будто моя задача не решаема... зайдем с другой стороны, мне нужно, что бы в том экземпляре семейства которое я создаю, была ссылка на хост объект из связанного файла и что бы я по этой ссылке потом смог найти этот объект работая уже внутри самого связанного файла.
Собственно может есть другое место куда можно сохранить эту ссылку и потом правильно идентифицировать хост объект?

Если проводить параллели с автокадом, то к примеру, что если у меня есть подложка XRef в каком то файле и поверх этой подложи я что то нарисовал привязавшись к объектам подложки, то я могу записать путь XRef-а и хендл объекта из  XRef-е к которому привязывался в XData созданного мной объекта и потом, скопировав этот объект внутрь файла подложки я могу  прочитать и найти объекты к которым привязывался...

Как то громоздко написал... применительно к Ревиту, это какие то временные построения инженеров, которые они не хотят делать сразу в основной модели.
Название: Re: Поле Host объекта FamilyInstance, не прописывается ID элемента
Отправлено: Александр Пекшев aka Modis от 25-02-2020, 17:43:29
Звучит так, как будто моя задача не решаема... зайдем с другой стороны, мне нужно, что бы в том экземпляре семейства которое я создаю, была ссылка на хост объект из связанного файла и что бы я по этой ссылке потом смог найти этот объект работая уже внутри самого связанного файла.
Собственно может есть другое место куда можно сохранить эту ссылку и потом правильно идентифицировать хост объект?

Если проводить параллели с автокадом, то к примеру, что если у меня есть подложка XRef в каком то файле и поверх этой подложи я что то нарисовал привязавшись к объектам подложки, то я могу записать путь XRef-а и хендл объекта из  XRef-е к которому привязывался в XData созданного мной объекта и потом, скопировав этот объект внутрь файла подложки я могу  прочитать и найти объекты к которым привязывался...

Как то громоздко написал... применительно к Ревиту, это какие то временные построения инженеров, которые они не хотят делать сразу в основной модели.
Тебе нужен Extensible Storage - part 1 (https://adndevblog.typepad.com/aec/2012/07/a-beginners-overview-to-extensible-storage-api.html), part 2 (https://adndevblog.typepad.com/aec/2012/07/a-beginners-overview-to-extensible-storage-api-part-22.html)
А у элемента из связанного файла лучше брать не Id, а UniqId