[PYTHON] [Blender] Attribuez des touches de raccourci à vos propres fonctions dans le script

Certaines fonctionnalités et modules complémentaires de Blender sont dotés de touches de raccourci pour vous aider à exécuter rapidement les fonctions fréquemment utilisées. Vous pouvez attribuer des touches de raccourci aux fonctions de vos propres modules complémentaires ainsi qu'aux fonctions de Blender. Par exemple, l'add-on "Screencast Key" qui affiche les touches pressées avec le clavier ou la souris sur l'écran en est un exemple.

Dans cet article, je vais vous montrer comment attribuer une touche de raccourci à votre propre fonction en fonction d'un exemple qui agrandit / réduit l'objet sélectionné lorsque vous appuyez sur la touche de raccourci attribuée.

échantillon

shortcut_key.py



import bpy


bl_info = {
    "name": "Tutorial: Shortcut key",
    "author": "Nutti",
    "version": (1, 0),
    "blender": (2, 74, 0),
    "location": "Object > Tutorial: Shortcut key",
    "description": "Tutorial: Shortcut key.",
    "warning": "",
    "support": "COMMUNITY",
    "wiki_url": "",
    "tracker_url": "",
    "category": "Object"
}

addon_keymaps = []    #Liste des touches de raccourci enregistrées


class ObjectScaleUp(bpy.types.Operator):
    """Agrandir l'objet sélectionné"""
    
    bl_idname = "object_transform.object_scale_up"
    bl_label = "Scale Up Object"
    bl_description = "Scale up selected object"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        active_obj = context.active_object
        active_obj.scale = active_obj.scale * 2.0    #Double l'objet sélectionné
        return {'FINISHED'}


class ObjectScaleDown(bpy.types.Operator):
    """Réduire l'objet sélectionné"""
    
    bl_idname = "object_transform.object_scale_down"
    bl_label = "Scale Down Object"
    bl_description = "Scale down selected object"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        active_obj = context.active_object
        active_obj.scale = active_obj.scale / 2.0    #1 objet sélectionné/Réduit à 2
        return {'FINISHED'}


def register():
    bpy.utils.register_module(__name__)
    wm = bpy.context.window_manager
    kc = wm.keyconfigs.addon
    #Créer une liste de touches de raccourci à enregistrer
    # (Bpy à exécuter lorsqu'une touche est enfoncée.types.Opérateur bl_idname,Clé,un événement,Touche Ctrl,touche Alt,Touche Majuscule)
    key_assign_list = [
        (ObjectScaleUp.bl_idname, "U", "PRESS", True, True, False),
        (ObjectScaleDown.bl_idname, "D", "PRESS", True, True, False),
        ]
    if kc:
        km = kc.keymaps.new(name="3D View", space_type="VIEW_3D")    #Enregistré comme touche de raccourci pour "View 3D"
        for (idname, key, event, ctrl, alt, shift) in key_assign_list:
            kmi = km.keymap_items.new(
                idname, key, event, ctrl=ctrl, alt=alt, shift=shift)    #Enregistrement des touches de raccourci
            addon_keymaps.append((km, kmi))


def unregister():
    bpy.utils.unregister_module(__name__)
    for km, kmi in addon_keymaps:
        km.keymap_items.remove(kmi)    #Annuler l'enregistrement de la touche de raccourci
    addon_keymaps.clear()


if __name__ == "__main__":
    register()

Comment utiliser

  1. Installez le script en vous référant à la Page Wiki de Blender.
  2. Sélectionnez l'objet sur lequel vous souhaitez effectuer un zoom avant ou arrière.
  3. Appuyez sur ** Ctrl + Alt + U ** en même temps pour vérifier que l'objet sélectionné a été agrandi.
  4. Appuyez sur ** Ctrl + Alt + D ** en même temps pour vérifier que l'objet sélectionné a été réduit.

Exemple d'explication

L'explication de base du script Blender est présentée dans l'article suivant, nous nous concentrerons donc ici sur l'explication des éléments nouvellement ajoutés. [Blender] Comment créer un plug-in Blender

Enregistrement des touches de raccourci

Enregistrez la touche de raccourci lors de l'installation du script. Avant d'enregistrer la touche de raccourci, obtenez la carte des touches de la zone à laquelle la touche de raccourci est affectée avec la fonction bpy.context.window_manager.eyconfigs.addon.keymaps.new et affectez-la à` `` km Faire. Puisque nous attribuons cette fois un keymap à la zone "View3D", nous avons défini l'argument space_type sur `` `` View_3D.

km.keymap_items.L'argument passé à new est clé_assign_Je me suis inscrit à l'avance pour la liste.



#### **`for (idname, key, event, ctrl, alt, shift) in key_assign_list:Par clé_assign_Après avoir élargi la liste, km.keymap_items.Utilisez la nouvelle fonction pour enregistrer la touche de raccourci.`**

La signification de chaque variable dans l'instruction, for est indiquée ci-dessous.

variable sens
bl_idname Événement à exécuter lorsque la touche de raccourci est enfoncée (bpy.types.Operatordebl_idname
key Touches du clavier à enregistrer
event Possibilité d'exécuter l'événement
(ex. "PRESS":Au moment où la touche est enfoncée)
ctrl Si vous devez appuyer sur la touche Ctrl en même temps pour déclencher un événementTrue
alt Si vous devez appuyer simultanément sur la touche Alt pour déclencher un événementTrue
shift Si vous devez appuyer simultanément sur la touche Shift pour déclencher un événementTrue

Il semble que vous puissiez spécifier d'autres arguments, mais fondamentalement, ce ne sera pas un problème si vous vous souvenez simplement de ce qui précède. Si vous souhaitez connaître les arguments spécifiques, veuillez vérifier à partir de l'URL suivante. http://www.blender.org/api/blender_python_api_2_63_14/bpy.types.KeyMapItems.html Enfin, enregistrez les informations d'enregistrement dans la variable globale addon_keymaps au cas où vous désinscrire la touche de raccourci.

À propos, dans Blender, les touches de raccourci sont déjà attribuées à de nombreuses fonctions, il est donc étonnamment difficile de trouver une touche sans rien assigné à partir d'une seule touche. Dans de tels cas, regardez les ** combinaisons avec Ctrl, Maj et Alt **. Les touches combinées sont moins susceptibles d'être déjà affectées qu'une seule touche, il est donc assez facile de trouver une clé libre.

    wm = bpy.context.window_manager
    kc = wm.keyconfigs.addon
    #Créer une liste de touches de raccourci à enregistrer
    # (Bpy à exécuter lorsqu'une touche est enfoncée.types.Opérateur bl_idname,Clé,un événement,Touche Ctrl,touche Alt,Touche Majuscule)
    key_assign_list = [
        (ObjectScaleUp.bl_idname, "U", "PRESS", True, True, False),
        (ObjectScaleDown.bl_idname, "D", "PRESS", True, True, False),
        ]
    if kc:
        km = kc.keymaps.new(name="3D View", space_type="VIEW_3D")    #Enregistré comme touche de raccourci pour "View 3D"
        for (idname, key, event, ctrl, alt, shift) in key_assign_list:
            kmi = km.keymap_items.new(
                idname, key, event, ctrl=ctrl, alt=alt, shift=shift)    #Enregistrement des touches de raccourci
            addon_keymaps.append((km, kmi))

Annuler l'enregistrement de la touche de raccourci

Vous devez désenregistrer la touche de raccourci lors de la désinstallation du script. Pour désenregistrer la touche de raccourci, appelez `keymap_items.remove ()` avec les informations enregistrées dans addon_keymaps.

    for km, kmi in addon_keymaps:
        km.keymap_items.remove(kmi)    #Annuler l'enregistrement de la touche de raccourci
    addon_keymaps.clear()

Recommended Posts

[Blender] Attribuez des touches de raccourci à vos propres fonctions dans le script
Attribuer des tweets aux touches de raccourci
[Blender] Utilisez OpenGL depuis l'intérieur du script
(Note) Comment passer le chemin de votre propre module
[Blender] Script pour vérifier si celui sélectionné est un mesh
Créez le thème de Pythonista 3 comme Monokai (comment créer votre propre thème)
Reliez ROS à votre propre protocole