Как получить координаты Solid?

Автор Тема: Как получить координаты Solid?  (Прочитано 3837 раз)

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Здравствуйте.
Нужно получить координаты в модели Solid'а.
В частности, координаты центра типа BoundingBox(min+max)/2
Через .GetBoundingBox() всегда получаются координаты центра равные 0,0,0, где бы тело не находилось.
« Последнее редактирование: 29-07-2017, 13:04:21 от Anatoly »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить координаты Solid?
« Ответ #1 : 29-07-2017, 13:36:44 »
Виктор Чекалин сейчас в отпуске, так что придётся немного подождать.
Пока уточните:
1) Код, которым вы пытаетесь получить GetBoundingBox.
2) Версию Revit, так как если мне не изменят память в Revit 2013 был баг в этом методе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Re: Как получить координаты Solid?
« Ответ #2 : 29-07-2017, 18:35:40 »
Revit 2015, Visual Studio 2015


Код - vb.net [Выбрать]
  1. ....
  2. Dim mysolid As Solid = CType(geomObj, Solid)
  3. ....
  4. Dim boxs As BoundingBoxXYZ =mysolid.GetBoundingBox()
  5.  
« Последнее редактирование: 29-07-2017, 20:29:21 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить координаты Solid?
« Ответ #3 : 29-07-2017, 20:35:42 »
1. Прочитай у меня в подписи про форматирование кода на форуме и соблюдай его в дальнейшем.
2. Какие значения boxs.Min.X, boxs.Min.Y, boxs.Min.Z и boxs.Max.X, boxs.Max.Y, boxs.Max.Z получаешь?
3. Здесь пример использования GetBoundingBox, который строит на его основе параллелепипед (Solid): http://thebuildingcoder.typepad.com/files/om_samplesplitboundingbox.zip
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Re: Как получить координаты Solid?
« Ответ #4 : 30-07-2017, 23:09:46 »
Судя по всему .GetBoundingBox() возвращает значения в локальной системе координат Solid'a,
где центр всегда в точке 0.0,0.
Поэтому нужен перевод в координатную систему проекта.
Вопрос как?

Пока перебором точек вершин граней Solid'a нашел Min и Max точки (у них координаты реальные), и по ним центр.

Отмечено как Решение Александр Ривилис 31-07-2017, 16:00:15

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить координаты Solid?
« Ответ #5 : 30-07-2017, 23:55:54 »
Интересно, а метод Solid.ComputeCentroid не даёт тебе нужный результат?
Кстати, у BoundingBoxXYZ есть свойство Transform, которое (по описанию) как раз и должно быть матрицей преобразования из системы координат BoundingBoxXYZ в систему координат модели.
Т.е. тебе все координаты нужно преобразовать по матрице boxs.Transform
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Re: Как получить координаты Solid?
« Ответ #6 : 31-07-2017, 15:21:28 »
Да, действительно, и по точкам вершин, и центроид и
Код - vb.net [Выбрать]
  1. Dim bboxTransformed As Transform = intobj.GetBoundingBox.Transform
  2. Dim ptc As XYZ = bboxTransformed.Origin
выдают один результат, разница в 6-7 знаке после запятой.
Спасибо

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить координаты Solid?
« Ответ #7 : 31-07-2017, 15:59:50 »
Можно считать, что проблема решена?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
Re: Как получить координаты Solid?
« Ответ #8 : 31-07-2017, 16:47:50 »
Да, спасибо