7.6.2 – CylinderSensor
CylinderSensor {
exposedField SFBool autoOffset TRUE
exposedField SFFloat diskAngle 0.262
exposedField SFBool enabled TRUE
exposedField SFFloat maxAngle -1
exposedField SFFloat minAngle 0
exposedField SFFloat offset 0
eventOut SFBool isActive
eventOut SFRotation rotation_changed
eventOut SFVec3f trackPoint_changed
}
Campo |
Descrição |
|
minAngle |
menor ângulo de rotação admissível |
|
maxAngle |
maior ângulo de rotação admissível |
|
enable |
indica se o sensor está ativado. Para desligá-lo, basta enviar-lhe um evento set_enable com o valor FALSE |
|
diskAngle |
determina um ângulo em relação ao eixo Y, dentro do qual o sensor se comporta como um "disco imaginário" e, fora dele, como um "cilindro imaginário". Este pode ser entendido como o ângulo do vértice de um cone inscrito no "cilindro imaginário" e com a base correspondendo com a tampo do cilindro. Logo, o comportamento do sensor depende de onde o usuário clica no objeto. |
|
offset |
especifica o ângulo em radianos em que a geometria associada será rotacionada a cada "arrasto". |
|
autoOffset |
sendo TRUE, indica que, uma vez rotacionada, a geometria mantém a nova posição, a qual passará a ser a posição inicial para a nova rotação. Caso FALSE, antes da nova rotação, a geometria é trazida novamente à sua posição original |
Eventos |
eventOut |
|
isActive |
enviado quando o usuário começa a arrastar a geometria |
|
trackPoint_changed |
ponto de contato do cursor com o "cilindro imaginário" |
|
rotation_changed |
orientação corrente do "cilindro"durante o arrasto |
O nó CylinderSensor é capaz de interpretar quando o usuário "arrasta" um objeto 2D, através do mouse, como uma rotação deste objeto no espaço 3D ao redor do eixo y.
Esta rotação, dependendo de onde o cursor toca o objeto (em relação ao eixo y), pode se dar de duas maneiras distintas que serão abordadas adiante.
"Arrastar", neste contexto, significa mover o cursor enquanto se pressiona o botão do mesmo.
Quando o usuário pressiona o botão do mouse, enquanto aponta para um dos objetos (geometrias) definido no campo children do seu nó pai ( parent node ), o browser considera um cilindro imaginário ao redor do eixo y do sistema local de coordenadas do sensor.
O tipo de movimento a ser obtido é dependente do campo diskAngle (vide tabela acima), podendo ser similar à rotação de um cilindro.
Exemplo 01 do CylinderSensor
Group {
children [
DEF T1 Transform {
children [
Transform {
rotation 0 0 1 1.57
children [
DEF T2 Transform {
children [
Transform {
rotation 0 0 1 -1.57
children [
Inline {
url "CylinderSensorA.wrl"
}
Shape {
appearance DEF A1 Appearance {
material Material {
diffuseColor .8 .51 .09
specularColor .925 .431 .00784
emissiveColor .349 .176 .051
ambientIntensity .117
shininess .4
}
}
}
]
}
]
}
]
}
]
}
Transform { # left crank - rotates about Y axis => T1
translation -3 0 0
rotation 0 0 1 -1.57
children [
DEF T3 Transform {
children [
DEF G1 Group {
children [
Transform {
rotation 0 0 1 1.57
translation -.5 0 0
children [
Shape {
appearance USE A1
geometry Cylinder {
radius .04
height 1
}
}
]
}
Transform {
rotation 0 0 1 1.57
translation -1 0 0
children [
Shape {
geometry Sphere {
radius .08
}
appearance USE A1
}
]
}
]
} # end Group
]
}
DEF CS1 CylinderSensor {
maxAngle 6.2832
minAngle 0
}
]
}
Transform { # right crank - rotates about X-axis => T2
translation 3 0 0
rotation 0 0 1 -1.57
children [
DEF T4 Transform {
children USE G1
}
DEF CS2 CylinderSensor {
maxAngle 6.2832
minAngle 0
}
]
}
Transform { # housing to hold cranks
# translation 0 0 0
rotation 0 0 1 1.5708
children [
Shape {
geometry Cylinder {
radius 0.04
height 6
}
appearance USE A1
}
]
}
Background {
skyColor 1 1 1
}
]
}
ROUTE CS1.rotation_changed TO T1.rotation # rotates about Y-axis
ROUTE CS1.rotation_changed TO T3.rotation # rotates the crank handle
ROUTE CS2.rotation_changed TO T2.rotation # rotates about local X-axis
ROUTE CS2.rotation_changed TO T4.rotation # rotates the crank handle