Modifier un objet texte
Le module Text3d permet de travailler
sur ce type objet. La liste des fonctions disponibles se trouve sur ces
deux pages Text3d
module et Text3d
class. Les opératiosn nécessaires consistent à
prendre tous les objets de Textes avec la fonction Get() et
à récuperer le contenu avec getText() et y chercher
si une chaîne de caractères correspond bien à ce contenu.
Ce que l'on peut simplement faire avec le signe ==. Dans l'exemple
qui suit, les objets sont rangés dans une liste en utilisant la
méthode des listes comprehension qui est bien plus rapide
qu'une boucle for.
#chargement du module Blender
import Blender
#chargement du module Text3d
from Blender import Text3d
#list comprehension
OBJ =[O for O in Text3d.Get() if O.getText()=="essai"]
if OBJ:
for O in OBJ :
O.setText("nouveau texte") |
Comment lancer le script et le fichier
en même temps
On trouvera des renseignements sur les
options acceptées en ligne de commande sur cette page: Aide
en ligne de commande. Il y est indiqué que la commande de lancement
d'un script est -P.
Est-ce que le script doit/peut être
embarqué dans le fichier ?
Ce serait plus simple qu'il soit
embarqué dans le fichier. Ce n'est pas une grande difficulté
si le script se trouve dans une fenêtre nommée "Text", on
peut écrire ceci dans un fichier commandes :
mondisque:\monrepertoire\blender.exe -b
mondisque:\tmp\scripts\text.blend -P Text |
On peut envisager un fichier texte externe
qui sera chargé par lescript. Ce fichier contiendra deux lignes.
Sur la première, l'expression qui doit être remplacée
et sur la seconde, celle quidoit remplacer.
Autre détail important, pour
que le rendu soit exécuté, il faut préciser un numéro
de frame :
mondisque:\monrepertoire\blender.exe -b
mondisque:\tmp\scripts\text.blend -P Text -f 1 -x 1 |
Attention
Quelques tests montrent que la position
du nom de script dans la liste des paramètres en ligne est très
importante : les opérations exécutées
par le logiciel suivent l'ordre d'apparition dans la ligne de commande.
Si le paramètre de nom de ficher suit le numéro de frame
au lieu de le précéder la modification ne sera pas
visible puisque le script ne sera exécuté qu'après
le rendu.
Un autre difficuIté consiste à
passer des textes en ligne. Pour cela on peut ajouter deux expressions
en fin de ligne de commande. Le script devra les lire dans la liste des
arguments qui se trouve dans la variable argv du module sys
de python (attention il ne s'agit pas du sys de Blender). La dernière,
sys.argv[-1],
sera enregistrée comme NOUVELLE_EXPRESSION, l'avant-dernière,
sys.argv[-2], comme ANCIENNE_EXPRESSION.
# (c) jmsoler 2008
import sys
ANCIENNE_EXPRESSION=sys.argv[-2]
NOUVELLE_EXPRESSION=sys.argv[-1]
import Blender
from Blender import Text3d
OBJ =[O for O in Text3d.Get() if O.getText()==ANCIENNE_EXPRESSION]
if OBJ:
for O in OBJ :
O.setText(NOUVELLE_EXPRESSION)
|
Pour que le systeme d'exploitation
prenne en considèration le texte complet des expressions,
il faut les encadrer avec des guillemets.
J:\stock_logiciel\blender\blender-2.45-windows\blender.exe -b l:\tmp\scripts\script_modifierletexte.blend
-P Text -f 1 -x 1 "fait" "essai13 et refait" |
L'exemple de fichier de commandes se trouve
dans le fichier blend :
http://jmsoler.free.fr/util/blenderfile/py/script_modifierletexte.blend
Il faudra importer le script dans tous
les fichiers blend que l'on veut traiter ou le charger à la volée
mais dans ce cas, là il faut l'exporter et le ranger dans
répertoire aussi simple d'accès que
possible. .blender/scripts,
par exemple.