Вопросы по написанию плагинов

Список разделов Blender 3D Плагины

Описание: Обсуждение расширений для Blender
Модератор: exooman

Сообщение #61 Mephist0 » 20.05.2019, 13:30

Подскажите пожалуйста, есть ли способ обернуть уже существующий слайдер в FloatProperty() со своими параметрами и вывести этот слайдер на панель интерфейса? Например bpy.context.object.modifiers["Shrinkwrap"].offset = my_float. Пробовал создать оператор, но не получилось вывести слайдер на панель интерфейса. Заранее спасибо!
Mephist0
Аватара
Сообщения: 3

Сообщение #62 Pavel » 20.06.2019, 06:37

Как заставить аддон работать в двух версиях одновременно (2,79 и 2,80)? Из-за аннотаций я получаю ошибку синтаксиса в 2.79, а без аннотаций получаю предупреждения в 2.80.

Вот код для 2.80:
Код: Выделить всё
test: bpy.props.BoolProperty()

А вот код для 2.79:
Код: Выделить всё
test = bpy.props.BoolProperty()

Есть какой-то не костыльный способ обойти ошибки и предупреждения?

Добавлено спустя 1 час 54 минуты:
Вроде решил проблему. Сделал так:
Код: Выделить всё
IS_BLENDER_280 = True
test = bpy.props.IntProperty()

class TestProps(bpy.types.PropertyGroup):
    b_type = bpy.types.Mesh

    if IS_BLENDER_280:
        __annotations__ = {
            'test': test ,
        }
    else:
        test = test
Pavel M
Аватара
Сообщения: 883

Сообщение #63 Bibo » 20.06.2019, 10:58

Bibo
Аватара
Сообщения: 550

Сообщение #64 Pavel » 20.06.2019, 12:55

Bibo, я про это знаю. У меня просто в коде есть переменная IS_BLENDER_280 которая является результатом функции с bpy.app.version, но я не стал всю функцию копировать. Я показал сам принцип объявления свойств. А то как определяется версия - не важно.
Pavel M
Аватара
Сообщения: 883

Сообщение #65 Pavel » 29.06.2019, 16:37

У меня есть модель со скелетом. В режиме Reset Position она выглядит так:
Изображение
И есть анимация, которая выглядит так:
Изображение
Мне нужно изменить Reset Position скелета без порчи анимаций. Reset Position должен быть таким:
Изображение
Как это можно сделать? Уже целый день мучаюсь, ничего не выходит.
Вот blend сцена:
https://drive.google.com/file/d/1S5nVpcnRST_0xFWza8tg1O-pE3YRLMlZ/view?usp=sharing
Вот что пока у меня получилось:
Код: Выделить всё
import bpy


def reconstruct_bind_pose(obj, bind_act):
    bind_keyframes = {}
    for fcurve in bind_act.fcurves:
        keyframe = fcurve.keyframe_points[0]
        if bind_keyframes.get(fcurve.data_path):
            bind_keyframes[fcurve.data_path].append(keyframe.co.y)
        else:
            bind_keyframes[fcurve.data_path] = [keyframe.co.y, ]

    bpy.ops.pose.armature_apply()

    for act in bpy.data.actions:
        for fcurve in act.fcurves:
            for keyframe in fcurve.keyframe_points:
                bind_keyframe = bind_keyframes[fcurve.data_path][fcurve.array_index]
                keyframe.co.y -= bind_keyframe


obj = bpy.context.object
act = obj.animation_data.action
reconstruct_bind_pose(obj, act)
Pavel M
Аватара
Сообщения: 883

Сообщение #66 Bibo » 29.06.2019, 18:45

Pavel, в для этого существует операция Ctrl+A
Спойлер
Изображение
В 2.8 правда не смотрел где, если не так же.
Bibo
Аватара
Сообщения: 550

Сообщение #67 Pavel » 29.06.2019, 20:03

Pavel писал(а):Мне нужно изменить Reset Position скелета без порчи анимаций.
анимации сломаются. Нужно писать скрипт.

Добавлено спустя 17 часов 39 минут:
Нашёл готовое решение, правда пришлось немного переделать под себя:
https://blenderartists.org/t/modify-motion-capture-t-pose/540491/13

Вот мой переделанный вариант:
https://github.com/PavelBlend/blender-reconstruct-reset-position-addon
Pavel M
Аватара
Сообщения: 883

Пред.

Вернуться в Плагины

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость