Dans le précédent Post, j'ai expliqué comment créer un plug-in Blender avec un simple exemple de code. Cette fois, je vais vous expliquer comment créer un sous-menu (sur l'arborescence). Il peut y avoir des erreurs car il y a peu d'informations pour créer un sous-menu et c'est le résultat d'essais et d'erreurs.
Du précédent Post, seule la partie qui crée le menu est extraite.
menu_1.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
#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)
Voici un exemple de code simple pour créer un sous-menu. La structure du menu affiché est "Hoge Menu" - "Hoge Sub Menu".
submenu_1.py
#Sous-menu
class SubMenu(bpy.types.Operator):
bl_idname = "uv.hoge_sub"
bl_label = "Sub Hoge Menu"
out_text = bpy.props.StringProperty()
def execute(self, context):
self.report({'INFO'}, self.out_text)
return {'FINISHED'}
#Menu principal
class Menu(bpy.types.Menu):
bl_idname = "uv.hoge"
bl_label = "Hoge Menu"
bl_description = "Hoge Piyo"
def draw(self, context):
layout = self.layout
#Enregistrement du sous-menu + enregistrement de la chaîne de caractères de sortie
layout.operator(SubMenu.bl_idname).out_text = "Sub Hoge Menu"
#Enregistrez-vous dans le menu affiché lorsque vous appuyez sur «U» en mode Édition (bpy).types.VIEW3D_MT_uv_map.append(menu_func)Appelé de)
def menu_func(self, context):
self.layout.separator() #Enregistrer le séparateur dans le menu
self.layout.menu(Menu.bl_idname)
#enregistrement
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
La classe submenu est fondamentalement la même que la classe utilisée pour créer un menu normal et hérite de la classe bpy.types.Operator. En guise de confirmation, ajoutons une variable appelée out_text dans le sous-menu afin que out_text soit affiché lorsque le menu est exécuté.
submenu_2.py
#Sous-menu
class SubMenu(bpy.types.Operator):
bl_idname = "uv.hoge_sub"
bl_label = "Sub Hoge Menu"
out_text = bpy.props.StringProperty()
def execute(self, context):
self.report({'INFO'}, self.out_text)
return {'FINISHED'}
Puisque le menu principal doit créer un menu dans l'arborescence, il hérite de la classe bpy.types.Menu. De plus, le menu principal n'a pas besoin de réfléchir à ce qui se passe lorsqu'il est sélectionné et la méthode d'exécution n'est pas nécessaire. Au lieu de cela, vous devez ajouter une méthode de dessin pour afficher le menu. Dans la méthode draw, un sous-menu est enregistré en remplaçant bl_idname de la sous-classe de bpy.types.Operator par l'argument de layout.operator, et une chaîne de caractères est affectée à la variable membre out_text du sous-menu enregistré. Je suis.
submenu_3.py
#Menu principal
class Menu(bpy.types.Menu):
bl_idname = "uv.hoge"
bl_label = "Hoge Menu"
bl_description = "Hoge Piyo"
def draw(self, context):
layout = self.layout
#Enregistrement du sous-menu + enregistrement de la chaîne de caractères de sortie
layout.operator(SubMenu.bl_idname).out_text = "Sub Hoge Menu"
La partie enregistrement est presque la même que la partie normale, mais le menu_func appelé depuis la fonction spécifiée dans l'argument de bpy.types.VIEW3D_MT_uv_map.append a été modifié. Cela n'a rien à voir avec la création d'un sous-menu, mais vous pouvez ajouter un menu séparé en exécutant la fonction self.layout.separator. Cela le distingue clairement des autres menus et facilite la compréhension des menus ajoutés en installant le plug-in. Vous pouvez enregistrer le menu dans l'arborescence en passant le bl_idname de la classe dérivée de bpy.types.Menu comme argument de la fonction self.layout.menu.
submenu_4.py
#Enregistrez-vous dans le menu affiché lorsque vous appuyez sur «U» en mode Édition (bpy).types.VIEW3D_MT_uv_map.append(menu_func)Appelé de)
def menu_func(self, context):
self.layout.separator() #Enregistrer le séparateur dans le menu
self.layout.menu(Menu.bl_idname)
#enregistrement
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
Voici le code de l'exemple de plug-in qui fonctionne réellement, résumant le contenu ci-dessus.
submenu.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
}
#Sous-menu
class SubMenu(bpy.types.Operator):
bl_idname = "uv.hoge_sub"
bl_label = "Sub Hoge Menu"
out_text = bpy.props.StringProperty()
def execute(self, context):
self.report({'INFO'}, self.out_text)
return {'FINISHED'}
#Menu principal
class Menu(bpy.types.Menu):
bl_idname = "uv.hoge"
bl_label = "Hoge Menu"
bl_description = "Hoge Piyo"
def draw(self, context):
layout = self.layout
#Enregistrement du sous-menu + enregistrement de la chaîne de caractères de sortie
layout.operator(SubMenu.bl_idname).out_text = "Sub Hoge Menu"
#Enregistrez-vous dans le menu affiché lorsque vous appuyez sur «U» en mode Édition (bpy).types.VIEW3D_MT_uv_map.append(menu_func)Appelé de)
def menu_func(self, context):
self.layout.separator() #Enregistrer le séparateur dans le menu
self.layout.menu(Menu.bl_idname)
#enregistrement
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()
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
Recommended Posts