PDA

View Full Version : Highlighter tool on nodes in model


Seadna
02-03-2016, 07:21 AM
Hi folks,

I'm really struggling with this one.

I have a large model imported with many nodes. I want to be able to highlight the objects in the model with the highlighter tool.

From the looks of the sample code i need to set the items that are selectable by the highlighter tool.

What i'm trying to do (instead of manually entering hundreds of items) is pull the list of nodes using tool.setItems(Model.getNodeNames()) but this does not work at all.

I have also tried using tool.setItems(','.join(Model.getNodeNames())) to remove the single quotation marks but it still generates an error:

Traceback (most recent call last):
File "C:\Program Files\WorldViz\Vizard5\python\vizact.py", line 3183, in _callGroup
val = e.call(arg)
File "C:\Program Files\WorldViz\Vizard5\python\vizact.py", line 2949, in _callStatic
return func(*args,**kwargs)
File "C:\Program Files\WorldViz\Vizard5\python\tools\highlighter.py", line 627, in _intersectBoundingBox
bs = item.getBoundingSphere(viz.ABS_GLOBAL)
AttributeError: 'str' object has no attribute 'getBoundingSphere'

Seadna
02-04-2016, 02:35 AM
I'm trying something different. I certainly cannot figure out how to get the highlighter to highlight sub-nodes (so far).

Can I use the pick function instead? How can I use pick() when wearing an Oculus Rift? I can use it with my mouse on screen in the tutorial but when combined with my vizconnect configuration on Oculus I do not have a mouse pointer. Can i do this with an arrow similar to the laser pointer tool? How can this be implemented is there any example code?

As usual any help is much appreciated!

Erikvdb
02-04-2016, 04:11 AM
Highlighter works, you just need to declare the sub-nodes as objects.


gallery = viz.addChild('gallery.ive')
nodes = {}

for name in gallery.getNodeNames():
node = gallery.getChild(name) #create child object
nodes[node] = name #store in dict with its name

from tools import highlighter
tool = highlighter.Highlighter()
tool.setItems(nodes.keys())

def onHighlight(e):
if e.new in nodes:
print '{} is highlighted'.format(nodes[e.new])

viz.callback(highlighter.HIGHLIGHT_EVENT,onHighlig ht)

There might be an easier way to get the node name from the selected object so you don't need to store it in a dictionary, but hey.

Seadna
02-04-2016, 04:14 AM
Thanks Erik,

I will try this after lunch!

Seadna
02-05-2016, 05:31 AM
Thanks again Erik, this works great.

Do you know how I can get this to print the sub-node name?

Erikvdb
02-11-2016, 05:17 AM
I don't understand your question, printing the name of the pointed-at sub-node is literally the only thing the script I posted does!?