|
#1
|
|||
|
|||
Identifying different nodes
Hi,
I´m using the screenToWorld and intersectLine functions to identify the object being seen at a specific point on the screen, like this: http://www.worldviz.com/vizhelp/comm...ersectLine.htm My question is, is it possible to distinguish between different polygons/subobjects in a 3D model? For example, different leaves of a tree model? Thanks, Omid |
#2
|
|||
|
|||
The link you provided is for finding intersections with physics shapes, from your question though it sounds like you just want to see which sub-object was picked.
You can use viz.pick() to do that. This code uses the gallery model and prints out the name of the child object that is clicked on. If you right cick on gallery.ive in Vizard's resource window you can look through the hierarchy and see the matching names. The name returned is for lowest object in the scene graph that was picked. If this sub-object does not have a name then the first named object above it will be returned. Code:
import viz viz.go() #use keyboard navigation, mouse for picking import vizcam viz.cam.setHandler(vizcam.KeyboardCamera()) viz.add('gallery.ive') def showPicked(): #use viz.pick with mode = 1. This will return a Vizintersect #object which we can use to retrieve the object' name object = viz.pick(1) if object.valid: print 'object name: ', object.name vizact.onmousedown(viz.MOUSEBUTTON_LEFT, showPicked) |
#3
|
|||
|
|||
Hi Jeff,
Thanks a lot for the reply. Pick works exactly as I expected. Unfortunately it doesn't return an id for unnamed objects. Apart from that, I want to have a function similar to pick, but with arbitrary point in the screen (not bound to the mouse pointer). I wrote the following code, but it's far slower than the pick function. It takes about 5 seconds on each call, but the pick functions looks to be very fast. My question is, how can I implemnet "pick" function with arbitrary coordinate on the 2D screen to be as fast as pick? Code:
def fireLineAtPointAndReturnIntersectingPoint(normX, normY): line = viz.screentoworld([normX, normY]) dir = viz.Vector(line.dir) dir.setLength(200) begin = line.begin end = line.begin + dir info = viz.phys.intersectLine(begin,end) return info.point Best, Omid |
#4
|
|||
|
|||
Have a look at the documentation for the <window>.pick command. You can specify an optional pos parameter that says where on the screen to perform the pick. If you don't specify a position, then it defaults to using the current mouse position.
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Internal nodes of loaded model files? | dtidrow | Vizard | 2 | 05-12-2009 08:55 AM |
Creating occluder nodes in .ive file | dtidrow | Vizard | 1 | 12-09-2008 10:40 AM |
Collision with child nodes | rubberpimple | Vizard | 4 | 09-17-2008 04:27 PM |
Pickling Nodes | Vygreif | Vizard | 3 | 02-23-2006 10:03 AM |