Передача/получение координат

Автор Тема: Передача/получение координат  (Прочитано 3817 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Как получить/передать координаты из/в связанных файлов? (на ленте: Управление/Координаты/Получить/Передать координаты)

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #1 : 27-08-2019, 09:14:23 »
Нашел.
Код - C# [Выбрать]
  1. doc.PublishCoordinates(LinkElementId locationId )

здесь из LinkDocument получаем ProjectLocations  , который из них нужно подать в PublishCoordinates ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #2 : 27-08-2019, 12:54:52 »
здесь из LinkDocument получаем ProjectLocations  , который из них нужно подать в PublishCoordinates ?

да, всё верно. Используем конструктор
Код - C# [Выбрать]
  1. public LinkElementId(
  2.         ElementId linkInstanceId,
  3.         ElementId elementId
  4. )

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #3 : 27-08-2019, 13:21:43 »
 Как у одного документа может быть несколько ProjectLocations ( а не один) ? Мне кажется ProjectLocation  связан с базовой точкой проекта ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #4 : 27-08-2019, 13:32:53 »
А почему нет?



Есть Document.ActiveProjectLocation

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #5 : 27-08-2019, 13:39:04 »
 Тема с этим вопросом была создана как предположение, что нужно синхронизировать координаты связанных файлов и текущего проекта , чтобы устранить следующую неприятность:

Из связанного документа берется linkElement.getBoundingBox(null) => получаю  Solid этого BoundingBox в модели, который смещен относительно исходного linkElement
Какая может быть в этом причина?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #6 : 27-08-2019, 13:54:38 »
RevitLinkInstance.GetTotalTransform.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #7 : 27-08-2019, 13:56:27 »
А дальше   :D

Отмечено как Решение enot 27-08-2019, 14:18:22

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #8 : 27-08-2019, 14:00:38 »
Ну как маленький, правда  :D Шучу.

Берём Ваш Solid и трансформируем его:
Код - C# [Выбрать]
  1. var transformedSolid = SolidUtils.CreateTransformed(revitLinkInstance.GetTotalTransform());

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #9 : 27-08-2019, 14:16:10 »
Все работает прекрасно !
Александр, огромное Вам Спасибо!!

GetTotalTransform()
Прокомментируйте пожалуйста, что мы получаем этой операцией ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #10 : 27-08-2019, 14:57:05 »
Цитировать
Gets the total transform, which includes the true north transform for instances like import instances.

Перемещение и поворот инстанса связанного файла

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #11 : 27-08-2019, 15:05:53 »
А возможно ли сделать CreateTransformed не для Solid , а для самого LinkElement ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #12 : 27-08-2019, 16:36:57 »
Ну вообще говоря, элементы модели можно двигать и вращать, ElementTransformUtils в помощь, разве что, при работе со связанными файлами нужно сначала выгрузить файл, изменить, сохранить, подгрузить обратно.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #13 : 27-08-2019, 17:04:24 »
Получаю например LinkElement
когда получаю его linkElement.getBoundingBox(null) => то он получается смещенным относительно элемента , верно?  (это я проверяю путем экспорта его в модель в качестве Solid)

Вот и думаю , можно ли LinkElement  сразу получить в координатах модели (и его linkElement.getBoundingBox(null) соответственно тоже ) ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #14 : 27-08-2019, 17:09:50 »
Вариант 1. Зная Transform и исходный Bounding box, повернуть его. Transform.OfPoint в помощь
Вариант 2. Получить геометрию элемента. Autodesk.Revit.DB.GeometryElement содержит методы GetTransformed и GetBoundingBox. В принципе, в подавляющем большинстве случаев - вполне рабочий метод, но BoundingBox элемента иногда бывает больше BoundingBox-а его геометрии.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Передача/получение координат
« Ответ #15 : 27-08-2019, 17:31:57 »
Когда говорится о Transform , GetTransformed и т.п. всегда имеется ввиду работа с элементом в связанном документе ? 

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Передача/получение координат
« Ответ #16 : 29-08-2019, 11:15:33 »
Нет