[PYTHON] [Blender] Comment autoriser les utilisateurs à contrôler les plug-ins à partir des options de la toolhelf

Connaissez-vous l'étagère à outils de Blender?

La ** Tool Shelf ** est un menu qui peut être affiché / masqué avec la touche T et est la ** barre d'outils ** affichée sur le bord gauche de l'écran. Il existe de nombreux outils sur l'étagère à outils, mais en dessous il y a une ** option **, un élément de réglage ** qui donne à l'utilisateur un contrôle plus fin sur la dernière opération. Par exemple, le niveau de «jeu de subdivision» en est un exemple.

Cette fois, je vais vous présenter comment ajouter une fonction pour activer le contrôle de l'utilisateur de l'option d'étagère d'outils à la dernière opération.

échantillon

Je pense qu'il est plus facile de comprendre si vous donnez un échantillon plutôt que de l'expliquer en détail.Je vais donc vous présenter un exemple de plug-in qui fait pivoter l'objet autour de l'axe X de l'angle de la valeur définie dans l'option.

rotate_around_x_axis.py


import bpy
import mathutils
from math import radians
from bpy.props import *

bl_info = {
    "name" : "Property sample",
    "author" : "Nutti",
    "version" : (1, 0),
    "blender" : (2, 7, 0),
    "location" : "UV Mapping > Property sample",
    "description" : "Property sample",
    "warning" : "",
    "wiki_url" : "",
    "tracker_url" : "",
    "category" : "UV"
}

class PropertySample(bpy.types.Operator):
    """"""
    
    bl_idname = "uv.property_samle"
    bl_label = "Property Sample"
    bl_description = "Property Sample"
    bl_options = {'REGISTER', 'UNDO'}

    #Valeur à afficher sur l'étagère à outils
    #Angle de rotation autour de l'axe X (une valeur entière de 0 degrés à 360 degrés peut être sélectionnée)
    rot = IntProperty(
        name = "Rotate X",                #Nom de l'étiquette affiché sur l'étagère à outils
        description = "Rotate X ...",     #Description affichée sur l'étagère à outils
        default = 0,                      #Valeur par défaut
        min = 0,                          #Valeur minimale sélectionnable
        max = 360)                        #Valeur maximale sélectionnable
    
    base_euler = None                     #Angle initial
    
    #Processus d'initialisation
    # __init__Est exécuté uniquement lorsqu'il est sélectionné dans le menu
    #Si vous ne sauvegardez pas l'état initial ici, il y aura un problème avec la quantité de rotation
    def __init__(self):
        active_obj = bpy.context.active_object
        mode = active_obj.rotation_mode
        active_obj.rotation_mode = 'QUATERNION'
 
        #Sauvegarder l'état initial de l'objet
        self.base_euler = active_obj.rotation_quaternion.to_euler()
        active_obj.rotation_mode = mode
        
        #Lorsque sélectionné dans le menu la deuxième fois ou plus tard
        #Doit être défini manuellement sur la valeur par défaut
        self.rot = 0   
    
    #De plus lors de la sélection dans le menu
    # "Lors de la modification de la valeur sur l'étagère à outils"Aussi appelé
    def execute(self, context):
        active_obj = bpy.context.active_object
        mode = active_obj.rotation_mode
        active_obj.rotation_mode = 'QUATERNION'
        
        #Définir l'état d'un nouvel objet
        new_euler = self.base_euler.copy()
        new_euler.x = self.base_euler.x + radians(self.rot)
        active_obj.rotation_quaternion = new_euler.to_quaternion()
        
        active_obj.rotation_mode = mode
        
        return {'FINISHED'}


# registration
def menu_func(self, context):
    self.layout.operator(PropertySample.bl_idname)

def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_uv_map.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_uv_map.remove(menu_func)


if __name__ == "__main__":
    register()

Comment utiliser l'échantillon

Veuillez consulter la page Wiki de Blender pour savoir comment installer l'exemple.

L'utilisation de l'exemple est indiquée ci-dessous.

  1. Passez en mode "EDIT"
  2. Appuyez sur le bouton "U" et sélectionnez "Exemple de propriété"
  3. Sur l'étagère à outils, vous verrez une option appelée "Rotation X". Réglez-la sur une valeur appropriée et vérifiez que l'objet pivote.

Un exemple du résultat d'exécution de l'exemple est présenté ci-dessous.

sample_1.png

Exemple d'explication

Le code source de base est expliqué dans [\ Blender ] Comment créer un plug-in Blender, donc je vais l'omettre.

Les parties suivantes spécifient la valeur de l'option.

set_option.py


#Valeur à afficher sur l'étagère à outils
#Angle de rotation autour de l'axe X (une valeur entière de 0 degrés à 360 degrés peut être sélectionnée)
rot = IntProperty(
    name = "Rotate X",                #Nom de l'étiquette affiché sur l'étagère à outils
    description = "Rotate X ...",     #Description affichée sur l'étagère à outils
    default = 0,                          #Valeur par défaut
    min = 0,                               #Valeur minimale sélectionnable
    max = 360)                          #Valeur maximale sélectionnable

Une fonction appelée ** IntProperty ** permet à l'utilisateur de définir la valeur comme une option. Dans cet exemple, l'angle de rotation autour de l'axe X peut être spécifié de 0 degrés à 360 degrés. Pour d'autres détails, veuillez vous référer aux commentaires dans le code source le cas échéant.

Liste des valeurs pouvant être spécifiées pour les options

Dans l'exemple, les valeurs entières peuvent être définies comme options, mais d'autres types de valeurs d'option peuvent également être définies. Les valeurs qui peuvent être définies et les fonctions correspondantes sont résumées, veuillez donc vous y référer.

Moule une fonction
Booléen BoolProperty
entier IntProperty
Point flottant FloatProperty
Chaîne StringProperty

Spécifiez la plage de valeurs pouvant être spécifiée pour l'option

Vous pouvez également limiter les valeurs pouvant être spécifiées pour l'option. Montre comment limiter la plage entre -100 et 400 pour les options entières.

max_min.py


i = IntProperty(
    name = "Integer",
    description = "Integer ...",
    default = 0,
    min = -100,
    max = 400)

Arguments pouvant être spécifiés pour ~ Propriété

Répertoriez les arguments pouvant être spécifiés dans ~ Propriété. Il existe d'autres arguments qui peuvent être spécifiés, mais veuillez consulter la page officielle de Blender pour plus de détails.

argument La description
name Nom de l'option affiché sur l'étagère à outils
description Description affichée lorsque le pointeur de la souris est placé sur l'option
default Valeur initiale de l'option
max Valeur maximale pouvant être spécifiée pour l'option
min Valeur minimale pouvant être spécifiée pour l'option

finalement

Nous avons montré comment l'utilisateur peut obtenir la valeur spécifiée pour une option. Les options doivent permettre aux utilisateurs de configurer les fonctionnalités et d'étendre la gamme de création de plugins.

Informations de référence

Recommended Posts

[Blender] Comment autoriser les utilisateurs à contrôler les plug-ins à partir des options de la toolhelf
Comment autoriser les utilisateurs nologin à se connecter sous Linux
Comment utiliser SWIG de WAF
Comment lancer Explorer à partir de WSL
[Blender] Comment créer un plug-in Blender
[Blender] Comment rendre les scripts Blender multilingues
Comment accéder à wikipedia depuis python
Comment convertir .mgz en .nii.gz
[Blender] Comment définir shape_key avec un script
Comment créer un clone depuis Github
Comment convertir facilement le format de Markdown
[TF] Comment utiliser Tensorboard de Keras
Comment utiliser le multicœur du point de vue de plusieurs langues
Comment accéder à RDS depuis Lambda (python)
Comment faire fonctionner Linux depuis la console
Comment créer un référentiel à partir d'un média
Comment accéder à la banque de données de l'extérieur
Comment ajouter des options au serveur de runtime manage.py de Django