WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Getting an object location (https://forum.worldviz.com/showthread.php?t=5913)

chris2307 12-06-2016 07:59 AM

Getting an object location
 
I'm feeling a little frustrated right now. I am trying to get the 3D position of an object within an exported OSGB scene. I know the name of my object; I've called it target. I can even find this object using the following snippet of code:

Code:

for nodeName in WholeEnviroment.getNodeNames():
        if(nodeName == 'Target'):
                node = WholeEnviroment.getChild(nodeName)
                print node

However, when I attempt to extract the 3D information for this, I get either the following two results:

Code:

print node.getPosition()
Return value: [0, 0, -0]

Code:

print node.getPosition(viz.ABS_GLOBAL)
Return value: [0.0, 2.7850825786590576, -8.960569381713867]


Neither are correct. The correct position of this object is [-11.54891, 2.32127, -16.42012].

I am able to use viz.pick to select the object and I get the correct position which is great. However, viz.pick() seems to return the lowest level of an object (the material name in this instance).

Why am I unable to get a sensible value from simply specifying the node name? I'm either missing something very obvious or it's just another annoying quirk of Vizard.

This is how the structure of this node looks like in Vizard inspector: http://prntscr.com/dg30pa

Jeff 12-06-2016 11:08 AM

Are there multiple sub-parts with the same name? Are you able to attach the model here or upload for us to look at? Using the viz.ABS_GLOBAL flag should work.

chris2307 12-06-2016 11:22 AM

Hi Jeff,

Thanks for the speedy reply. I've uploaded the model using the link provided (1677024). The target object is called "target".

Jeff 12-06-2016 11:39 AM

Try using either the node.getTransform command or the node.getChild command with the viz.CHILD_REPLACE_TRANSFORM flag:

Code:

import viz
viz.go()

scene = viz.addChild('scene.osgb')

#Get a linkable for controlling a sub-transform of the node
target = scene.getTransform('Target')

#Create a new Vizard object from the underlying scene graph node
#target = scene.getChild('Target',flags=viz.CHILD_REPLACE_TRANSFORM)

print target.getPosition(viz.ABS_GLOBAL)


Patrick 01-10-2017 04:43 AM

Hey
i got a pretty similar problem, so i just add this here and hope you can help me
i want to locate both arms from my avatar, to get the distance from the Grabbing point (grabber is attached to avatars arms) to the object i want to grab.

Code:

ground = viz.addChild('ground_gray.osgb')
Heizung = viz.addChild('heiz1.osgb')
pyramid = vizshape.addPyramid(base=(0.2,0.2),height=0.2,pos=[-0.5,1.7,1],alpha=0.7)
torus = vizshape.addTorus(radius=0.1,tubeRadius=0.015,axis=vizshape.AXIS_X, pos=[0,1.7,1])
box = vizshape.addCube(size=0.1, pos=[0.5,1.7,1],alpha=0.8)
pyramid.texture(viz.addTexture('images/tile_slate.jpg'))
torus.texture(viz.addTexture('images/tile_wood.jpg'))
shapes = [Heizung,pyramid,torus,box]

these are my objects i want to grab and ground which is the base of the world

basicly what i want to do is to get the locations of both the box, pyramid, and torus shapes and from the grabber tool from my vizconnect program and give them out


All times are GMT -7. The time now is 07:34 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC