Matemática e Computação
 

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

 

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