Matemática e Computação
 

Mensagens
Não te abandones em lugares onde a luz da tua harmonia não esteja presente.

 

 

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