##:@* text ## ## ## This is the TextElement PROTO, ## it can be placed within the context of a textblock and ## contains plain text, and formatting options ## Needs IO, ## In: show-a-certain-level ## Out: I-have-this-many-levels ## ##@ proto PROTO TextElement [ exposedField SFString elementType "TEXTELEMENT" exposedField SFInt32 startLevel -1 exposedField SFInt32 endLevel -1 exposedField SFFloat width 1 exposedField SFFloat height 1 exposedField SFBool linebreak FALSE exposedField SFBool absolute FALSE exposedField SFBool nochange FALSE exposedField MFString string [] exposedField SFVec3f position 0 0 0 exposedField SFColor color 1 1 1 exposedField SFFloat alpha 0 exposedField SFColor bgColor 0 0 1 exposedField SFFloat bgTransparency 1 exposedField SFVec3f location 0 0 0 exposedField SFRotation rotation 0 1 0 0 exposedField SFVec3f scale 1 1 1 exposedField MFString justify [ "BEGIN" ] exposedField MFString family [ "SERIF" ] exposedField SFString style "PLAIN" exposedField SFString href "" exposedField MFString parameters [] ] { ##@ body DEF TRANSFORMXX Transform { translation IS position children [ DEF TRANSFORM Transform { translation IS location rotation IS rotation scale IS scale children [ DEF BOXTRANSFORM Transform { translation 0 0 -0.015 } Shape { appearance Appearance { material Material { diffuseColor 0 0 0 specularColor 0 0 0 emissiveColor IS color transparency IS alpha } } geometry DEF TEXT Text { string IS string fontStyle FontStyle { size IS height family IS family style IS style justify [ "BEGIN" ] topToBottom TRUE leftToRight TRUE } } } ] } ] } ##@ script DEF SCRIPT Script { mustEvaluate TRUE directOutput TRUE field SFNode boxTransform USE BOXTRANSFORM field SFNode transform USE TRANSFORM field SFNode me USE SCRIPT field MFString family IS family field SFFloat size IS height eventIn MFString set_string IS string field MFString string IS string field MFString justify IS justify field SFFloat length IS width eventOut SFFloat length_changed IS width field SFColor bgColor IS bgColor field SFFloat bgTransparency IS bgTransparency field SFString href IS href field MFString parameters IS parameters eventIn SFTime touched ##@ functions url "vrmlscript: function initialize() { // guess length... var factor = 1; if(family[0]=='TYPEWRITER') { factor = 0.6; } else if(family[0]=='SANS') { factor = 0.5; } else if(family[0]=='SERIF') { factor = 0.38; } length = string[0].length * factor * size; length_changed = length; // Setup backgroundBox to be size widthXheight boxTransform.translation = new SFVec3f(length/2,size/2,-0.015); var bgBox = Browser.createVrmlFromString(' Shape { appearance Appearance { material Material { diffuseColor 0 0 0 specularColor 0 0 0 emissiveColor ' + bgColor + ' transparency ' + bgTransparency + ' } } geometry Box { size ' + length + ' ' + size + ' 0.01 } } '); boxTransform.children = bgBox; if(href != '') { var touch = Browser.createVrmlFromString(' TouchSensor{} '); transform.addChildren = touch; Browser.addRoute(touch[0],'touchTime',me,'touched'); } } function set_string(v,t) { string = v; initialize(); } function touched(v,t) { Browser.loadURLrel(href,parameter); // Change, this for absolute URLs // Browser.loadURL(href,parameter); } " } } ##