====== Differences ====== This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
doc_opener [2015/08/20 09:24] swann [Fonctions clefs] |
doc_opener [2015/08/20 12:07] (current) swann [c. custompath operator] |
||
---|---|---|---|
Line 32: | Line 32: | ||
Dans cette partie, nous allons éclaircir le fonctionnement de certaines fonctions clef de l'addon. | Dans cette partie, nous allons éclaircir le fonctionnement de certaines fonctions clef de l'addon. | ||
- | === a. initSceneProperties === | + | ==== a. initSceneProperties ==== |
C'est ici que ce déroule l'enregistrement des variables de scènes, nécessaires à toutes sortes de choses. On retrouve par exemple tous les champs, que ce soit la séquence, l'asset ou autre sous forme de variable de scène ici. | C'est ici que ce déroule l'enregistrement des variables de scènes, nécessaires à toutes sortes de choses. On retrouve par exemple tous les champs, que ce soit la séquence, l'asset ou autre sous forme de variable de scène ici. | ||
Cette fonction de divise en deux parties, l'instentiations de variables déstinées à être **dynamiques** ou **statiques**.\\ | Cette fonction de divise en deux parties, l'instentiations de variables déstinées à être **dynamiques** ou **statiques**.\\ | ||
Line 91: | Line 91: | ||
Cette dernière consiste à appeler la fonction **update_naming(self,context)** __à chaque modification de la propriété__. Ce qui nous amène à cette fonction. | Cette dernière consiste à appeler la fonction **update_naming(self,context)** __à chaque modification de la propriété__. Ce qui nous amène à cette fonction. | ||
- | === b. update_naming === | + | ==== b. update_naming ==== |
Comme précédement expliqué, Opener utilise la librairie de Naming. Cette dernière est mise en place dans le module interface.py, la fonction update_naming est chargé de préparer le dictionnaire avec tous les champs avant de le charger avec la librairie. | Comme précédement expliqué, Opener utilise la librairie de Naming. Cette dernière est mise en place dans le module interface.py, la fonction update_naming est chargé de préparer le dictionnaire avec tous les champs avant de le charger avec la librairie. | ||
<code python> | <code python> | ||
Line 172: | Line 172: | ||
ressources.command.append("! missing field !") | ressources.command.append("! missing field !") | ||
+ | </code> | ||
+ | |||
+ | Nous allons maintenant parcourir un des opérateurs crée pour l'addon. Il faut savoir que dans Blender, les Operateurs représentent un des outils les plus pratiques pour le développement pour de nombreuses raisons( ils sont facilement accessible pour l'utilisateur, ils peuvent prendre des arguments,etc,...).\\ | ||
+ | Dans l'Opener, j'utilise aussi les opérateurs à des fins ergonomiques pour mettre en place des boutons. En fin de compte, chaque boutons est un opérateur auquel on a assigné une icône lors de son appel dans l'interface. | ||
+ | |||
+ | |||
+ | ==== c. custompath operator==== | ||
+ | |||
+ | Pour apprendre à faire un opérateur de base, suivez le lien suivant:[[http://www.blender.org/api/blender_python_api_2_57_release/bpy.types.Operator.html|Blender Operator Guide]]\\ | ||
+ | |||
+ | La première partie de l'opérateur consiste naturellement à déclarer les différents champs est variables nécessaire: | ||
+ | <code python> | ||
+ | #Entête avec héritage de l'object Operator de blender, nécessaire à chaque fois que l'on créer un opérateur | ||
+ | class OBJECT_OT_custompath(bpy.types.Operator): | ||
+ | bl_idname = "object.custom_path" | ||
+ | bl_label = "open" | ||
+ | __doc__ = "" | ||
+ | | ||
+ | filename_ext = "" | ||
+ | filter_glob = StringProperty(default="", options={'HIDDEN'},subtype='DIR_PATH') | ||
+ | | ||
+ | |||
+ | #Variable stockant le chemin choisi | ||
+ | filepath = StringProperty(name="File Path", description="Filepath importing store dir", maxlen= 1024) | ||
+ | #optionnel, récupère les fichiers séléctionnés | ||
+ | files = CollectionProperty( | ||
+ | name="File Path", | ||
+ | type=bpy.types.OperatorFileListElement) | ||
+ | </code> | ||
+ | |||
+ | Ici il s'agit du corps de l'opérateur, la fonction execute va s'éxecuter à chaque appel de l'opérateur. Il en est de même ,pour les fonctions draw et invoke. | ||
+ | <code python> | ||
+ | def execute(self, context): | ||
+ | #ajout du chemin sélectionné | ||
+ | ressources.Items.append((str(self.properties.filepath),str(self.properties.filepath),"")) | ||
+ | #Création du tuple temporaire | ||
+ | t=(str(self.properties.filepath),str(self.properties.filepath))) | ||
+ | #Mise à jour de la liste des dossier racine | ||
+ | interface.UpdateEnum(bpy.types.Scene,ressources.Items,'Store',t) | ||
+ | | ||
+ | #Sauvegarde du dossier sélectionné de manière persistante | ||
+ | persistence.write_config() | ||
+ | #Find de fonction | ||
+ | return {'FINISHED'} | ||
+ | | ||
+ | #Fonction d'affichage de l'explorateur de fichier | ||
+ | def draw(self, context): | ||
+ | self.layout.operator('file.select_all_toggle') | ||
+ | def invoke(self, context, event): | ||
+ | wm = context.window_manager | ||
+ | wm.fileselect_add(self) | ||
+ | return {'RUNNING_MODAL'} | ||
</code> | </code> | ||
---- | ---- |