[PYTHON] [Blender] Comment créer un plug-in Blender

Qu'est-ce qu'un plug-in Blender?

Blender expose diverses API pour étendre ses fonctionnalités. En utilisant l'API, vous pouvez obtenir les données que Blender utilise en interne, telles que «la face actuellement sélectionnée» et «la position du sommet de l'objet». Diverses informations peuvent être obtenues à partir de l'API, et l'API publiée peut être confirmée à partir de ce qui suit, par exemple. http://www.blender.org/documentation/blender_python_api_2_67_release/contents.html

Ce que vous devez faire pour créer un plug-in

L'API est basée sur Python et n'est pas destinée aux utilisateurs, vous devez donc connaître les éléments suivants: À première vue, le seuil semble assez élevé, mais en réalité, si vous avez fait Blender et fait quelque chose, je pense que ce sera gérable. Au contraire, cela peut être facile pour ceux qui sont habitués à la programmation liée à la 3D.

Exemple de plug-in

Un simple exemple de plug-in pour Blender.

skeleton.py


#Requis pour accéder à la structure de données dans Blender
import bpy

#Informations sur le plug-in
bl_info = {
    "name" : "Hoge Plugin",             #Nom du plugin
    "author" : "Piyo",                  #auteur
    "version" : (0,1),                  #Version du plugin
    "blender" : (2, 6, 5),              #Version Blender sur laquelle fonctionne le plug
    "location" : "UV Mapping > Hoge",   #Positionnement des plug-ins dans Blender
    "description" : "Hoge Fuga Piyo",   #Description du plugin
    "warning" : "",
    "wiki_url" : "",                    #URL de la page Wiki où se trouve la description du plugin
    "tracker_url" : "",                 #URL du fil de discussion de l'organisation du développeur Blender
    "category" : "UV"                   #Nom de la catégorie du plugin
}

#menu
class CHoge(bpy.types.Operator):
    
    bl_idname = "uv.hoge"               #Nom de l'ID
    bl_label = "Hoge Menu"              #Chaîne de caractères affichée dans le menu
    bl_description = "Hoge Piyo"        #Description affichée dans le menu
    bl_options = {'REGISTER', 'UNDO'}

    #Le processus que le plug-in exécute réellement le processus
    def execute(self, context):
        return {'FINISHED'}             #Renvoie FINISHED en cas de succès

#Fonction pour enregistrer un menu
def menu_func(self, context):
    self.layout.operator("uv.hoge")     #"Bl" de la classe à laquelle vous souhaitez vous inscrire_Spécifiez "idname"

#Que se passe-t-il lorsque vous installez le plug-in
def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_uv_map.append(menu_func)

#Que se passe-t-il lorsque vous désinstallez le plug-in
def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_uv_map.remove(menu_func)

#Fonction principale
if __name__ == "__main__":
    register()

Explication de l'exemple de plug-in

importation de module bpy

Pour accéder aux données internes de Blender, vous devez importer un module appelé bpy.

skeleton_1.py


#Requis pour accéder à la structure de données dans Blender
import bpy

Informations sur le plug-in (bl_info)

Décrit des informations sur le plug-in. Puisque les commentaires dans le code source sont expliqués tels quels, rien de particulier n'est expliqué ici. Si vous souhaitez publier votre plugin sur le wiki de Blender, c'est une bonne idée d'inclure l'URL de votre page Wiki ou l'URL de Blender Deverloper Org. Cependant, si vous l'utilisez individuellement, il n'y a pas de problème si vous ne faites attention qu'à l'emplacement et à la catégorie. Pour référence, la page Wiki du plug-in que j'ai créé et l'URL de Blender Developer Org sont affichées ci-dessous. [Wiki] http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/UV/Copy_Paste_UVs [Blender Developer Org] https://developer.blender.org/T38460

skeleton_2.py


#Informations sur le plug-in
bl_info = {
    "name" : "Hoge Plugin",             #Nom du plugin
    "author" : "Piyo",                  #auteur
    "version" : (0,1),                  #Version du plugin
    "blender" : (2, 6, 5),              #Version Blender sur laquelle fonctionne le plug
    "location" : "UV Mapping > Hoge",   #Positionnement des plug-ins dans Blender
    "description" : "Hoge Fuga Piyo",   #Description du plugin
    "warning" : "",
    "wiki_url" : "",                    #URL de la page Wiki où se trouve la description du plugin
    "tracker_url" : "",                 #URL du fil de discussion de l'organisation du développeur Blender
    "category" : "UV"                   #Nom de la catégorie du plugin
}

Classe pour le menu

Créez un élément de menu unique dans une classe qui décrit réellement le traitement du plug-in. Doit hériter de la classe bpy.types.Operator. Vous devez décrire le processus que vous souhaitez exécuter dans la méthode d'exécution et renvoyer "FINISHED" comme valeur de retour s'il réussit. Une autre chose qui peut être spécifiée comme valeur de retour est "CANCEL LED" qui met fin à l'opération lorsqu'une erreur se produit. Voir ci-dessous pour plus de détails. http://www.blender.org/documentation/blender_python_api_2_67_1/bpy.types.Operator.html

skeleton_3.py


#menu
class CHoge(bpy.types.Operator):
    
    bl_idname = "uv.hoge"               #Nom de l'ID
    bl_label = "Hoge Menu"              #Chaîne de caractères affichée dans le menu
    bl_description = "Hoge Piyo"        #Description affichée dans le menu
    bl_options = {'REGISTER', 'UNDO'}

    #Le processus que le plug-in exécute réellement le processus
    def execute(self, context):
        return {'FINISHED'}             #Renvoie FINISHED en cas de succès

Traitement lors de l'installation / désinstallation d'un plug-in

Décrivez le processus exécuté lorsque le plug-in est installé dans la fonction "enregistrer" et le processus exécuté lorsque le plug-in est désinstallé dans la fonction "désinscrire". Enregistrez le plug-in avec bpy.utils.register_module et bpy.utils.unregister_module. bpy.types.VIEW3D_MT_uv_map.append et bpy.types.VIEW3D_MT_uv_map.remove ajouter / supprimer des éléments dans le menu "UV Map". Créez une fonction (menu_func dans ce cas) qui décrit le processus de transmission du "bl_idname" défini dans la classe que vous souhaitez enregistrer à l'argument de self.layout.operator, et passez-le à l'argument de bpy.types.VIEW3D_MT_uv_map.append. L'élément spécifié par bl_label est ajouté au menu "UV Map". Si vous le transmettez à l'argument de bpy.types.VIEW3D_MT_uv_map.remove, l'élément ajouté sera supprimé.

skeleton_4.py


#Fonction pour enregistrer un menu
def menu_func(self, context):
    self.layout.operator("uv.hoge")     #"Bl" de la classe à laquelle vous souhaitez vous inscrire_Spécifiez "idname"

#Que se passe-t-il lorsque vous installez le plug-in
def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_uv_map.append(menu_func)

#Que se passe-t-il lorsque vous désinstallez le plug-in
def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_uv_map.remove(menu_func)

fonction principale

Pour la fonction principale, il vous suffit d'appeler la fonction de registre.

skeleton_5.py


#Fonction principale
if __name__ == "__main__":
    register()

Exécuter un exemple de plug-in

Exploitons en fait l'exemple de plug-in ci-dessus. Suivez les étapes ci-dessous pour installer le plug-in. La procédure d'installation est également décrite sur la page Blender Wiki. http://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Extensions/Python/Add-Ons

  1. Sélectionnez Préférences utilisateur de fichier
  2. Sélectionnez l'onglet Addons
  3. Appuyez sur le bouton "Installer à partir d'un fichier ..."
  4. Sélectionnez le plug-in que vous souhaitez installer
  5. Cochez la case en regard du plug-in installé
  6. Appuyez sur "U" dans "Mode d'édition"
  7. Confirmez que "Hoge Menu" est affiché.
  8. Cliquez sur "Hoge Menu" pour exécuter le processus (dans ce cas, rien n'est fait car rien n'est fait)

Résultat d'exécution

Si l'installation est terminée avec succès, vous pouvez vérifier les éléments suivants sur chaque écran.

「User Preferences」-「Addons」 20140905224305.jpg

Menu "U" du "Mode d'édition"

20140905224318.jpg

Article de Qiita sur le développement de plug-ins Blender

Dans un autre article de Qiita, j'ai présenté les points clés du développement du plug-in Blender. Veuillez vous y référer également.

Article pour ceux qui veulent en savoir plus sur l'API Blender

Articles pour ceux qui veulent publier des plugins Blender

Articles pour ceux qui veulent améliorer l'environnement de développement des plugins Blender

Tutoriel de développement de plug-in Blender

Nous travaillons sur un tutoriel pour débutants pour tous ceux qui souhaitent développer un plug-in Blender. Si vous êtes intéressé, veuillez également vous y référer.

https://www.gitbook.com/book/nutti/introduction-to-add-on-development-in-blender/details

Les références

Recommended Posts

[Blender] Comment créer un plug-in Blender
Comment faire une traduction japonais-anglais
Comment créer un bot slack
Comment créer un robot - Avancé
Comment créer une fonction récursive
[Blender] Comment rendre les scripts Blender multilingues
Comment créer un robot - Basic
[Python] Comment rendre une classe itérable
Comment créer un indicateur personnalisé Backtrader
Comment créer un plan de site Pelican
Spigot (Paper) Introduction à la création d'un plug-in pour 2020 # 01 (Construction de l'environnement)
Comment créer un système de dialogue dédié aux débutants
Comment créer un plug-in Spigot (pour les débutants Java)
Comment créer un dictionnaire avec une structure hiérarchique.
Comment créer le plugin Python de Substance Painter (Introduction)
Comment étudier le plugin Bukkit
Comment pirater un terminal
Comment faire un jeu de tir avec toio (partie 1)
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Comment créer un BOT Cisco Webex Teams à l'aide de Flask
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment mettre un lien symbolique
Comment créer un jeu d'action multijoueur en ligne avec Slack
Comment créer un laboratoire de piratage - Kali Linux (2020.1) VirtualBox 64 bits Partie 2-
Comment créer un package Conda
Comment créer un pont virtuel
Comment créer un laboratoire de piratage - Kali Linux (2020.1) VirtualBox 64-bit edition -
Comment créer un package Python (écrit pour un stagiaire)
Comment faire un simple jeu Flappy Bird avec Pygame
Comment créer un Dockerfile (basique)
Comment supprimer un conteneur Docker
Créez un générateur de rideaux avec Blender
Comment créer un fichier de configuration
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
[Langage C] Comment créer, éviter et créer un processus zombie
Comment créer une bibliothèque .dylib à partir d'une bibliothèque .a avec OSX (El Capitan)
Comment faire un test unitaire Part.1 Modèle de conception pour l'introduction
[Python] Comment créer une matrice de motifs répétitifs (repmat / tile)
Comment rendre les caractères de Word Cloud monochromatiques
[Blender] Comment définir shape_key avec un script
Comment rendre le sélénium aussi léger que possible
Comment créer un clone depuis Github
Comment diviser et enregistrer un DataFrame
Comment créer un environnement de traduction sphinx
Comment créer un dossier git clone
Qiita (1) Comment écrire un nom de code
Comment ajouter un package avec PyCharm
Comment dessiner un graphique avec Matplotlib
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Faisons un noyau jupyter
[Python] Comment inverser une chaîne de caractères
[Ubuntu] Comment exécuter un script shell
Comment obtenir stacktrace en python
Comment créer une clé USB à démarrage multiple (compatible Windows 10)
Comment créer un référentiel à partir d'un média