Книга: Написание скриптов для Blender 2.49

Схема и код выбора искривлённых граней

Схема и код выбора искривлённых граней

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

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

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

редактирования.

3. Включить режим выбора граней

4. Для всех граней проверить, является ли она четырёхугольником, и если так:

• Вычислить нормаль треугольника, определенного вершинами 0, 1, и 2

• Вычислить нормаль треугольника, определенного вершинами 1, 2, и 3

• Вычислить угол между нормалями

• Если угол > минимального угла, выбрать грань Это транслируется в следующий код для фактического обнаружения и выбора (полный скрипт предоставлен как

warpselect.py):
def warpselect(me,maxangle=5.0):
    for face in me.faces:
        if len(face.verts) == 4:
            n1 = (face.verts[0].co -
                  face.verts[1].co ).cross( 
                  face.verts[2].co - face.verts[1].co )
            n2 = ( face.verts[1].co -
                  face.verts[2].co ).cross( 
                  face.verts[3].co - face.verts[2].co )
            a = AngleBetweenVecs(n1,n2)
            if a > maxangle :
                face.sel = 1

Как Вы можете видеть, наша схема почти взаимно-однозначно соответствует коду. Заметьте, что AngleBetweenVecs() возвращает угол в градусах, так что мы можем непосредственно сравнить его с maxangle, который тоже выражен в градусах. Также, нет необходимости самостоятельно выполнять само векторное произведение двух векторов, так как класс Vector в Блендере хорошо снабжен всеми видами операторов. Прежде, чем мы сможем вызвать эту функцию, мы должны позаботиться о важной детали: для того, чтобы выбирать грани, должен быть включен режим выбора граней. Это можно сделать следующим образом:

selectmode = Blender.Mesh.Mode()
Blender.Mesh.Mode(selectmode |
Blender.Mesh.SelectModes.FACE)

Чтобы проиллюстрировать малоизвестный факт о том, что режимы выбора не являются взаимоисключающими, мы установили режим выбора граней дополнительно к любому уже выбранному режиму двоичным объединением величин или оператором (|). В конце скрипта мы восстанавливаем режим, который был активен.

Оглавление книги


Генерация: 1.288. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз