PDA

Voir la version complète : Exemples python



xs_yann
26/01/2014, 17h00
Afficher/masquer des objets dans l'Object Manager

Pour masquer

GeListNode.ChangeNBit(c4d.NBIT_OHIDE, c4d.NBITCONTROL_SET)

Pour afficher

GeListNode.ChangeNBit(c4d.NBIT_OHIDE, c4d.NBITCONTROL_CLEAR)

Pour fermer / ouvrir un groupe

GeListNode.ChangeNBit(c4d.NBIT_OM1_FOLD, c4d.NBITCONTROL_CLEAR)

GeListNode.ChangeNBit(c4d.NBIT_OM1_FOLD, c4d.NBITCONTROL_CLEAR)




import c4d

HIDE = 0
UNHIDE = 1
SWITCH = 2

def getNextObject(op, stop=None):
"""Returns the next object in the hierarchy.
"""
if op is None: return None
down = op.GetDown()
if down: return down
if op == stop: return None
next = op.GetNext()
if next: return next
prev = op.GetUp()
while prev:
if prev == stop: return None
next = prev.GetNext()
if next: return next
prev = prev.GetUp()
return None

def hideChildren(object, mode=SWITCH):
child = object.GetDown()
if not child: return
if mode == UNHIDE or (child.GetNBit(c4d.NBIT_OHIDE) and mode == SWITCH):
bitmode = c4d.NBITCONTROL_CLEAR
else:
bitmode = c4d.NBITCONTROL_SET
while child:
child.ChangeNBit(c4d.NBIT_OHIDE, bitmode)
child = getNextObject(child, object)

object.ChangeNBit(c4d.NBIT_OM1_FOLD, bitmode)

def unhideChildren(object):
hideChildren(object, UNHIDE)

def hideObject(object):
object.ChangeNBit(c4d.NBIT_OHIDE, c4d.NBITCONTROL_SET)
hideChildren(object, HIDE)

def unhideAll(doc):
object = doc.GetFirstObject()
while object:
object.ChangeNBit(c4d.NBIT_OHIDE, c4d.NBITCONTROL_CLEAR)
object = getNextObject(object)

def main():
objects = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_0)
for object in objects:
hideChildren(object)
if not objects:
unhideAll(doc)
c4d.EventAdd(c4d.EVENT_0)

if __name__=='__main__':
main()



Le script masque les enfants des objets sélectionnés lors de la première exécution et les ré-affiche lors de la seconde (switch).
Pour masquer les objets sélectionnés en plus de leurs enfants il faut remplacer hideChildren(object) par hideObject(object) dans le main.

Si aucun objet n'est sélectionné, tous les objets masqués sont ré-affichés.

hideChildren(object, HIDE) : masque les enfants de object
hideChildren(object, UNHIDE) : affiche les enfants de objects
hideChildren(object, SWITCH) : masque les enfants de object s'il sont affichés et les affiche s'ils sont masqués
hideObject(object) : masque object et ses enfants
unhideAll(doc) : affiche tous les objets du document 'doc'

xs_yann
24/04/2014, 22h28
Exécuter un script / créer un tag programmatiquement


import c4d


def getScript(arg):

return """import c4d


def main():
print '""" + arg + """'

if __name__=='__main__':
main()
"""


def main():
# Create new Python Tag
null = c4d.BaseObject(c4d.Onull)
tag = null.MakeTag(c4d.Tpython)
tag[c4d.TPYTHON_CODE] = getScript("Tag")
doc.InsertObject(null)

# Execute Script
op = c4d.BaseList2D(c4d.ID_PYTHONSCRIPT)
data = op.GetDataInstance()
data.SetString(c4d.PYTHONSCRIPT_TEXT, getScript("Script"))
op.Message(c4d.MSG_SCRIPT_EXECUTE, None)
c4d.EventAdd(c4d.EVENT_0)


if __name__=='__main__':
main()


Il est bien sûr possible de charger un fichier script .py, le mapper et le passer en paramètre à la fonction SetString(c4d.PYTHONSCRIPT_TEXT, fileContent).




Exécuter du code et récupérer les erreurs


import c4d

def execCode(code):
try:
exec code
except:
import sys
import traceback
ei = sys.exc_info()
print "Traceback (most recent call last):"
traceback.print_tb(ei[2].tb_next)
print ei[0].__name__ + ":", ei[1]


def main():

code = """def foo():
bar()
foo()"""
execCode("print 'toto'")
execCode(code)


if __name__=='__main__':
main()

Affiche :

toto
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "<string>", line 2, in foo
NameError: global name 'bar' is not defined

Au lieu de :

toto
Traceback (most recent call last):
File "script manager", line 24, in <module>
File "script manager", line 20, in main
File "script manager", line 5, in execCode
File "<string>", line 3, in <module>
File "<string>", line 2, in foo
NameError: global name 'bar' is not defined

clemz
24/04/2014, 23h19
merci XS_yann :)

Realzeb
24/04/2014, 23h32
Rien à voir, mais merci quand même pour ton plug in "Align Assistant" que je viens de charger... ;)

gaff
24/05/2014, 16h37
Pour les curieux, le site Codecademy permet de se familiariser, entre autre, avec le langage Python. Le petit plus est qu'il s'agit d'un site en Français.
C'est par ici :http://www.codecademy.com/fr/tracks/python-fr-FR