media @ VU
music-dossier-text.vr
music-dossier-text.vr
(wrl
)
[ flux /
bitmanagement /
cortona /
octaga
]
PROTO TextElement[
exposedField SFString text ""
exposedField SFString uri ""
exposedField SFString email ""
exposedField SFString webpage ""
exposedField SFString style "PLAIN"
exposedField SFString color "black"
]{}
PROTO LineElement[
exposedField MFNode line []
]{}
PROTO TextLineElement[
exposedField MFString text []
exposedField SFVec3f translation 0 0 0
field SFString textFont "fonts/aerial.bmp"
field SFString style "PLAIN"
field MFString family ["TEXTURE 0 255 16 16 0.625 0 0"]
field SFFloat fontSize 1
eventIn SFString uri
eventIn SFString email
eventIn SFString webpage
eventIn SFNode addURLHandler
eventIn SFFloat setYPos
]
{
DEF textTransform Transform {
translation IS translation
children [
Shape {
appearance DEF fontAppearance Appearance {
texture ImageTexture {}
}
geometry DEF textNode Text
{
string IS text
fontStyle FontStyle {
family IS family
style IS style
size IS fontSize
}
}
}
]
}
Script {
directOutput TRUE
field SFNode textTransform USE textTransform
eventIn SFString uri IS uri
eventIn SFString email IS email
eventIn SFString webpage IS webpage
eventIn SFNode addUrlHandler IS addURLHandler
eventIn SFTime wordClicked
eventIn SFBool wordButtonDown
eventOut SFString sendURI
eventOut SFString sendURIemail
eventOut SFString sendURIwebpage
eventOut SFString sendActiveURI
eventIn SFFloat setYPos IS setYPos
field SFString textFont IS textFont
field SFBool linked FALSE
field SFBool is_email FALSE
field SFNode fontAppearance USE fontAppearance
url "javascript:
function initialize()
{
//var fontTexture;
//if(linked) fontTexture=linkFont;
//else fontTexture=textFont;
fontAppearance.texture = new SFNode('ImageTexture { url \"'+textFont+'\" } '); // standaard font
}
function setYPos(pos)
{
textTransform.translation.y=pos;
}
function wordClicked()
{
if (uri !=''){
sendURI = uri;
}
else if (email !=''){
sendURIemail = email;
}
else if (webpage !=''){
sendURIwebpage = webpage;
}
}
function wordButtonDown(down)
{
if(!down) return;
sendActiveURI=uri;
}
function addUrlHandler(value)
{
if(uri !=''|| email !='' || webpage !='')
{
var sensor = Browser.createVrmlFromString('TouchSensor{}');
textTransform.addChildren = sensor;
Browser.addRoute(sensor[0],'touchTime',Browser.getScript(),'wordClicked');
Browser.addRoute(sensor[0],'isActive',Browser.getScript(),'wordButtonDown');
Browser.addRoute(Browser.getScript(),'sendURI',value,'uriClicked');
Browser.addRoute(Browser.getScript(),'sendURIemail',value,'emailClicked');
Browser.addRoute(Browser.getScript(),'sendURIwebpage',value,'webpageClicked');
Browser.addRoute(Browser.getScript(),'sendActiveURI',value,'uriActive');
linked=true;
}
}
"
}
}
PROTO ScrollPane [
field SFInt32 maxCharsOnALine 55
field SFFloat charAspect 0.5
field SFFloat minMargin 0.03
field SFFloat lineSpacing 1
field SFFloat charSpacing 1
field SFString textFont "fonts/aerial.bmp"
field SFString blueFont "fonts/aerial_blue.bmp"
field SFString redFont "fonts/aerial_red.bmp"
field SFString greenFont "fonts/aerial_green.bmp"
field SFString linkFont "fonts/aerial_link.bmp"
field SFString boldFont "fonts/aerial_bold.bmp"
eventIn SFString loadURL
eventIn SFString setText
eventIn SFInt32 scrollText
eventOut SFString linkClicked
eventOut SFString activeLink
# eventOut SFString emailClicked
]
{
DEF BoxTransform Transform {
children [
Transform {
translation -0.015 0 0
children Shape {
geometry Box {
size 0.97 1 0
}
appearance Appearance {
material DEF backgroundColor Material {
diffuseColor 1 1 1
}
}
}
}
Transform {
translation 0.485 0 0
children [
Transform {
translation 0 0.485 0
children [
DEF UP TouchSensor {}
DEF boxShape Shape {
geometry Box {
size .03 .03 0
}
appearance Appearance {
material Material {
diffuseColor 0 0 0
emissiveColor 0 .0353 0
specularColor 0 0 1
ambientIntensity 0
shininess 0
}
}
}
Transform
{
scale .028 .028 0.028
children DEF arrowShape Shape
{
geometry Extrusion
{
crossSection [-0.5 0.5, 0.5 0.5, 0 -0.5,-0.5 0.5]
spine [0 0 -0.03, 0 0 0.03]
}
appearance DEF arrowAppearance Appearance
{
material Material {
diffuseColor .169 .31 .329
specularColor .04 .06 .83
ambientIntensity 0
shininess 0
}
}
}
}
]
}
Transform {
translation 0 -0.485 0
children [
DEF DOWN TouchSensor {}
USE boxShape
Transform
{
rotation 0 0 1 3.14159265358979
scale .028 .028 0.028
children USE arrowShape
}
]
}
Group
{
children
[
DEF scrollbarSensor TouchSensor {}
DEF scrollSensor PlaneSensor
{
maxPosition 0 0.455
minPosition 0 -0.455
offset 0 0.455 0
}
Shape {
geometry Box {
size .03 0.94 0
}
appearance Appearance {
material Material {
diffuseColor 0 0 0
specularColor .04 .06 .83
ambientIntensity .039
shininess 0
}
}
}
DEF scrollTransform Transform {
translation 0 0.455 0
children [
DEF scrollSwitch Switch
{
whichChoice 0
choice Shape
{
geometry Sphere {
radius 0.015
}
appearance USE arrowAppearance
}
}
]
ROUTE scrollSensor.translation_changed TO scrollTransform.translation
}
]
}
]
}
]
}
DEF group Transform{}
DEF TIMER TimeSensor {loop TRUE enabled FALSE cycleInterval 0.15}
DEF S1 Script {
directOutput TRUE
field SFNode world USE BoxTransform
field SFNode scrollTransform USE scrollTransform
field SFNode scrollSensor USE scrollSensor
field SFNode scrollbarSensor USE scrollbarSensor
field SFNode group USE group
field SFNode scrollSwitch USE scrollSwitch
field SFString textFont IS textFont
field SFString linkFont IS linkFont
field SFString blueFont IS blueFont
field SFString greenFont IS greenFont
field SFString redFont IS redFont
field SFString boldFont IS boldFont
field SFInt32 maxCharsOnALine IS maxCharsOnALine
field SFFloat charAspect IS charAspect
field SFFloat lineSpacing IS lineSpacing
field SFFloat charSpacing IS charSpacing
field SFFloat minMargin IS minMargin
field SFFloat charHeight 0
field SFFloat charWidth 0
field SFFloat marginX 0
field SFFloat marginY 0
field SFInt32 pageLength 0
field SFInt32 lastPosition 0
field SFFloat maxScrollY 0.455
field SFFloat scrollBarWidth 0.03
eventIn SFString loadURL IS loadURL
eventIn SFString setText IS setText
eventOut SFString linkClicked IS linkClicked
eventOut SFString activeLink IS activeLink
# eventOut SFString emailClicked IS emailClicked
field MFNode inputText []
eventIn SFTime time
eventOut SFBool timerEnabled
eventOut SFTime timerStartTime
eventOut SFColor backgroundColor
field MFNode lines []
field MFNode currentLines []
field SFBool direction TRUE
eventIn SFString uriClicked
eventIn SFString uriActive
eventIn SFString emailClicked
eventIn SFString webpageClicked
eventIn SFBool up
eventIn SFBool down
eventIn SFVec3f scrollChanged
eventIn SFBool scrollbarClicked
eventIn SFInt32 scrollText IS scrollText
field SFInt32 position 0
url "javascript:
function initialize()
{
// maxCharsOnALine*charWidth+ <-- room needed for letters
// (maxCharsOnALine-1)*(charSpacing-1)*charWidth <-- room needed for spacing
// =1-(2*minMargin)-scrollBarWidth <-- total room available
charWidth=(1-(2*minMargin)-scrollBarWidth)/(maxCharsOnALine+(maxCharsOnALine-1)*(charSpacing-1));
charHeight=charWidth/charAspect;
//pageLength*charHeight+(pageLength-1)*(lineSpacing-1)*charHeight<=1-(2*minMargin)
pageLength=(((1-(2*minMargin))/charHeight)+lineSpacing-1)/lineSpacing;
if(pageLength<1)
{
pageLength=1;
if(1-(2*minMargin)-charHeight<0)
{
charHeight=1-(2*minMargin);
charWidth=charHeight*charAspect;
}
}
marginX=((1-scrollBarWidth)-(maxCharsOnALine*charSpacing*charWidth)+((charSpacing-1)*charWidth))/2;
marginY=(1-(pageLength*lineSpacing*charHeight)+((lineSpacing-1)*charHeight))/2;
if(marginX<0) marginX=0;
if(marginY<0) marginY=0;
if(linkFont=='fonts/aerial_link_black.bmp')backgroundColor= new SFColor(0,0,0);
else backgroundColor= new SFColor(1,1,1);
}
function loadURL(url)
{
//print('loading url' +url);
// Browser.loadURL('javascript:loadNewURL(\"'+url+'\");');
}
function setText(text)
{
createTextNodes(text);
setTextNodes();
position=0;
if(lines.length<=pageLength)
{
scrollSwitch.whichChoice=-1;
} else
{
scrollSwitch.whichChoice=0;
resetScrollerTranslation();
}
}
function setTextNodes()
{
//print(maxCharsOnALine);
createTextLines();
group.children = new MFNode();
for(i=0;i< pageLength;i++)
{
if(i>=lines.length) break;
group.addChildren = lines[i].line;
//position++;
}
lastPosition=lines.length-pageLength;
}
function createTextNodes(text)
{
//var text = 'bla g [[interview het interview]] bla';
text=text+'\n';
//print (text);
var textElement;
var currentText = '';
var paragraphLength=0;
var lineLength=0;
inputText = new MFNode();
inputText[0] = Browser.createVrmlFromString( 'LineElement {}')[0];
//setText = new MFNode();
for(i=0;i< text.length;i++)
{
var character = text.charAt(i);
//print(character);
if(character=='\n')
{
style='';
//print(paragraphLength);
//print(lineLength);
textElement = Browser.createVrmlFromString('TextElement {}')[0];
textElement.text=currentText;
textElement.style=style;
inputText[paragraphLength].line[lineLength] = textElement;
paragraphLength++;
if(i!=text.length-1) { //start the next LineElement
lineLength=0;
currentText = '';
inputText[paragraphLength] = Browser.createVrmlFromString( 'LineElement {}')[0];
}
}
else if(character=='[')
{
if(text.charAt(i+1) =='[')
{//link
style='';
textElement = Browser.createVrmlFromString('TextElement {}')[0];
textElement.text=currentText;
inputText[paragraphLength].line[lineLength] = textElement;
//print('('+currentText +')');
currentText='';
lineLength++;
var uri='';
var uriText='';
for(j=i+2;j< text.length;j++) // uri - location
{
if(text.charAt(j) ==' ') break;
else uri +=text.charAt(j);
}
for(j=j+1;j< text.length;j++) // uri text
{
if(text.charAt(j) ==']') break;
else uriText +=text.charAt(j);
}
i=j+1;
//inputText[paragraphLength].line[lineLength] = Browser.createVrmlFromString( 'TextElement {text \"' + uriText + '\" uri \"' + uri + '\" style \"' + style + '\"}')[0];
textElement = Browser.createVrmlFromString('TextElement {}')[0];
textElement.text=uriText;
textElement.uri=uri;
//print('textElement.uri=uri'+ textElement.uri);
textElement.style=style;
inputText[paragraphLength].line[lineLength]=textElement;
lineLength++;
}
else currentText+=character;
}
else if(character=='')
{//email
style='';
textElement = Browser.createVrmlFromString('TextElement {}')[0];
textElement.text=currentText;
inputText[paragraphLength].line[lineLength] = textElement;
//print('('+currentText +')');
currentText='';
lineLength++;
var uri='';
var uriText='';
for(j=i+2;j< text.length;j++)
{
if(text.charAt(j) ==' ') break;
else uri +=text.charAt(j);
}
for(j=j+1;j< text.length;j++)
{
if(text.charAt(j) =='
(C) A. Eliëns
21/5/2007
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.