Траекторная развёртка.

Широкий класс операций ссылочной геометрии представляют операции, построения тела путём трансляции (англ. sweep) некоторого профиля или семейства профилей (profile, profiles) вдоль заданной траектории spine.

Формально о том, что такое траекторная развёртка:

Траекторная развёртка - это методика построения поверхности путём протягивания профиля вдоль траектории. В общем случае вид профиля непостояннен и может меняться по определённым законам. Таким образом, относительно того, как профиль протягивается вдоль траектории существует два вопроса, или, иными словами, мы должны определить два закона, а именно:

  1. Закон, определяющий форму траектории.
  2. Закон определяющий форму профиля.

Второй закон удобно разбить на два подзакона: 1.1. Закон, определяющий форму транслируемого тела. 1.2. Закон, определяющий угловую эволюцию базиса.

По сути, многообразие всех имеющихся в системе операций траекторной трансляции - суть разные формы ответов на эти вопросы.


Линейная развёртка.

Самый часто используемый метод придания объёма плоскому объекту. Операция разворачивает плоское тело face по вектору vec. Если вместо вектора указать одну координату, модель будет вытянута в положительном направлении оси Z. При указании опции center, после выполнения операции модель будет транслирована в направлении обратном vec на его половинную длину.

Сигнатура:

extrude(proto=face, vec=(x,y,z), center=True/False)
extrude(proto=face, vec=z, center=True/False) #equal: vec=(0,0,z)
face.extrude(vec) #alternate

Пример:

ngon(r=10, n=10)
ngon(r=10, n=10).extrude(4)
extrude((1, 0, 4), ngon(r=10, n=10))
extrude(textshape(text="TextShape", fontpath=FONTPATH, size=100), 20)



Труба.

Строит на основе траектории spine и профиля круглого сечения радиуса r. maxdegree максимальная степень bspline поверхности. maxsegm - ? bounds - при установке этой опции операция возвращает кортеж из резултьата, а также профилей в первой и последней позициях.

Сигнатура:

tube(spine, r, tol=1e-6, cont=2, maxdegree=3, maxsegm=20, bounds=False):

Примеры:

POINTS = [ (0,0,0), (0,0,20), (0,20,40),
(-90,20,40), (-90,20,20), (0,20,0) ]
spine = rounded_polysegment(POINTS, r=10)
a = tube(spine, r=5)

POINTS = [ (0,0,0), (20,0,40) ]
TANGS = [ (0,0,1), (1,0,1) ]
spine = interpolate(POINTS, TANGS)
b = tube(spine, r=5, maxdegree=8)


Развёртка профиля по траектории. Развёртка с изменяемым профилем.

Операция строит тело по одному профилю или набору сменяющих друг друга профилей profiles, вытянутых по траектории spine. Указание опции frenet активирует закон изменения углового положения профиля в соответствии с трёхгранником Френе-Серре. Опция binormal активирует закон изменения углового положения профиля в соответствии с константной бинормалью.

Сигнатура:

pipe_shell(profiles, spine, frenet=False, binormal=vector3(0,0,0), solid=True)

Примеры:





Тело вращения.

Операция создания тела вращения от прототипа proto. При необходимости создания сектора задаётся угол yaw. Если указан радиус r, объект разворачивается на 90 градусов вокруг оси X и смещается по оси X на растояние равное радиусу r.

Сигнатура:

revol(profile, r=None, yaw=deg(360))

Пример:




Тело вращения. (расширенная версия).

Расширенная версия операции revol. Строит тело вращения от прототипа proto на интервале угла поворота yaw. Указание опции roll позволяет изменять угол поворота прототипа по мере прохождения интервала. Тело строится по опорным копиям тела прототипа, количество копий задаётся опцией n. nparts определяет количество сегментов результирующего тела вращения.

Сигнатура:

revol2(profile, r, n=30, yaw=(0,deg(360)), roll=(0,0), nparts=None)

Примеры:

revol2(profile=square(10, center=True), r=20, n=60, yaw=(0,deg(360)), roll=(0,deg(360)))