WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   sensor radius bug? (https://forum.worldviz.com/showthread.php?t=5415)

lalechuza 07-29-2015 02:38 AM

sensor radius bug?
 
Hey there!

I am using the circleArea proximity sensor so one can "collect" objects.
I want the difference between the radius of the object and the radius of the sensor to be constant. Therefore I pass the radius of the object plus my constant value to the circleArea sensor and then link the sensor to the object.
Before you start the programm you can change the transformation of the object that will be "collected".
Now here is my Problem:
When I scale the object the sensor is much bigger (or smaller) as it should be. I think its because I linked the sensor and the object. But I need the link so I can easily let the object disappear, when someone "collects" it.

To show my problem I wrote an example, where I just pass a constant to the sensor and it still gets much bigger as the one of the non-scaled object:

Code:

import viz
import vizshape
import vizproximity

viz.setMultiSample(4)
viz.fov(60)
viz.go()

viz.MainView.setPosition(0,5,-4)
viz.MainView.setEuler(0,45,0)

manager = vizproximity.Manager()
#to see the circleArea
manager.setDebug(viz.ON)

purpleCylinder = vizshape.addCylinder(height=2.0,radius=0.3,topRadius=None,bottomRadius=None,yAlign=vizshape.ALIGN_MIN,slices=20,bottom=True,top=True)
purpleCylinder.color(viz.PURPLE)
purpleCylinder.setPosition(-2.5,0,0)
#non-scaled purple cylinder
purpleSensor = vizproximity.CircleArea(radius=0.7)
#link sensor to the object
linkedPurpleSensor = vizproximity.Sensor(purpleSensor, purpleCylinder)
manager.addSensor(linkedPurpleSensor)
print 'purple: ', linkedPurpleSensor

redCylinder = vizshape.addCylinder(height=2.0,radius=0.3,topRadius=None,bottomRadius=None,yAlign=vizshape.ALIGN_MIN,slices=20,bottom=True,top=True)
redCylinder.color(viz.RED)
redCylinder.setPosition(1,0,0)
#scale the second red cylinder up
redCylinder.setScale(4,4,4)
redSensor = vizproximity.CircleArea(radius=0.7)
#link sensor to the object
linkedRedSensor = vizproximity.Sensor(redSensor, redCylinder)
manager.addSensor(linkedRedSensor)
print 'red: ', linkedRedSensor

the print says the radius is the same in both:
purple: Sensor(shape=CircleArea(radius=0.7, center=(0.0, 0.0)), source=NodeSource(node=viz.VizPrimitive(2), flag=4, name=''))
red: Sensor(shape=CircleArea(radius=0.7, center=(0.0, 0.0)), source=NodeSource(node=viz.VizPrimitive(4), flag=4, name=''))

Can someone tell me what happened? Am I doing something wrong or is it a bug?

mape2k 07-29-2015 04:39 AM

One solution would be to avoid linking the sensor and the 3d node.

When you create a sensor, you can specify a 3d node as its source. This way, you can make the 3d node disappear by calling the source of the activated sensor and let it disappear

Below is a small example:

Code:

# create ball and sensor
ball = vizshape.addSphere(radius = 10)
ballSensor = vizproximity.Sensor(vizproximity.CircleArea(10),source=ball)


# wait for sensor to be activated, can be a list of sensors
enteredSensor = yield vizproximity.waitEnter(ballSensor)

# get 3d node of ball and let it disappear
ball = enteredSensor.sensor.getSource()
ball._node.visible(viz.OFF)


lalechuza 07-29-2015 05:32 AM

I thought that was exactly what I've done? I just wrote the sources name instead of writing source=sourceName. Am I missing something?
However, it comes to the same result: The sensors have different sizes, although the passed radius is the same. :confused:

mape2k 07-30-2015 01:17 AM

True! Sorry, I did not try out your code and replied only to the text you wrote.

With normal linking, you can specify a mask to only link position, orientation, etc. With sensor linking, that does not seem to be possible.

Maybe one of the devs could shed some light into this?

Jeff 07-30-2015 03:55 PM

Thanks for the example script that reproduces the issue. I'll ask a developer to take a look.

lalechuza 08-04-2015 02:43 PM

Thank you!
Could you please let me know what the developer said? I really got to get this working because we would like to use it for a study :)

Jeff 08-04-2015 04:23 PM

As a workaround, would the following work for you? This sets a group node to be the sensor's source object. The red cylinder is linked to the group node and scaling the cylinder does not affect the area shape:

Code:

import viz
import vizshape
import vizproximity

viz.setMultiSample(4)
viz.fov(60)
viz.go()

import vizcam
cam = vizcam.PivotNavigate(center=[1,0,0],distance=5)
cam.rotateUp(30)

manager = vizproximity.Manager()
#to see the circleArea
manager.setDebug(viz.ON)

redCylinder = vizshape.addCylinder(height=2.0,radius=0.3,topRadius=None,bottomRadius=None,yAlign=vizshape.ALIGN_MIN,slices=20,bottom=True,top=True)
redCylinder.color(viz.RED)

group = viz.addGroup(pos=[1,0,0])
viz.link(group,redCylinder)

#scale the second red cylinder up
redCylinder.setScale(2,2,2)
redSensor = vizproximity.CircleArea(radius=0.7)

#link sensor to the object
linkedRedSensor = vizproximity.Sensor(redSensor, group)
manager.addSensor(linkedRedSensor)


lalechuza 08-25-2015 05:57 AM

Hey Jeff!
I guess this workaround wouldn't work for me, because there is a various number of cylinders placed in my setting and every cylinder has its own proximitysensor. I don't know how I could get the right cylinder to an activated sensor with that kind of linking. Maybe you have an idea to this?
Anyway, I've got a solution that is not very performant but it works well enough for me:
The sensores are placed at the same position like the cylinders. When setting the sensors the source is NONE, so that the sensores will not be affected by the scaling of the cylinders.
Next I just set up a list of tuples with the sensor as the first part of the tuple and the object as the second, so when a sensor is activated I can find it in that list with the right object and delete the object and the sensor.

Could you still let me know what the developer said to the bug or when it is going to work?

Thank you for your help :)


All times are GMT -7. The time now is 02:31 PM.

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