Ouvrir un Pie menu : raccourci dans input vs keymap ?

Ici on parle des scripts

Modérateurs : frez, Yadoob, stilobique, Matpi, ModSquad

Ouvrir un Pie menu : raccourci dans input vs keymap ?

Message par ILYA » 11 Sep 2018, 20:21

Bonsoir à vous !

L'objet de ce post est sans doute mal exprimé, il découle justement de ma difficulté à comprendre la manière de rédiger un script pour créer puis ouvrir un Pie menu...
Je suis parti du modèle de base inclus dans les template de Blender (Text Editor).

Puis, en m'inspirant aussi de ce que je peux voir avec les publications des Lapineige, Wazou, Taz Tako... entre autres nombreux scripteurs de talent (qui m'ont donné envie de tenter l'aventure et de comprendre un peu leur savoir-faire), je suis parvenu à la rédaction suivante de mon addon :

Code : Tout sélectionner
bl_info = {
    "name": "PIE PERSO menu",
   "author": "ILYA 2018",
   "version": (1, 0),
   "blender": (2, 7, 9),
    "category": "Pie Menu",
   "wiki_url": "",
    "location": "3D View>3D View (Global)",
    "description": "Pie Menu personnalisé"
}

# la présence de bl_info est nécessaire pour créer un addon ayant pour nom celui du libellé de "name" ci-dessus,
# cet addon étant répertorié dans la catégorie désignée ci-dessus avec "category".
# NOTA : la catégorie peut être sans rapport avec la finalité de l'addon, cela ne sert qu'à savoir
# où sera répertorié l'addon !

import bpy
from bpy.types import Menu

# spawn an edit mode selection pie (run while object is in edit mode to get a valid output)


class VIEW3D_PIE_PERSO(Menu):
    # label is displayed at the center of the pie menu.
    bl_label = "PERSO Pie Menu"
    bl_idname = "Mesh.monmenupieperso" # Unique identifier for buttons and menu items to reference : libellé pour le paramètre "Name" d'un nouveau racccourci (onglet Input des préférences utilisateur)

    def draw(self, context):
        layout = self.layout

        pie = layout.menu_pie()
        # operator_enum will just spread all available options
        # for the type enum of the operator on the pie
        #
        # libellé initial :
        #
        pie.operator_enum("mesh.select_mode", "type")
       
        # la syntaxe suivante permet d'entourer les boutons :
        box=pie.split().box().column()
        #... ce qui diffère de celle-ci :
        #box=pie.split().column()
        row=box.row(align=True)
        row.label("Ma liste 1")
        row.operator("mesh.primitive_plane_add", text="Plane", icon='MESH_PLANE')
        row.operator("mesh.primitive_cube_add", text="Cube", icon='MESH_CUBE')
       
        box.separator()
        box.label("Ma liste 2")
        box.operator("mesh.primitive_cylinder_add", text="Cylinder", icon='MESH_CYLINDER')
        box.operator("mesh.primitive_cone_add", text="Cone", icon='MESH_CONE')
        box.operator("mesh.primitive_monkey_add", text="Monkey", icon='MESH_MONKEY')
       
def register():
    bpy.utils.register_class(VIEW3D_PIE_PERSO) # même libellé que celui donné à "class"

def unregister():
    bpy.utils.unregister_class(VIEW3D_PIE_PERSO) # même libellé que celui donné à "class"

# This allows you to run the script directly from blenders text editor
# to test the add-on without having to install it.
if __name__ == "__main__":
    register()

    bpy.ops.wm.call_menu_pie(name="VIEW3D_PIE_PERSO")


Il fonctionne, avec dans les préférences utilisateurs, volet input, le paramétrage suivant :

Image

Une autre lecture à propos des Pie menu, postée voici ... 3-4 ans (par Olive/Taz Tako je crois), parle des keymaps automatiques...
Il poste alors un élément de code que je crois comprendre comme étant le moyen de définir dans le script lui-même les commandes à employer pour ouvrir le Pie menu.

Alors, comme tout ce que je fais en terme de script, par intuition bien plus que par compréhension, j'ai "étoffé" mon script initial ci-dessus pour la partie "def register()", qui devient ainsi :

Code : Tout sélectionner
def register():
    bpy.utils.register_class(VIEW3D_PIE_PERSO) # même libellé que celui donné à "class"

    wm = bpy.context.window_manager
    km = wm.keyconfigs.addon.keymaps.new(name="Mesh") # pourquoi Mesh et pas toto ?
    kmi = km.keymap_items.new("wm.call_menu_pie", "E", "PRESS", shift=True, ctrl=True)
    kmi.properties.name = 'Mesh.monmenupieperso'


Je supposais que du coup j'allais pouvoir ouvrir mon Pie menu en tapant " E " au clavier... raté ! C'est toujours la combinaison de touches définie dans "input" qui fait autorité...
Je pifomètre donc que ce qui est mentionné dans le script doit être en conflit avec les paramètres que j'ai définis dans les préférences utilisateur ?
Manifestement, les lignes que j'ai rajoutées n'ont aucun effet... et de plus je ne comprends pas la conséquence du nom utilisé dans la définition de km : pourquoi Mesh, pourquoi pas autre chose et quoi dans ce cas ?

Si effectivement le code supplémentaire ci-dessus a bien pour but de définir par script les touches à utiliser pour ouvrir le Pie menu, comment le rendre fonctionnel ?

Merci de m'aider car je crois que je me mélange joyeusement par manque de compréhension... l'intuition, ce n'est pas une science exacte !

ILYA
D'un monde 3D à un autre...
ILYA
Avatar de l’utilisateur
ILYA
 
Message(s) : 65
Inscription : 18 Oct 2017, 09:39

Retour vers Scripts - Python - OSL

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)

cron