Exemplo 02 do CylinderSensor Código (CylinderSensor01.wrl)
Exemplo 03 do CylinderSensor Código (CylinderSensor02.wrl)
7.6.3– PlaneSensor
PlaneSensor {
exposedField SFBool autoOffset TRUE
exposedField SFBool enabled TRUE
exposedField SFVec2f maxPosition -1 -1
exposedField SFVec2f minPosition 0 0
exposedField SFVec3f offset 0 0 0
eventOut SFBool isActive
eventOut SFVec3f trackPoint_changed
eventOut SFVec3f translation_changed
}
Campo |
Descrição |
|
minPosition |
a translação fica restrita a pontos à direita e acima desta posição no plano xy |
|
maxPosition |
a translação fica restrita a pontos à esquerda e abaixo desta posição no plano xy |
|
enable |
indica se o sensor está ativado. Para desligá-lo, basta enviar-lhe um evento set_enable com o valor FALSE |
|
offset |
especifica o quanto (a distância) a geometria será trasladada cada vez que ocorrer o arrasto |
|
autoOffset |
sendo TRUE, indica que, uma vez tranladada, a geometria mantém a nova posição, a qual passará a ser a posição inicial para a nova translação. Caso FALSE, antes da nova translação, a geometria é trazida novamente à sua posição original |
Eventos |
eventOut |
|
isActive |
este evento é enviado toda vez que o usuário pressionar ou soltar o botão (imediatamente antes ou após o arrasto respectivamente) e não durante o arrasto |
|
trackPoint_changed |
ponto para o qual o usuário aponta o cursor, ao longo do plano xy , durante o arrasto; minPosition e maxPosition são ignorados |
|
translation_changed |
ponto ao longo do plano xy e dentro dos limites permitidos ( minPosition e maxPosition ) para o qual o cursor é apontado; caso o usuário tenha apontado o cursor para uma posição fora dos limites, um dos valores minPosition ou maxPosition é assumido conforme o caso |
Este nó interpreta um movimento de "arrasto" como uma translação no plano xy de coordenadas do sensor sempre que o usuário clica sobre um objeto e o arrasta.
Esse objeto corresponde a uma geometria definida no campo children do nó que é pai do sensor em questão.
Em geral, esse nó é bem semelhante ao CylinderSensor descrito anteriormente.
Pode-se limitar a translação, atribuindo-se valores mínimo e máximo para os campos minPosition e maxPosition respectivamente e, assim, restringir os eventos translation_changed dentro de um retângulo imaginário, pertencente ao plano xy, cujas extremidades correspondem a esses valores mínimo e máximo. Interessante notar que, se os valores de x ou de y em minPosition e maxPosition forem iguais, o movimento de translação fica restrito àquela direção, transformando o PlaneSensor num "line sensor" por assim dizer.
A geometria transladada pode ser mantida na nova posição (autoOffset = TRUE) ou, antes de uma nova translação, retornar à posição original ( autoOffset = FALSE).
Outros sensores tipo "drag sensors"(CylinderSensor e SphereSensor) não geram eventos enquanto o PlaneSensor estiver ativado (durante o arrasto).
Exemplo 01 do PlaneSensor
Viewpoint {
position 0 8 16
orientation 1 0 0 -0.4
}
Transform {
translation 0 -1.2 0
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0. 0.7 0.7
}
}
geometry Box {
size 20 0.4 20
}
}
]
}
Transform {
translation 0 0 0
children [
DEF CilindroTransform Transform {
children Shape {
appearance Appearance {
material Material {
diffuseColor 0.1 0.5 0.2
}
}
geometry Cylinder {}
}
}
DEF PlaneSensor PlaneSensor {
minPosition -15 0
maxPosition 10 0
}
]
}
ROUTE PlaneSensor.translation_changed TO CilindroTransform.set_translation
7.6.4 – SphereSensor
SphereSensor {
exposedField SFBool autoOffset TRUE
exposedField SFBool enabled TRUE
exposedField SFRotation offset 0 1 0 0
eventOut SFBool isActive
eventOut SFRotation rotation_changed
eventOut SFVec3f trackPoint_changed
}
Campos |
Descrição |
|
enable |
indica se o sensor está ativado. Para desligá-lo, basta enviar-lhe um evento set_enable com o valor FALSE |
|
offset |
especifica o quanto (a distância) a geometria será rotacionada cada vez que
ocorrer o 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 |
indica se o usuário está arrastando a geometria associada ao sensor |
|
trackPoint_changed |
ponto para o qual o usuário aponta o cursor, ao longo da esfera, durante o
arrasto |
|
translation_changed |
orientação da esfera imaginária durante o arrasto |
Possibilita arrastar e gerar rotações como se estivesse rotacionando uma bola.
O nó SphereSensor traça o movimento do mouse em uma superfície de uma esfera conceitual, girando a forma sobre o centro de seu sistema de coordenadas locais.
Exemplo 01 do SphereSensor
DEF Tr Transform {
children [
Shape {
geometry Sphere {
radius 1
}
appearance Appearance {
material Material {
diffuseColor .8 .16 0
specularColor .5 .5 .5
emissiveColor .15 .03 0
ambientIntensity 0
}
}
}
Transform {
translation 0 -2 0
children [
Shape {
geometry Cone {
height 3
bottomRadius 1
}
appearance Appearance {
material Material {
diffuseColor .8 0 .8
specularColor .5 .5 .5
emissiveColor .15 0 .15
ambientIntensity 0
}
}
}
]
}
]
}
DEF SphereSensor SphereSensor {
autoOffset TRUE
}
ROUTE SphereSensor.rotation_changed TO Tr.rotation