NewFamilyInstance и связанные файлы

Автор Тема: NewFamilyInstance и связанные файлы  (Прочитано 3083 раз)

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

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

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Здравствуйте!
Делаю первые шаги в RevitAPI, все пока понятно, но столкнулся с проблемой. Если у кого-нибудь есть свободная минутка, не откажите в любезности.

Есть некое семейство, сделанное как выдавливание. Все просто - окружность и высота. Цилиндр.
И есть некий документ со связью. В основном документе есть стена и в связанном документе есть стена.
Пытаюсь вставить этот цилиндр в стену (например, в центр стены). Как бы "Дыра" в центре стены.
Результаты:

1. Если NewFamilyInstance(XYZ,Symbol,StructuralType), то цилиндр стоит вертикально на нижнем торце стены и ничего с ним не сделать. То есть, координата Z обнуляется и привет. То же самое, если использую NewFamilyInstance c параметром host.

2. Если NewFamilyInstance(Face,...), то
а) в стену основного документа вставляется идеально;
б) при попытке вставить в стену связанного документа ошибка "Failed to create family instance on face".

Самое противное то, что вручную этот цилиндр прекрасно вставляется. В этом случае цилиндр в связанной стене имеет Host и HostFace. Чувствую, что и мне надо как-то задать ему поверхность стены как базу, но как? Он же отвергает Face из связанного документа!

Неделю пытался найти ответ, сдаюсь. Пните в нужную сторону, плиз.
Спасибо!

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: NewFamilyInstance и связанные файлы
« Ответ #1 : 06-04-2019, 12:13:30 »
Добрый день. Вам нужен другой оверлоад метода NewFamilyInstance:
Код - C# [Выбрать]
  1. public FamilyInstance NewFamilyInstance(
  2.         Reference reference,
  3.         XYZ location,
  4.         XYZ referenceDirection,
  5.         FamilySymbol symbol
  6. )

Из Face-а стены связанного файла берете Reference,  а лучше используйте HostObjectUtils.GetSideFaces, который сразу вернет Reference-ы. Из полученного Reference-а получаете новый методом:
Код - C# [Выбрать]
  1. public Reference CreateLinkReference(
  2.         RevitLinkInstance revitLinkInstance
  3. )

У него прям в описании указано:
Цитировать
The reference that is returned can be used to create a family instance on a face in an RVT link.

Всё должно получиться ;-)

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

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: NewFamilyInstance и связанные файлы
« Ответ #2 : 06-04-2019, 13:18:16 »
Вот спасибо, добрый человек! Как все просто оказалось.
А есть в природе какой-нибудь учебник по ревитовскому АПИ? Хотя бы азы?
Ведь до каждого чиха приходится своим горбом доходить.


И наберусь наглости еще для одного вопроса, который меня здорово достал.
У меня RevitAPI.dll версии 18.3.1.2, а когда ее ставлю в ссылки, студия принимает ее как 18.0.0.0. И, соответственно, начинаются проблемы. На само общение с АПИ не влияет, там все хорошо. А вот если, к примеру, как-то пересекается с BindingSource, начинает кричать, что не может найти. Как это народ побеждает? Пытался в GAC засунуть, говорит, что нестрогое имя.

Еще раз большое спасибо!

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: NewFamilyInstance и связанные файлы
« Ответ #3 : 06-04-2019, 13:43:43 »
А есть в природе какой-нибудь учебник по ревитовскому АПИ? Хотя бы азы?

Был отличный, но для Revit 2013, потом почему-то перестали в SDK включать. Вообще, кстати, в SDK достаточно много примеров в папке Samples. Ну и https://thebuildingcoder.typepad.com/blog/about-the-author.html - наше всё.

как-то пересекается с BindingSource

Речь про WPF?

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

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: NewFamilyInstance и связанные файлы
« Ответ #4 : 06-04-2019, 13:56:47 »
Цитировать
SDK достаточно много примеров в папке Samples
Да, я туда смотрел. Про связанные файлы не нашел. Видимо, плохо смотрел.

БилдингКодера почитываю, да. Хороший дядька :)

Цитировать
Речь про WPF?
Ну да. Вот надо мне, к примеру, показать список элементов с какими-то данными. Делаю класс MyClass, в нем Revit.DB.Element и все прочее, на форму бросаю  BindingSource, DataGrig. Потом пытаюсь сделать BindingSource.DataSource = typeof(MyClass), а оно ругается, что не может найти RevitAPI.dll.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: NewFamilyInstance и связанные файлы
« Ответ #5 : 06-04-2019, 14:11:10 »
Хороший дядька :)

Очень)

Могу быть где-то не совсем прав, но с WPF проблема только в VS, у него отображалка WPF-а 32-битная, а RevitAPI 64-битный + к тому же содержит как managed так и native код, при этом оно успешно компилируется и запускается. Для себя решаю тем, что создаю классы ViewModel-ей так, чтобы те свойства, которые где-то есть в разметке не были типов из RevitAPI.dll, т.е. что-то вроде
Код - C# [Выбрать]
  1. public string Name => SourceElement.Name

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

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Re: NewFamilyInstance и связанные файлы
« Ответ #6 : 06-04-2019, 14:16:23 »
Цитировать
не были типов из RevitAPI.dll
Ой-ёй-ёй :( Я этого боялся. Ну что-ж, придется так же кувыркаться. На досуге еще поборюсь, конечно. Если что придумаю, отпишу.