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

ADN Club => Revit API => Тема начата: enot от 22-03-2019, 10:05:41

Название: Переместить тела до пересечения
Отправлено: enot от 22-03-2019, 10:05:41
Решаема ли методами АПИ следующая задача:

есть два солида, необходимо сместить один из них в направлении другого по вектору линия которого соединяет их центры

(https://i.postimg.cc/G8tc0GTb/2019-03-22-10-01-13.png) (https://postimg.cc/G8tc0GTb)

до их соприкосновения

(https://i.postimg.cc/hzNRHwq0/2019-03-22-10-05-05.png) (https://postimg.cc/hzNRHwq0)
Название: Re: Переместить тела до пересечения
Отправлено: Александр Игнатович от 22-03-2019, 10:23:47
А чего Вы хотите добиться? Solid - это внутреннее представление геометрии, чтобы что-то поменять в модели нужно править положение элементов. Но если только для анализа - смотрите класс SolidUtils, там есть метод CreateTransformed. У самого solid-а есть метод ComputeCentroid
Название: Re: Переместить тела до пересечения
Отправлено: enot от 22-03-2019, 10:44:59
А чего Вы хотите добиться?
1.Получить солиды двух объектов из ревита.
2.Произвести операцию на картинках выше
3.Получить координату центра смещенного солида
4.Сместить объект ревита в модели в полученную координату


Может подход неверный, пытаюсь с чего то начать.
Название: Re: Переместить тела до пересечения
Отправлено: Александр Игнатович от 22-03-2019, 10:52:34
Перемудрили. Скорее всего, достаточно получить bounding box-ы элементов и сдвинуть второй элемент по направлению вектора от центра второго к центру первого box-а. Ну на край, так же, но с solid-ами с использованием метода ComputeCentroid. Двигать сам 2 solid не нужно. ElementTransformUtils Вам в помощь
Название: Re: Переместить тела до пересечения
Отправлено: enot от 22-03-2019, 10:58:40
А как определить что дела соприкоснулись ?  Мне нужно переместить один объект пока он не соприкоснется вплотную к другому (чтобы один объект не "вошел" в другой)
Название: Re: Переместить тела до пересечения
Отправлено: Александр Игнатович от 22-03-2019, 11:09:22
Ну тогда да, получить solid-ы, построить Line из центров, методом Solid.IntersectWithCurve получить точки пересечения линии и тел, по этим точкам построить вектор смещения 2-ого объекта