Michel Anders - Написание скриптов для Blender 2.49

Здесь есть возможность читать онлайн «Michel Anders - Написание скриптов для Blender 2.49» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программы, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Написание скриптов для Blender 2.49: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Написание скриптов для Blender 2.49»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Расширьте мощность и гибкость Блендера с помощью Питона: высокоуровневого, легкого для изучения скриптового языка

Написание скриптов для Blender 2.49 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Написание скриптов для Blender 2.49», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Один вопрос по-прежнему нуждается в решении: символ может состоять из более, чем одной кривой. Если мы хотим сделать дополнительные рёберные циклы вокруг такого символа, такой рёберный цикл должен быть снаружи внешней границы символа, но внутри любой внутренней кривой. Другими словами, если мы создаем новый рёберный цикл, мы должны знать, лежит ли кривая внутри другой кривой. Если это так, то она не является внешней границей, и новый рёберный цикл должен быть создан лежащим внутри кривой. Следовательно, наша функция expand() ( показанная в следующем куске кода, полный код является частью Tools.py. На самом деле эта и все вызываемые ею функции находятся в файле expand.py — прим. пер. ), берет дополнительный опциональный аргумент plist , который является списком списков, содержащих объекты MVert , определяющие дополнительные полигоны, чтобы сверяться с ними. Если первая точка кривой, которую мы хотим расширить, лежит в пределах любой из этих дополнительных кривых, мы принимаем, что кривая, которую мы расширяем, является внутренней кривой. (Это будет неверным предположением, если внутренняя кривая будет пересекать внешнюю кривую в некоторой точке, но для кривых, определяющих символ в шрифте, такого никогда не происходит.)

def expand(me,loop,offset=0.05,plist=[]):

ov = [me.verts[i] for i in verts_from_edgeloop(loop)]

inside=False

for polygon in plist:

if in_polygon(loop[0].v1.co,polygon):

inside=True

break # мы не имеем дел с несколькими

включениями

n=len(ov)

points=[]

for i in range(n):

va = (ov[i].co-ov[(i+1)%n].co).normalize()

vb = (ov[i].co-ov[(i-1)%n].co).normalize()

cosa=abs(vec(va).dot(vb))

if cosa>0.99999 : # почти коллинеарны

c = vec(va[1],va[0],va[2])

else:

c = va+vb

l = offset/c.length

p = ov[i].co+l*c

if in_polygon(p,ov) != inside:

p = ov[i].co-l*c

print i,ov[i].co,va,vb,c,l,cosa,p

points.append(p)

return points

Выделенный код вызывает функцию (приведенную в Tools.py ), которая принимает список рёбер, формирующих рёберный цикл, и возвращает отсортированный список вершин. Это необходимо, поскольку наша функция in_polygon() принимает список вершин, а не рёбер, и предполагает, что этот список отсортирован, то есть смежные вершины формируют рёбра, которые не пересекаются.

Чтобы определить, находится ли точка внутри замкнутого многоугольника, определяемого списком вершин, мы считаем количество рёбер, которые пересекаются линией (часто называемой лучом), которая начинается в данной точке и распространяется до бесконечности. Если количество пересекаемых рёбер нечетное, точка лежит внутри многоугольника; если четное, она лежит снаружи многоугольника. Следующий рисунок иллюстрирует концепцию:

Функция in_polygon() , показанная здесь - часть Tools.py . Она принимает точку ( Вектор ) и список вершин (объекты MVert ) и возвращает или Истину или Ложь . Заметьте, что любая z-координата у точки или у вершины в многоугольнике игнорируются.

from Blender.Geometry import LineIntersect2D

from Blender.Mathutils import Vector as vec

def in_polygon(p,polygon):

intersections = 0

n = len(polygon)

if n<3 : return False

for i in range(n):

if LineIntersect2D (p,vec(1.0,0.0,0.0),polygon[i].

co,polygon[(i+1)%n].co):

intersections+=1

return intersections % 2 == 1

Трудная задача выполняется на выделенной строке функцией LineIntersect2D() , доступной в модуле Blender.Geometry . Действие деление по модулю (%) в операторе return - способ определить, нечетное ли количество пересечений.

Собираем всё вместе: Engrave.py

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

1. Показать всплывающее меню для ввода строки, которую надо гравировать.

2. Проверить, что активный объект - меш, и выбраны грани.

3. Создать объект Text3d .

( на самом деле скрипт engrave.py требует, чтобы объект Text3d уже был создан и выбран как активный, так что первые 3 пункта не полностью соответствуют действительности — прим. пер. )

4. Преобразовать его в меш, с подходящими группами вершин.

5. Добавить дополнительные рёберные циклы к символам.

6. Выдавить оригинальные символы вниз.

7. Заполнить низ выдавленных символов.

8. Добавить "cartouche" (прямоугольник) вокруг текста.

9. Заполнить пространство между cartouche и символами.

10.Добавить модификатор subsurface.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Написание скриптов для Blender 2.49»

Представляем Вашему вниманию похожие книги на «Написание скриптов для Blender 2.49» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Написание скриптов для Blender 2.49»

Обсуждение, отзывы о книге «Написание скриптов для Blender 2.49» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x