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

ADN Club => Revit API => Тема начата: enot от 27-08-2019, 09:08:38

Название: Передача/получение координат
Отправлено: enot от 27-08-2019, 09:08:38
Как получить/передать координаты из/в связанных файлов? (на ленте: Управление/Координаты/Получить/Передать координаты)
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 09:14:23
Нашел.
Код - C# [Выбрать]
  1. doc.PublishCoordinates(LinkElementId locationId )

здесь из LinkDocument получаем ProjectLocations  , который из них нужно подать в PublishCoordinates ?
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 27-08-2019, 12:54:52
здесь из LinkDocument получаем ProjectLocations  , который из них нужно подать в PublishCoordinates ?

да, всё верно. Используем конструктор
Код - C# [Выбрать]
  1. public LinkElementId(
  2.         ElementId linkInstanceId,
  3.         ElementId elementId
  4. )
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 13:21:43
 Как у одного документа может быть несколько ProjectLocations ( а не один) ? Мне кажется ProjectLocation  связан с базовой точкой проекта ?
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 27-08-2019, 13:32:53
А почему нет?

(https://i.postimg.cc/Z9gkXWcY/project-locations.png) (https://postimg.cc/Z9gkXWcY)

Есть Document.ActiveProjectLocation
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 13:39:04
 Тема с этим вопросом была создана как предположение, что нужно синхронизировать координаты связанных файлов и текущего проекта , чтобы устранить следующую неприятность:

Из связанного документа берется linkElement.getBoundingBox(null) => получаю  Solid этого BoundingBox в модели, который смещен относительно исходного linkElement
Какая может быть в этом причина?
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 27-08-2019, 13:54:38
RevitLinkInstance.GetTotalTransform.
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 13:56:27
А дальше   :D
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 27-08-2019, 14:00:38
Ну как маленький, правда  :D Шучу.

Берём Ваш Solid и трансформируем его:
Код - C# [Выбрать]
  1. var transformedSolid = SolidUtils.CreateTransformed(revitLinkInstance.GetTotalTransform());
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 14:16:10
Все работает прекрасно !
Александр, огромное Вам Спасибо!!

GetTotalTransform()
Прокомментируйте пожалуйста, что мы получаем этой операцией ?
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 27-08-2019, 14:57:05
Цитировать
Gets the total transform, which includes the true north transform for instances like import instances.

Перемещение и поворот инстанса связанного файла
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 15:05:53
А возможно ли сделать CreateTransformed не для Solid , а для самого LinkElement ?
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 27-08-2019, 16:36:57
Ну вообще говоря, элементы модели можно двигать и вращать, ElementTransformUtils в помощь, разве что, при работе со связанными файлами нужно сначала выгрузить файл, изменить, сохранить, подгрузить обратно.
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 17:04:24
Получаю например LinkElement
когда получаю его linkElement.getBoundingBox(null) => то он получается смещенным относительно элемента , верно?  (это я проверяю путем экспорта его в модель в качестве Solid)

Вот и думаю , можно ли LinkElement  сразу получить в координатах модели (и его linkElement.getBoundingBox(null) соответственно тоже ) ?
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 27-08-2019, 17:09:50
Вариант 1. Зная Transform и исходный Bounding box, повернуть его. Transform.OfPoint в помощь
Вариант 2. Получить геометрию элемента. Autodesk.Revit.DB.GeometryElement содержит методы GetTransformed и GetBoundingBox. В принципе, в подавляющем большинстве случаев - вполне рабочий метод, но BoundingBox элемента иногда бывает больше BoundingBox-а его геометрии.
Название: Re: Передача/получение координат
Отправлено: enot от 27-08-2019, 17:31:57
Когда говорится о Transform , GetTransformed и т.п. всегда имеется ввиду работа с элементом в связанном документе ? 
Название: Re: Передача/получение координат
Отправлено: Александр Игнатович от 29-08-2019, 11:15:33
Нет