ParallelGraphics Forums
General
You are here: [Forums]::[General]

Registration 
Registration
Forgot your password?

Help 
Help
Support

Quick search 

Subscribe to newsletters 

Install Cortona VRML Client for FREE!
Outline 3D
Try RobinZone!
email:  password:
  General

Subject: Univeral Keyboard Sensor
Sender: lobotomy@volgograd.ru 30.03.08 23:23

Hi!

I'm trying now to create the universal prototype for using as keyboard controller with both Cortona and Blaxxun/BS Contact without any special changes. It must automatically insert necessary node in dependency of Browser name. The method was quite obvious for me until I try to make dynamic routing of KbdSensor event using vrmlscript. But it works successful with Blaxxun. I hope somebody could help me find a solution.


#VRML V2.0 utf8

DEF NI NavigationInfo {headlight FALSE type "NONE"}
EXTERNPROTO DeviceSensor [
    exposedField SFBool enabled
    exposedField SFString device
    exposedField SFString eventType
    exposedField SFNode event
    eventOut SFBool isActive
]["urn:inet:blaxxun.com:node:DeviceSensor","http://www.blaxxun.com/vrml/protos/nodes.wrl#DeviceSensor","nodes.wrl#DeviceSensor"]

DEF Clicker Script {
    eventOut SFBool turnLeft
    eventOut SFBool turnRight
    eventOut SFBool moveUp
    eventOut SFBool moveDown
    eventOut SFBool zoomIn
    eventOut SFBool zoomOut
# for Cortona:
    eventIn    SFInt32 c_keyDown
    eventIn    SFInt32 c_keyUp
# for Blaxxun:
    eventIn    SFNode b_event
    url "javascript:
    function c_keyDown(val) {process(val,true);}
    function c_keyUp(val) {process(val,false);}
    function b_event(e,t) {
        if(e.type == 'keydown') process(e.keyCode,true);
        else if(e.type == 'keyup') process(e.keyCode,false);
    }
    function process(key,mode) {
        print('(test) key: '+key);    // for test only
        if(key==65574||key==1004||key==65623||key==87) moveUp = mode;
        else if(key==65576||key==1005||key==65619||key==83) moveDown = mode;
        else if(key==65573||key==1006||key==65601||key==65) turnLeft = mode;
        else if(key==65575||key==1007||key==65604||key==68) turnRight = mode;
        else if(key==65643||key==65723||key==107||key==187) zoomIn = mode;
        else if(key==65745||key==65625||key==109||key==189) zoomOut = mode;
    }
    "
}

DEF Sensor Script {
    field SFNode Clicker USE Clicker
    field SFNode SensorNode NULL
# for test only
    eventIn SFBool turnLeft
    eventIn SFBool turnRight
    eventIn SFBool moveUp
    eventIn SFBool moveDown
    eventIn SFBool zoomIn
    eventIn SFBool zoomOut
# end of test
    url "javascript:
// for test only
    function turnLeft(val) {print('(test ok): left');}
    function turnRight(val) {print('(test ok): right');}
    function moveUp(val) {print('(test ok): up');}
    function moveDown(val) {print('(test ok): down');}
    function zoomIn(val) {print('(test ok): zoomIn');}
    function zoomOut(val) {print('(test ok): zoomOut');}
// end of test
    function initialize() {
        var bsens = 'DeviceSensor {device \"STANDARD\" eventType \"keydown keyup character\"}';
        var csens = 'KbdSensor {isActive TRUE}';
        br=Browser.getName(); br=br.toLowerCase();
        if(br.indexOf('blaxxun')>=0||br.indexOf('contact')>=0) {
            SensorNode=Browser.createVrmlFromString(bsens)[0];
            Browser.addRoute(SensorNode,'event',Clicker,'b_event');
        }
        else if(br.indexOf('cortona')>=0) {
            SensorNode=Browser.createVrmlFromString('KbdSensor {isActive TRUE}')[0];
            print('(existance test) KbdSensor.isActive: '+SensorNode.isActive);    // for test only
            Browser.addRoute(SensorNode,'keyDown',Clicker,'c_keyDown');
            Browser.addRoute(SensorNode,'keyUp',Clicker,'c_keyUp');
        }
    }
    "
}
# for test only
ROUTE Clicker.turnLeft TO Sensor.turnLeft
ROUTE Clicker.turnRight TO Sensor.turnRight
ROUTE Clicker.moveUp TO Sensor.moveUp
ROUTE Clicker.moveDown TO Sensor.moveDown
ROUTE Clicker.zoomIn TO Sensor.zoomIn
ROUTE Clicker.zoomOut TO Sensor.zoomOut
# end of test

 


Univeral Keyboard Sensor / lobotomy@volgograd.ru / 30.03.08 23:23

Messages in thread: 1


© 1998-2007 ParallelGraphics. All rights reserved. Terms of use.