xs_yann
26/01/2014, 16h00
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'
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'