WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Setting Collidebox Dimensions (https://forum.worldviz.com/showthread.php?t=2285)

vTony 09-27-2009 12:14 PM

Setting Collidebox Dimensions
 
Hello, I am trying to manually set the dimensions of an object's collidebox. As a simple test, I tried setting the dimensions of the collidebox to the size of the object's bounding box. This works for box.wrl, but with the file tree.3ds (located at https://www.stanford.edu/~tony516/tree.3DS), I get strange results. The tree on the left (which uses the default arguments for collidebox, behaves normally, but the tree on the right shoots up into the air.

Quote:

import viz, vizact

def setOnGround(obj):
ymin = obj.getBoundingBox().ymin
pos = obj.getPosition()
obj.setPosition(pos[0], pos[1]-ymin, pos[2])

def enablePhysics():
viz.phys.enable()
ground.collidePlane()
tree1.collidebox()
tree2.collidebox(tree2.getBoundingBox())

viz.go()
viz.clearcolor(viz.SKYBLUE)
viz.MainView.move(0,0,-15)
ground = viz.add('tut_ground.wrl')
tree1 = viz.add('tree.3ds')
tree2 = viz.add('tree.3ds')
tree1.scale([.2]*3)
tree2.scale([.2]*3)
tree1.setPosition(-10, 0, 15)
tree2.setPosition(10, 0, 15)
setOnGround(tree1)
setOnGround(tree2)
vizact.onkeydown('1', enablePhysics)
Thanks in advance for any help!

farshizzo 09-28-2009 04:19 PM

Please use the [code][/code] tags when posting code. It will preserve indentation which is necessary for running Python code.

Regarding your question, you need to reset the position of the tree before retrieving it's bounding box. Here is a modified version of your code:
Code:

import viz, vizact

def setOnGround(obj):
        ymin = obj.getBoundingBox().ymin
        pos = obj.getPosition()
        obj.setPosition(pos[0], pos[1]-ymin, pos[2])

def enablePhysics():
        viz.phys.enable()
        ground.collidePlane()
        tree1.collidebox()
       
        #Zero position before retrieving bounding box
        pos = tree2.getPosition()
        tree2.setPosition(0,0,0)
       
        #Get objects bounding box
        bb = tree2.getBoundingBox()
       
        #Restore position
        tree2.setPosition(pos)
       
        #Use bounding box for collision
        tree2.collidebox(bb.size,pos=bb.center)

viz.go()
viz.clearcolor(viz.SKYBLUE)
viz.MainView.move(0,0,-15)
ground = viz.add('tut_ground.wrl')
tree1 = viz.add('tree.3ds')
tree2 = viz.add('tree.3ds')
tree1.scale([.2]*3)
tree2.scale([.2]*3)
tree1.setPosition(-10, 0, 15)
tree2.setPosition(10, 0, 15)
setOnGround(tree1)
setOnGround(tree2)
vizact.onkeydown('1', enablePhysics)


vTony 09-29-2009 02:57 PM

That fixed it. Thanks!


All times are GMT -7. The time now is 04:21 PM.

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