Python est le langage utilisé par Blender.pour rédiger les scripts.
logo de la Fondation Blender
RETOUR page précédente
RETOUR SOMMAIRE
 
 

Methodes

 

 
Les méthodes sont comme des fonctions qui appartiennent à des objets. Elles effectuent des opérations.
Par exemple, le module bpy.ops.mesh inclut plusieurs méthodes pour créer de nouveaux maillages.
Vous pouvez facilement distinguer une méthode d'un attribut, car une méthode est terminée par une paire de parenthèses.
Dans cette section, vous utiliserez différentes méthodes pour ajouter et supprimer des objets dans votre scène.
 
La méthode primitive_cone_add() « construira un maillage conique » ; en d'autres termes, vous utiliserez cette méthode pour ajouter des cônes à votre scène
La méthode primitive_cone_add() peut également accepter des arguments pour spécifier le rayon du cône, la profondeur, l'emplacement, la rotation, l'échelle, etc.
 
Ajoutez une deuxième ligne de cône à votre script qui inclut un argument pour contrôler son emplacement :
bpy.ops.mesh.primitive_cone_add(location=(-3, 0, 0))
 
Lorsque vous exécutez le script, un nouveau cône apparaît. Mais, si vous vérifiez le panneau Outliner (Figure 3.7), vous remarquerez qu'il y a maintenant trois cônes dans la scène. Le cône supplémentaire est un doublon de celui au centre de la scène (de la même taille, dans la même position). Chaque fois que vous exécutez le script, vous ajoutez d'autres doublons !
 

Pour éviter cette duplication, vous pouvez ajouter une boucle qui vérifie et supprime tous les maillages. Vous n’avez plus besoin du cube ni de son code, il est donc normal que vous ne le remplaciez pas. Le script final ressemble à ceci :
 
# clear meshes in the scene dans le cas ou il ne sont pas sélectionnés
for obj in bpy.data.objects:
.......if obj.type == 'MESH':
............bpy.data.objects.remove(obj)
 
# clear meshes in the scene dans le cas ou il sont sélectionnés
for obj in bpy.context.objects:
.......if obj.type == 'MESH':
............bpy.data.objects.remove(obj)

 

 
La méthode remove() supprime l'objet (fourni entre parenthèses) de la scène. Désormais, chaque fois que vous exécutez le script, il efface les maillages avant de les ajouter à nouveau. Vous pouvez trouver de nombreuses autres méthodes bpy.ops.mesh dans la documentation de l'API.

Reconnaitre un Attribut d'une méthode
 
 


Attribut

Les attributs sont comme des variables qui appartiennent à des objets. Le type de données d'un objet détermine ses attributs. Par exemple, un cube (un maillage tridimensionnel composé de sommets) inclut des attributs pour ses dimensions, ses coordonnées, etc. Le type de données du cube est bpy_types.Object ; vous pouvez le confirmer en imprimant type(bpy.data.objects['Cube']) dans le terminal ou la console.

L'attribut location, l'un des nombreux attributs bpy_types.Object, contient les coordonnées de votre cube, que vous pouvez utiliser pour le repositionner :
 
bpy.data.objects['Cube'].location = (3, 0, 0)
 
Cela positionne le cube aux coordonnées x-y-z (3, 0, 0).
Dans ce cas, vous n'affectez que la coordonnée x, vous pouvez donc utiliser :
 
bpy.data.objects['Cube'].location[0] = 3
 
Détails
 
 

 

 
 
En Python, les méthodes et les attributs (ou propriétés) d’un objet sont accessibles de manière similaire, mais ils ont des caractéristiques
distinctes qui permettent de les différencier. Voici comment les reconnaître : Détails -

Comment reconnaitre les attributs des methodes

 



Vous pouvez utilisé la console Python pour affecter l'objet sélectionné dans la fenêtre d'affichage 3D. Le plus souvent, vous souhaiterez toutefois adresser des objets via des scripts Python sans vous fier à ce qui est sélectionné dans l'interface graphique. Vous pouvez utiliser bpy pour sélectionner des objets par nom, par leur position dans une séquence d'objets ou par une autre propriété.
 
Si vous utilisez bpy.context, vous devez sélectionner le cube dans la fenêtre d'affichage 3D (il est donc entouré d'orange) pour le manipuler avec du code Python. Avec bpy.data.objects, vous pouvez adresser un objet indépendamment de ce qui est actif dans l'interface Blender.
EXEMPLE2: Le cube n'est pas sélectionné dans la 3Dview
Dans la console taper:
>>>>bpy.data.objects['Cube'
[bpy.data.objects['Cube']]
EXEMPLE1: Le cube est sélectionné dans la 3Dview
Dans la console taper:
>>>>bpy.context.selected_objects
[bpy.data.objects['Cube']]
 

Adressage des objets

Importing bpy

La bibliothèque bpy est ce qui permet de tout réaliser.
Elle contient neuf modules principaux qui vous permettent de contrôler Blender à l'aide de Python :
bpy.app,
bpy.context,
bpy.data,
bpy.msgbus,
bpy.ops,
bpy.path,
bpy.props,
bpy.types
bpy.utils.
 
Dans la console Python, la bibliothèque bpy est automatiquement importée et disponible pour une utilisation immédiate. Mais lorsque vous écrivez des scripts Python dans l'éditeur de texte (ou tout autre éditeur de code), vous devez ajouter la ou les lignes d'importation nécessaires avant de pouvoir utiliser bpy
 
En plus de bpy, Blender inclut plusieurs modules autonomes, comme aud pour l'audio et mathutils pour manipuler les matrices, les eulers, les quaternions et les vecteurs.

La bibliothèque python


 
 
 
 

Def


En Python, le mot-clé "def" est utilisé pour définir une fonction.
Une fonction est un bloc de code réutilisable qui effectue une tâche spécifique. Voici les caractéristiques principales de def et de son usage :
Image pour la formation Blender:les nodes
Image pour la formation Blender:les nodes
Image pour la formation Blender:les nodes
Image pour la formation Blender:les nodes
Image pour la formation Blender:les nodes
Pourquoi utiliser def ?
  • Facilite la réutilisation du code : au lieu de réécrire le même code plusieurs fois, vous définissez une fonction et l'appelez quand nécessaire.
  • Rend le code plus lisible et mieux organisé.
  • Permet de diviser un programme complexe en sous-tâches plus simples à comprendre et à maintenir.
Une fonction avec des valeurs par défaut pour les paramètres
Une fonction avec une documentation
Une fonction avec paramètres
Une fonction sans paramètres ni retour
Éléments clés
  1. def :
    • Indique que vous définissez une nouvelle fonction.
  2. Nom de la fonction :
    • Doit être unique dans le contexte où il est défini.
    • Respecte les règles de nommage des variables (par exemple, pas d'espaces, éviter les mots-clés réservés, etc.).
    • Doit idéalement être descriptif pour indiquer ce que fait la fonction.
  3. Paramètres :
    • Facultatifs. Ils permettent de passer des valeurs dans la fonction.
    • Les paramètres sont placés entre parenthèses après le nom de la fonction.
  4. Bloc d'instructions :
    • Le code à exécuter est indenté sous le def.
    • C'est ici que vous écrivez les étapes pour accomplir la tâche.
  5. Valeur de retour :
    • Utilisez return pour envoyer une valeur en sortie de la fonction. Si return est omis, la fonction retourne automatiquement None.
 
 
 
  • Résumé :
    • register() :
      • Enregistre les classes et initialise les fonctionnalités du script ou addon.
      • Rendu nécessaire pour que Blender puisse reconnaître vos opérateurs, panneaux, etc.
    • unregister() :
      • Supprime les classes et nettoie les modifications.
      • Permet de désactiver ou de décharger votre script sans conflit.
    Ces deux fonctions sont des éléments standards pour tout script ou addon Blender.
  • 4. Cas complexe : Enregistrement de plusieurs classes
    Si vous avez plusieurs classes dans votre script, vous pouvez les gérer comme ceci :
  • 3. Pourquoi sont-elles nécessaires ?
    Dans Blender, chaque script ou addon doit enregistrer les classes qu’il utilise pour les rendre disponibles dans l’environnement de l’application. Ces fonctions permettent de :
    • Rendre le script fonctionnel : Si vous ne les utilisez pas, vos opérateurs, panneaux ou autres éléments ne fonctionneront pas.
    • Gérer le cycle de vie de votre script :
      • Lors de l’activation, Blender appelle register().
      • Lors de la désactivation, Blender appelle unregister() pour nettoyer correctement les ressources.
  • register() : Enregistre la classe SIMPLE_OT_hello pour que l'opérateur soit accessible dans Blender.
  • unregister() : Supprime la classe lorsque vous désactivez le script ou addon.
  • Point d'entrée if __name__ == "__main__": :
    • Cela exécute automatiquement la fonction register() lorsque le script est exécuté directement, utile pour tester votre script.

Exemple Register-Unregister


Image pour la formation Blender:les nodes
Image pour la formation Blender:les nodes

 

 
 
2. À quoi sert unregister() ?
La fonction unregister() est appelée pour désenregistrer vos classes personnalisées auprès de Blender. Cela libère la mémoire utilisée par votre script et empêche tout conflit avec d'autres scripts ou addons.
 
Ce que fait unregister() :
  • Supprime les classes enregistrées via bpy.utils.register_class.
  • Retire toutes les propriétés, raccourcis ou modifications apportées par le script.
  • Permet de nettoyer Blender en toute sécurité lorsque vous désactivez ou supprimez votre addon.

Unregister


Image pour la formation Blender:les nodes

 

 
 
  • bpy.utils.register_class() : Une fonction Blender qui enregistre une classe définie dans votre script.
  • La classe doit hériter d'une des classes Blender comme bpy.types.Operator ou bpy.types.Panel.
Les fonctions register() et unregister() dans un script Python pour Blender servent à gérer l'intégration de votre script ou addon dans Blender. Elles permettent d'enregistrer et de désenregistrer les classes et fonctionnalités que vous ajoutez via l'API de Blender.
 
À quoi sert register() ?
La fonction register() est appelée pour enregistrer vos classes personnalisées auprès de Blender. Cela permet de rendre votre script fonctionnel et accessible depuis l'interface utilisateur ou via des raccourcis. Blender ne reconnaît vos classes que si elles ont été enregistrées.
 
Ce que fait register() :
  • Enregistre les classes définies dans votre script (par exemple, opérateurs, panneaux, menus).
  • Ajoute des propriétés ou des raccourcis personnalisés, si définis dans le script.
  • Initialise certaines variables ou configurations nécessaires à votre script.

Register


Image pour la formation Blender:les nodes

 

 
 

La fenêtre d'édition "Python console"


Raccourcis :
>>Pour grossir les lignes : CTRL enfoncé puis molette souris
>>Pour répéter la ligne du dessus : Fleche du haut
>>Saisie automatique(autocomplete) : Touche tabulation
>>Choisir dans la liste proposé :appuyer sur la premiere lettre et à nouveau tabulation.
>>C : équivaut à taper "bpy.context"
>>D équivaut à taper "bpy.data"
 
Aller dans la fenêtre d'édition Python console
 
 

La fenêtre d'édition "Text Editor"


Aprés avoir fait “New” dans le “data block” du “Text Editor”, vous pourrez ici
écrire votre propre script, et une fois terminé, le lancer avec le bouton (run)
pour voir son action dans Blender.
 
On peut dans cette fenêtre ouvrir (open) un script récupéré sur internet ou
autre et le lancer avec le bouton (run) pour voir son action dans Blender.
 
Dans le cas où vous avez un addon qui n’est composé que d’un seul fichier
se terminant par “.py”, vous pouvez l’ouvrir dans cette fenêtre et le modifier à
votre guise et le lancer avec le bouton (run) pour voir son résultat.

Aller dans la fenêtre d'édition TextEditor

Principes
 
1- Le langage utilisé par les scripts s’appelle “python”. Un fichier python aura toujours
une extension “.py”
 
2- Il existe 4 fenêtres d’éditions pour utiliser les scripts:
..........- La fenêtre “Info"
..........- Lla fenêtre “Text Editor”
..........- La fenêtre “Python Console”,
..........- La fenêtre“preference" >onglet Addon”
3- La bibbliothèque python
4 - Adressage des objets
5 - Attributs
6 - Méthodes
7 - Class
8 - Def
9 - Register - Unregister

Python Accueil

 

 

 

 

 
En Python, le mot-clé class est utilisé pour définir une classe, qui est un modèle (ou blueprint) pour créer des objets. Une classe regroupe des données (appelées attributs) et des fonctionnalités (appelées méthodes) en une seule entité.
 
Une classe est un concept central de la programmation orientée objet (POO). Elle représente une abstraction qui permet de créer des objets partageant des caractéristiques communes.
  • Attributs : Les variables de la classe ou de ses instances.
  • Méthodes : Les fonctions définies à l'intérieur d'une classe, qui agissent sur les données de l'objet
     
    Détails des composantes
    1. class :
      • Mot-clé pour définir une classe.
    2. Nom de la classe :
      • Respecte les conventions de nommage en PascalCase (majuscule initiale pour chaque mot).
      • Doit être descriptif de ce que représente la classe.
    3. Méthode spéciale __init__ :
      • Une méthode spéciale appelée automatiquement lors de la création d'une nouvelle instance.
      • Sert généralement à initialiser les attributs de l'objet.
    4. self :
      • Représente l'instance actuelle de la classe.
      • Utilisé pour accéder aux attributs et méthodes de l'objet.

Class

Image pour la formation Blender:les nodes
Image pour la formation Blender:les nodes
Image pour la formation Blender:les nodes
1. Classes pour les opérateurs (Actions personnalisées)
Ces classes permettent de définir des opérateurs, qui sont des commandes exécutables.
  • bpy.types.Operator : Classe de base pour définir des opérateurs.
    • Exemple : Déplacer un objet, modifier des UVs, ou exécuter une opération personnalisée.
  • bpy.types.Macro : Pour créer des opérateurs qui regroupent plusieurs autres opérateurs (opérateurs macros).

2. Classes pour l'interface utilisateur (UI)
Ces classes permettent de personnaliser ou d'ajouter des éléments à l'interface utilisateur.
  • bpy.types.Panel : Ajouter des panneaux dans différentes zones de l'interface (Propriétés, Vue 3D, etc.).
  • bpy.types.Menu : Ajouter des menus personnalisés (déroulants ou contextuels).
  • bpy.types.UIList : Créer des listes interactives personnalisées dans l'interface (par exemple, une liste d'objets ou d'éléments spécifiques).
  • bpy.types.Header : Ajouter ou modifier les en-têtes dans des zones spécifiques de l'interface.
  • bpy.types.Tool : Ajouter des outils personnalisés dans la barre des outils de la Vue 3D.
  • bpy.types.OperatorProperties : Permet de définir des groupes de propriétés pour les opérateurs dans l'UI.

3. Classes pour les propriétés et les données
Ces classes permettent de gérer les données ou de définir des propriétés dans Blender.
  • bpy.types.PropertyGroup : Définir un groupe de propriétés personnalisées, généralement utilisé avec des collections.
  • bpy.types.ID : Classe de base pour tous les types de données identifiables (objets, maillages, matériaux, etc.).
  • bpy.types.AddonPreferences : Gérer les préférences utilisateur pour un addon.

4. Classes pour les types de données Blender
Ces classes permettent de manipuler les données dans Blender.
4.1 Types d'objets
  • bpy.types.Object : Représente les objets généraux (Maillage, Lumière, etc.).
  • bpy.types.Mesh : Données de maillage.
  • bpy.types.Curve : Données de courbes.
  • bpy.types.Surface : Données de surfaces.
  • bpy.types.Text : Données de texte.
  • bpy.types.Camera : Données de caméra.
  • bpy.types.Light : Données de lumière.
4.2 Données liées aux matériaux
  • bpy.types.Material : Données de matériau.
  • bpy.types.Texture : Données de texture.
  • bpy.types.ShaderNodeTree : Arbre de nœuds pour les shaders.
4.3 Autres types liés aux données
  • bpy.types.Collection : Groupes d'objets.
  • bpy.types.Image : Données d'image.
  • bpy.types.World : Données d'environnement.
  • bpy.types.Scene : Représente une scène Blender.

5. Classes pour les événements et interactions
  • bpy.types.KeyMap : Définir des raccourcis clavier personnalisés.
  • bpy.types.Timer : Gérer des événements temporisés ou cycliques.
  • bpy.types.Gizmo : Créer des gizmos personnalisés pour la manipulation dans la Vue 3D.

6. Classes spécifiques aux greffons et extensions
  • bpy.types.AddonPreferences : Permet de définir et gérer les préférences utilisateur pour un addon.
  • bpy.types.OperatorFileImport et bpy.types.OperatorFileExport : Créer des opérateurs pour importer/exporter des fichiers.

7. Classes avancées pour les nœuds
Ces classes permettent de manipuler les nœuds dans les shaders, les géométries, ou les composites.
  • bpy.types.Node : Classe de base pour tous les nœuds.
  • bpy.types.NodeTree : Représente un arbre de nœuds.
  • bpy.types.ShaderNode : Nœud spécifique aux shaders.
  • bpy.types.GeometryNode : Nœud spécifique aux géométries procédurales.

8. Classes pour les modifications physiques et les contraintes
  • bpy.types.Modifier : Classe de base pour tous les modificateurs.
    • Exemples : bpy.types.SubsurfModifier, bpy.types.ArrayModifier.
  • bpy.types.Constraint : Classe de base pour toutes les contraintes.
    • Exemples : bpy.types.CopyLocationConstraint, bpy.types.RigidBodyConstraint.

9. Classes pour les animations
  • bpy.types.Action : Représente une action d'animation.
  • bpy.types.Keyframe : Représente une image clé dans une animation.
  • bpy.types.FCurve : Représente une courbe d'animation.
 
Pourquoi utiliser des classes ?
  1. Modélisation du monde réel :
    • Les classes permettent de représenter des objets du monde réel (comme une voiture, un animal, etc.) avec leurs attributs et comportements.
  2. Réutilisabilité :
    • Une classe peut être utilisée pour créer plusieurs objets similaires sans réécrire le même code.
  3. Encapsulation :
    • Permet de regrouper des données et des comportements, et de les protéger des modifications accidentelles.
  4. Héritage :
    • Une classe peut être dérivée d'une autre, héritant de ses attributs et méthodes, ce qui favorise la modularité et la réutilisation du code.
Quelques exemples de "class" héritées
Héritage dans une classe
Ajout d'une méthode pour modifier les attributs