Log in

View Full Version : getVisible unexpected behaviour


sleiN13
11-30-2011, 07:48 AM
I wanted to use the visibility of a object to execute (or not) certain code in a vizAction to my surprise all object returned getVisible() is True while I knew that the certain parent object where invisible. A simple test confirmed that child object don't return the correct visibility value

groupA = viz.addGroup()
groupB = viz.addGroup(parent = groupA)

groupA.visible(viz.OFF)
print groupB.getVisible()

>>> True

Is this a bug or by design and in case of the second reason is there a function that will give the result I need?

farshizzo
12-13-2011, 12:17 PM
This is by design. The node.getVisible() command returns the visible flag of the node. It does not take into account the visible flag of any parents.

You can use the node.getParents() command to determine the visibility state taking into account all parent nodes. Example:import viz
import vizact
viz.go()

group1 = viz.addGroup()
group2 = viz.addGroup(parent=group1)
ball = viz.addChild('beachball.osgb',parent=group2,pos=(0 ,1.8,2))

label = viz.addText('',parent=viz.ORTHO,fontSize=50,pos=(1 0,10,0))

def isNodeActuallyVisible(node):
if not node.getVisible():
return False
parents = node.getParents()
if parents:
return any(isNodeActuallyVisible(p) for p in parents)
return True

def UpdateLabel():
if isNodeActuallyVisible(ball):
label.message('visible')
else:
label.message('not visible')
vizact.ontimer(0,UpdateLabel)

vizact.onkeydown('1',group1.visible,viz.TOGGLE)
vizact.onkeydown('2',group2.visible,viz.TOGGLE)
vizact.onkeydown('3',ball.visible,viz.TOGGLE)