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

ADN Club => Revit API => Тема начата: Anatoly от 29-07-2017, 10:50:20

Название: Как получить координаты Solid?
Отправлено: Anatoly от 29-07-2017, 10:50:20
Здравствуйте.
Нужно получить координаты в модели Solid'а.
В частности, координаты центра типа BoundingBox(min+max)/2
Через .GetBoundingBox() всегда получаются координаты центра равные 0,0,0, где бы тело не находилось.
Название: Re: Как получить координаты Solid?
Отправлено: Александр Ривилис от 29-07-2017, 13:36:44
Виктор Чекалин сейчас в отпуске, так что придётся немного подождать.
Пока уточните:
1) Код, которым вы пытаетесь получить GetBoundingBox.
2) Версию Revit, так как если мне не изменят память в Revit 2013 был баг в этом методе.
Название: Re: Как получить координаты Solid?
Отправлено: Anatoly от 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.  
Название: Re: Как получить координаты Solid?
Отправлено: Александр Ривилис от 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
Название: Re: Как получить координаты Solid?
Отправлено: Anatoly от 30-07-2017, 23:09:46
Судя по всему .GetBoundingBox() возвращает значения в локальной системе координат Solid'a,
где центр всегда в точке 0.0,0.
Поэтому нужен перевод в координатную систему проекта.
Вопрос как?

Пока перебором точек вершин граней Solid'a нашел Min и Max точки (у них координаты реальные), и по ним центр.
Название: Re: Как получить координаты Solid?
Отправлено: Александр Ривилис от 30-07-2017, 23:55:54
Интересно, а метод Solid.ComputeCentroid не даёт тебе нужный результат?
Кстати, у BoundingBoxXYZ есть свойство Transform, которое (по описанию) как раз и должно быть матрицей преобразования из системы координат BoundingBoxXYZ в систему координат модели.
Т.е. тебе все координаты нужно преобразовать по матрице boxs.Transform
Название: Re: Как получить координаты Solid?
Отправлено: Anatoly от 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 знаке после запятой.
Спасибо
Название: Re: Как получить координаты Solid?
Отправлено: Александр Ривилис от 31-07-2017, 15:59:50
Можно считать, что проблема решена?
Название: Re: Как получить координаты Solid?
Отправлено: Anatoly от 31-07-2017, 16:47:50
Да, спасибо