(1) 2 »


Comment créer un script sur Blender ?
OverdOzed
Inscrit:
25/09/2011 17:56
De RODEZ
Post(s): 307
Bonjour à tous,

Je me suis lancer dans le scripting Blender.

Pour cette raison je voulais partager certain liens qui m'ont permis de démarrer sur des bases un peu plus solide.

Avant de s'attaquer à l'API sur le site de Blender qui est par moment décourageante commencez par aller sur ces liens :

Vous allez perdre une heure de votre vie avec ce lien mais vous allez en contre partie gagner un temps précieux dans l'utilisation du scripting --> Introduction au scripting Blender

Celui-ci pour un scripting de menu simple --> Créer un menu personnalisé

Ici comment importer d'autres librairie Python et interagir avec les objets Blender --> Assigner un material aléatoirement

Ici comment convertir un script en Add-ons --> Py2Add-ons

Bien entendu l'API Blender -->API Blender Python 2.59/2.60

Si vous voyez d'autres liens intéressants n'hésitez pas à les poster.

Bon blend à tous.

Contribution le : 06/11/2011 15:59
_________________
Le SHADERTOOLS NG:
- Github:ici
- FTP:ici
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
OverdOzed
Inscrit:
08/11/2011 07:41
Post(s): 324
Salut Tinangel !
Je n'avais pas vu ce topic .
Très utile pour moi , et pour t'aider sur la ligne ( les lignes ... ) du front .

Si je trouve des infos utiles , je posterai ici .

Contribution le : 20/11/2011 15:46
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
RegulatorZ
Inscrit:
01/07/2005 18:05
De Guyane francaise dans la jungeul
Post(s): 10993
Salut Tinangel, j'ai mis une agrafe sur ton post,
merci pour ses infos au niveau du forum "Python & Plugins".
++

Contribution le : 20/11/2011 17:23
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
OverdOzed
Inscrit:
25/09/2011 17:56
De RODEZ
Post(s): 307
Avec plaisir.

Si je peux aider

++

Contribution le : 20/11/2011 20:52
_________________
Le SHADERTOOLS NG:
- Github:ici
- FTP:ici
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
Fou Furieux du Clan
Inscrit:
27/09/2010 08:26
De On a été allemand autrefois!
Post(s): 113
Sympa ce shadertool, m'en vais me l'installer rapidement

Contribution le : 09/02/2012 13:02
_________________
Utilisateur et fan de depuis 1996!
Mes blends "montrables" sur Blendswap, Ma Galerie BlenderClan
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
OverdOzed
Inscrit:
25/09/2011 17:56
De RODEZ
Post(s): 307
Salut,

Je me permet d'un moment de calme au boulot pour vous permettre d'organsier vos futurs scripts :

Voici les infos que vous devez placer dans l'entête :

******************************************************
bl_info = {
    "name": "ShaderTools Next Gen", #Nom du script
    "author": "GRETETE Karim (Tinangel)", #L'auteur du script
    "version": (0, 8, 5), #La version
    "blender": (2, 6, 0), #La version de blender
    "api": 41098, #La version de l'api utilisé (vous l'avez dans la Splash Screen au démarrage de Blender
    "location": "User Preferences", #Le panneau dans lequel est l'add-on est accessible/activable ici les Préférences Utilisateurs 
    "description": "Shader tools for blender", #Une description de l'add-on
    "warning": "Alpha version", #Permet de prévenir d'une chose importante. Ici le fait que ce soit une version Alpha et par conséquent non aboutie.
    "wiki_url": "http://noadress", #L'adresse du wiki/site/aide
    "tracker_url": "", #Il me semble que dans cette zone on peut préciser le SVN/Github ou autre. La communauté me reprendra surement car j'avoue avoir un doute sur cette option. 
    "support": 'COMMUNITY',#Ici c'est le type de support. Par défaut mettez COMMUNITY et je vous souhaite qu'ils prennent le statut d'OFFICIAL.
    "category": "System", #La catégorie dans laquelle votre script sera activable. Ici c'est la rubrique SYSTEM. 
}

******************************************************


******************************************************
Petite "astuce" pour la structure de vos scripts. Pour vous permettre de structurer au mieux votre travail (notamment lorsque vos scripts deviennent volumineux de créer ce que je vais appeler des sous-scripts (ou vos propres bibliothèques):

- Dans notre exemple nous disposons d'un répertoire contenant nos fichiers :
--> le dossier se nomme "shader_tools_ng" (du nom du dossier de l'add-on)

- Puis à l'intérieur nous disposons d'un fichier qui équivaut à la "racine" de notre script ou si vous préférez, le fichier qui sera éxécuter en premier:
--> ce fichier se nomme "__init__.py"

Au lancement du script c'est lui qui sera exécuter en premier. Voilà ce que contient pour le moment notre fichier :
bl_info = {
    "name": "ShaderTools Next Gen",
    "author": "GRETETE Karim (Tinangel)",
    "version": (0, 8, 5),
    "blender": (2, 6, 0),
    "api": 41098,
    "location": "User Preferences",
    "description": "Shader tools for blender",
    "warning": "Alpha version",
    "wiki_url": "http://noadress",
    "tracker_url": "",
    "support": 'COMMUNITY',
    "category": "System",
}

import bpy #Ici c'est la bibliothèque principale de Blender pour gérer les différents éléments de l'interface (bouton, barre de progression ...). C'est elle que l'on chargera en priorité pour travailler sous Blender.


Nous pourrions ajouter plusieurs bibliothèques comme ici :
import bpy, sqlite3, os, platform, locale, shutil, sys, time, shader_tools_ng.libs, threading, webbrowser
--> Pour plus de détails sur ces Bibliothèques je vous laisse chercher avec votre moteur de recherche préféré. ATTENTION : vous ne trouverez rien de particulier sur la bibliothèque "shader_tools_ng.libs" car elle a été créée de toute pièce par mes soins. C'est d'ailleurs cette bibliothèque qui va nous intéresser non pas qu'on va la décrire dans son intégralité mais juste voir ensemble le mécanisme entre le script principal "__init__.py" et cette bibliothèque.


Imaginons que nous voulions écrire une fonction conséquente qui aura pour objectif de gérer plusieurs paramètres par exemple :
--> 1 module dont l'objectif est de gérer une base de données conséquente
--> 1 module permettant de données des informations suivant les données sélectionner par l'utilisateur
--> 1 module permettant de faire une recherche dans la base de données
--> 1 module permettant d'enregistrer des données dans la base
--> etc ....

Là il existe 3 solutions :
1/ J'écris tout dans le fichier "__init__.py"
2/ Je déprime et ne me lance pas un truc aussi énorme
3/ Je créer un bibliothèque

Dans notre cas on va bannir les 2 premières solutions car la première rendrait notre code trop lourds (et serait par conséquent plus lent à s'exécuter). La seconde possibilité bein on est pas là pour faire dans la déprime donc à bannir .


Nous allons créer par exemple deux sous-scripts dans un répertoire que l'on appelle "libs":
--> 1 bibliothèque du nom de "open.py" contenant les fonctions pour ouvrir la base/les informations/ la recherche dans la base
--> 1 bibliothèque du nom de "save.py" contenant les fonctions de sauvegardes


Voilà à quoi peut ressembler notre fichier "open.py":
import bpy
def HelloWorld():
    print("Bonjour le monde : voici ma bibliothèque OPEN.PY")


Et ici voilà à quoi peut ressembler le fichier "save.py":
import bpy
def BonjourLeMonde():
    print("Bonjour le monde : voici ma bibliothèque SAVE.PY")


Donc à ce stade voilà ce que nous devrions avoir dans notre dossier "shader_tools-ng" :

shader_tools_ng
-> __init__.py et le dossier libs
----> puis dans le dossier libs : save.py et open.py

Cependant il nous manque encore un fichier pour lier tout ce petit monde. Nous allons dans le dossier "libs" puis nous allons créer un nouveau fichier "__init__.py" :
--> Nous avons dans le dossier "libs" les fichiers suivants : save.py, open.py et __init__.py

Pour lier tout se petit monde nous allons ouvrir ce fichier __init__.py nouvellement créé, voilà à quoi il devrait ressembler :

__all__ = ("open", "save",)

ou encore à ça (c'est juste une question de lisibilité):
__all__ = (
"open", 
"save",
)


A ce stade les liens sont correctement effectués. Il nous reste une dernière chose. Nous allons ouvrir le fichier __init__.py principal (celui qui est dans le dossier shader_tools_ng et pas dans le dossier libs puis d'ajouter au niveau du import notre nouvelle bibliothèque :
-->
import bpy, shader_tools_ng.libs


A partir de se moment là il est trés facile d'accéder à notre bibliothèque. Par exemple je veux accéder à ma fonction BonjourLeMonde() qui est dans mon fichier save.py bein rien de plus simple :
-->
 save.BonjourLeMonde()


Et voilà pour cette "astuce" qui vous permet de vous simplifiez la lisibilité de votre code source.

Cette méthode peut paraitre déroutante au premier abord mais pour un script volumineux c'est que du bonheur. Cela se traduit ensuite par un gain de temps non négligeable.
*******************************************************

En espérant que cela puisse aiguiller certains d'entre vous.

A++ le BC.

Contribution le : 24/09/2012 15:56
_________________
Le SHADERTOOLS NG:
- Github:ici
- FTP:ici
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
OverdOzed
Inscrit:
25/09/2011 17:56
De RODEZ
Post(s): 307
Salut tout le monde,

Voici un petit script qui permettra aux devs de ne plus se prendre la tête avec la liste des Icones incluent dans Blender.

Je sais qu'il doit en exister d'autres qui vous permettent d'afficher la liste de tout les îcones de Blender mais celui-ci je vais le commenter :

Voilà notre code : ATTENTION JE NE METS PAS TOUTES LA LISTE D'ICONES (pour rendre le code plus facile à comprendre)

#Ici le bl_info que je n'ai plus besoin de commenter (voir plus haut dans les com's pour plus de détails
bl_info = {
    "name": "Icones list",
    "author": "GRETETE Karim (Tinangel)",
    "version": (1, 0, 0),
    "blender": (2, 6, 3),
    "api": 45996,
    "location": "User Preferences",
    "description": "Icones list",
    "warning": "",
    "wiki_url": "",
    "tracker_url": "",
    "support": 'COMMUNITY',
    "category": "System",}


import bpy #idem que pour le bl_info
from bpy.types import Panel # Ici par contre nous allons importer le bibliothèque permettant
                            # de gérer les panneaux 

#Icones keys
def IconesKeys(): # Ici une fonction contenant la liste de tous les îcones, 
                  # je l'ai volontairement raccourcis, le fichier en téléchargement est complet
    temp = \
        (
        "NONE", "QUESTION", "ERROR", "CANCEL", "TRIA_RIGHT", "TRIA_DOWN", "TRIA_LEFT", "TRIA_UP",  
        )
    return temp # ici je renvoie ma liste d'îcone
#end Icones keys

class ShowIcones(bpy.types.Operator):
    bl_idname = "object.icones_operator_show"
    bl_label = " "

    def draw(self, context):
        layout = self.layout
        
        create_row = 0 # ici je créé une variable contenant 0
        row = layout.row(align=True) # ici de créer une ligne pour pouvoir dessiner
        for e in IconesKeys(): # là je créer une boucle qui contient à chaque tour un élément
                               # de ma liste d'icônes
            if create_row >= 8: # Ici une condition qui créera une nouvelle ligne quand la variable
                                # create_row sera egal ou supérieur à 8
                row = layout.row(align=True)# là je créer une nouvelle ligne
                create_row = 0 # Je replace mon compteur à 0
            row.label(e, icon="%s" % e) # Ici je créer une zone texte dont le nom sera le nom de
                                        # l'icône de Blender et affichera l'image correspondant à 
                                        # l'icône en question (celle de la valeur 'e')
            create_row = create_row + 1 # Ici j'ajoute +1 à mon compteur on peut aussi utiliser cette
                                        # notation si mes souvenirs sont bons create_row += 1
                                        # (moi ça me parait plus clair comme je l'ai écris mais c'est
                                        #  une mauvaise habitude je sais) 
            
        row = layout.row(align=True) # Une fois la boucle terminé j'ajoute une ligne supplémentaire

    def invoke(self, context, event): # Zone qui va me permettre d'invoquer une fenêtre
        wm = context.window_manager.invoke_popup(self, width=1200) # Là j'ai opté pour une popup dont la 
                                                                   # largeur sera de 1200pixels
                                                                   
        return {'RUNNING_MODAL'} # Ici je renvois un Modal car la fenêtre n'est pas censé se faire de suite



    def execute(self, context): # une fois le curseur de la souris de l'utilisateur on exécutera ce bloc
        return {'FINISHED'} # Aucun code n'a été placé avant donc ce bloc se contentera de se refermer


class IconesOperator(Panel): #Ici je vais créer un panneau dans la zone TOOLS de Blender
                             # il s'agit de la zone à gauche de la vue 3D.
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
    bl_context = "objectmode"
    bl_idname = "object.icones_operator"
    bl_label = "Icones list"

    def draw(self, context):
        layout = self.layout
        row = layout.row()
        row.operator("object.icones_operator_show", text="Show icons", icon="INFO" ) # ici je créer un 
                                                                  # bouton qui permettra à l'utilisateur
                                                                  # d'afficher la popup

    def execute(self, context):
        return {'FINISHED'}


MyReg = \
    (
     ShowIcones, IconesOperator, 
    )

def register():
    for c in MyReg: bpy.utils.register_class(c)
#end register
def unregister():
    for c in MyReg: bpy.utils.unregister_class(c)
#end unregister

if __name__ == "__main__":
    register()



Comme d'hab j'espère que ça en aidera certains.

Le script complet est téléchargeable ici -−> Icones list

Et ici la version optimisée et améliorée par mapleberry (merci à lui ): Version Optimisée (Mise à jour le 15/12/2012)

++ le BC

Contribution le : 13/10/2012 18:14
_________________
Le SHADERTOOLS NG:
- Github:ici
- FTP:ici
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
OverdOzed
Inscrit:
13/02/2010 17:29
De Bruxelles
Post(s): 1310
Je ne crois pas m'être trompé de rubrique.

Creating a Blender 2.6 Python add-on

Contribution le : 09/11/2012 16:45
_________________
Windows 10 64 AMD Ryzen 5 1400 Quad-Core Processor - 16 GB RAM - Gigabyte GTX 1080
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
Fou Furieux du Clan
Inscrit:
20/08/2012 17:07
De France / Doubs
Post(s): 160
Merci pour ton script tinangel
Par contre tu sais si on peut rendre ca copiable ? genre tu cliques sur le nom et hop dans le clipboard ou au pire dans un champ texte sélectionnable sous tes 3 boutons...
devoir les retaper alors qu'on les a là sous le nez, c'est frustrant

Pour débuter en script ca c'est pas mal aussi:
http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Interface

Par contre j'ai une question, est-ce que quelqu'un sait comment ajouter un panneau pour le choix de paramètres dans un script d'export ?

merci
mapleberry.

EDIT:
Tu peux simplifier ton script en évitant d'appeler la même fonction copiée 3 fois (bouh c'est pas beau ) en utilisant les props
Dans ton ShowIcones()
ajoutes:
prop_ID = bpy.props.IntProperty() # defining the property


Ajoutes .prop_ID = 1, 2 ou 3 pour tes trois boutons avec le même "object.icones_operator_show":
row = layout.row()
row.operator("object.icones_operator_show", text="Show icons", icon="INFO").prop_ID = 1
row = layout.row()
row.operator("object.icones_operator_show", text="Show icons 2", icon="INFO" ).prop_ID = 2
row = layout.row()
row.operator("object.icones_operator_show", text="Show icons 3", icon="INFO" ).prop_ID = 3


et récupère cette propriété dans ShowIcones():
for e in IconesKeys(self.prop_ID):


ainsi tu peux effacer les autres showIconesTwo et Three()...

Je te passes le script bidouillé en MP si tu veux.
a+

Contribution le : 15/11/2012 20:38
_________________
Un blog sur Blender c'est ici: www.mapleberry.net
Créer un fichier PDF de la contribution Imprimer


Re: Comment créer un script sur Blender ?
OverdOzed
Inscrit:
25/09/2011 17:56
De RODEZ
Post(s): 307
@mapleberry : effectivement tu as tout à fait raison les 3 lignes peuvent être simplifiées. Je voulais rester sur un code qui reste dans l'ensemble compréhensible par tout le monde. Ce code reste très basique. L'idée étant de donner les notions de bases aux nouveaux développeurs.

Par contre ce que tu peux faire c'est de poster ton code optimiser (je serais pas jaloux t'inquiètes et bien au contraire c'est comme ça qu'on avance) ou sinon effectivement je pourrais modifier le mien pour éviter les doublons.

C'est comme tu veux en tout c'est avec plaisir si j'ai pu aider.

A bientôt le clan.



[edit]
J'avais pas tout lu. Merci pour l'info par rapport au
prop_ID = bpy.props.IntProperty() # defining the property



Pour ce qui est du copiable: ça doit-être jouable avec un StringProperty() ou un Operator (qui aura pour seul objectif de copier).

Pour ta question : "Par contre j'ai une question, est-ce que quelqu'un sait comment ajouter un panneau pour le choix de paramètres dans un script d'export ?"
--> J'ai pas tout compris mais si c'est ce que je pense c'est en fait un code dans ce style :



class Export(bpy.types.Operator):
    bl_idname = "object.shadertoolsng_export"
    bl_label = "Blabla"   

    ctx = bpy.props
    creator_SP = ctx.StringProperty(name="Mon element", default="Veuillez saisir votre text")

    def draw(self, context):
        layout = self.layout
        row = layout.row(align=True)
        row.prop(self, "creator_SP")    

    def invoke(self, context, event):
        wm = context.window_manager
        wm.fileselect_add(self)
        return {'RUNNING_MODAL'}

    def execute(self, context):
        return {'FINISHED'}
 


A quelque chose près ça devrait-être ça (désolé j'ai pas pu tester, je suis au taf là )

Je sais pas si ça répond à ta question (sachant que la propriété StingProperty peut-être modifier par autre chose comme un
Enumerator ou autre ... tout dépend de ce dont tu as besoin)

++

[/edit]

Contribution le : 16/11/2012 14:09
_________________
Le SHADERTOOLS NG:
- Github:ici
- FTP:ici
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 »




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
[WIP] et travaux terminés Une locomotive ... 0 27 Hier 22:48:21
pat72 
Questions & Réponses [résolu] Impossible de faire un bevel regulier 9 234 Hier 22:33:51
pat72 
Moteur de jeu GameBlender et alternatives [résolu] Programmer un archer à cheval    [1][2][3][4] 34 949 Hier 11:38:45
Bibi09 
Questions & Réponses Labels 0 65 Hier 00:14:08
Melodicpinpon 
Questions & Réponses Trace bizzarre sur un objet 6 110 15/11 14:10:05
moonboots 
Python & Plugins [WIP] Tracer une courbe et obtenir son équation 7 102 15/11 11:51:13
busanga 
Questions & Réponses Besoin d'aide simulation de vent sur des plantes (système particules) 0 131 14/11 17:50:55
B3nD 
Questions & Réponses Contrainte en édition 1 75 14/11 13:57:05
naeco 
Questions & Réponses [non résolu] Des conseils ? 5 182 13/11 22:21:41
tokoji 
Questions & Réponses La video n'est pas lu dans l'editeur node 0 55 13/11 20:06:12
masje 
Questions & Réponses Question sur IvyGen 3 218 13/11 16:20:13
Muad 
Questions & Réponses Déplacement d'un personnage riggé sur courbe de Bézier 3 86 13/11 13:45:28
Rimpotche 
Questions & Réponses Choisir Rendu sur la carte graphique de l'ordinateur 4 172 13/11 11:13:26
masje 
Questions & Réponses Extrusion régulière sur plusieurs angles ?    [1][2] 12 268 12/11 15:37:27
Fracoris 
[WIP] et travaux terminés [WIP] Bataille Navale // Animation 3d    [1][2][3] 24 2013 11/11 22:02:15
Bibi09 
[WIP] et travaux terminés Teeny Tiny - Story 1 154 11/11 21:42:22
Bibi09 
Questions & Réponses des rayures bizzard ? 3 103 11/11 20:52:08
Eleonor-e 
Mes premières images sous Blender (débutants) Les trucs à Élé 6 225 11/11 18:53:11
Eleonor-e 
Questions & Réponses [non résolu] Impossible d'effectuer un boolean sur sculpt 3 116 11/11 15:04:53
busanga 
Questions & Réponses Longueur d'une courbe de béziers ? 3 236 11/11 01:23:27
Eleonor-e 

Qui est en ligne
74 utilisateur(s) en ligne (dont 43 sur Forums)

Membre(s): 0
Invité(s): 74


plus...
Nouveaux membres
FannyRalph 17/11/2019
SFTIma174 17/11/2019
ArronNords 17/11/2019
KandaceGly 17/11/2019
KoreyCatro 17/11/2019
JeffryAult 17/11/2019
LarhondaRe 17/11/2019
B3nD 14/11/2019
Jothys 13/11/2019
21600883 11/11/2019
Dernier Ajout
2019-11-05 01.JPG

Evènements à venir
Nov 18
Anniversaire de RichDeg
Dec 29
Anniversaire d'ebrain
Jan 11
BUG de Lyon
plus 278 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2019 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445