Главная трудность, с которой столкнулся, — работа с векторами.
Алгоритм довольно простой: надо взять фитинг, получить у него открытый соединителей. Координаты этого соединителя — точка начала построения трубы. Вот от неё надо построить ещё вектор, чтобы получить его координаты — это будет конец трубы.
Ну и чего, я сидел и тупил, с векторами я не особо часто работаю. Сначала прочитал, что для удлинения вектора достаточно умножить его на число. Вот только чё-то ребята не сказали, или я не понял, что вектор удлинится, базара ноль, но удлинится он по всем координатам, а не по направлению существующего вектора.
Потом тупил, потому что взял не координаты самого соединителя, а направление оси Z соединителя. По сути это и есть то направление, куда мне надо удлинять вектор.
Методом проб и ошибок, построением самых странных кусков труб и предупреждениями Ревита о том, что он в ахуе и щас просто закроется, я таки нашёл способ.
Надо взять координаты соединителя, его Ориджин. И к этому ориджину прибавить как раз-таки направление его оси Z, умноженное на нужную длину в футах. Направление оси Z — это нормализованный вектор, то есть вектор единичной длины. Он показывает только направление. Вот его умножаем на длину, в итоге удлиняем в нужную сторону, это получается точка для построения трубы.
start_con_radius = start_con.Radius
start_con_direction = start_con.Origin
end_coord_direction = start_con_direction + start_con.CoordinateSystem.BasisZ.Multiply(segment_len/304.8)
Теперь осталось разобраться с тем, чтобы назначать трубе подходящий тип системы, а то код лепит везде приточную жидкость. Но в АПИ есть метод, который задаёт тип системы трубы, вот щас пойдут его мучить.
