如果VRMLScript是VRML中的,VBScript是html之中是,两者如何沟通呢?
HTML中关键代码如下:
<script language="VBscript">
<!--
function M_b()
set M_e=Scene.Engine
M_e.Nodes("MyScript").Fields("nodestring")="Shape {geometry Box{}}"
M_e.Nodes("MyScript").Fields("kk")=TRUE
end function
//以上为"变大"按钮所对应的过程
//以下为"变小"按钮所对应的过程
function M_s()
set M_e=Scene.Engine
M_e.Nodes("MyScript").Fields("nodestring")="Shape {geometry Extrusion{}}"
//将VRML中节点MyScript的nodestring的值设为引号中的值.
M_e.Nodes("MyScript").Fields("kk")=TRUE
//触发VRML中的MyScript脚本运行,这是一种十分巧妙的方法.
end function
!-->
</script>
VRML中关键代码如下:
DEF MyScript Script {
directOutput TRUE
eventIn SFBool kk
field SFNode node USE Transfm
field SFString nodestring ""
url"VRMLSCRIPT:
function kk(){
if(nodestring=='')
{nodestring='Shape {'
+'geometry Extrusion {'
+'}'
+'}' ;
}
node.children=Browser.createVrmlFromString(nodestring);
}
"
}
Browser是什么?它是VRML Script中的一个全局对象。
如果你还不知道的话,看看它的12种方法:
- getName()--浏览器名称
- getVersion()--浏览器版本
- getCurrentFrameRate()--每秒刷新帧数
- getCurrentSpeed()--浏览者行走速度
- getWorldURL--当前资源地址
- replaceWorld(nodes)--替换场景为nodes
- createVrmlFromString(vrmlSyntax)--用vrmlSyntax字符串创建场景
- createVrmlFromURL(url,node,event)--将url资源创为场景
- addRoute(fromNode,fromEvent,toNode,toEvent)--增加事件通路
- deleteRoute(fromNode,FromEvent,toNode,toEvent)--删除事件通路
- loadURL(url,parameter)--加载资源
- setDescription(description)--设置描述
注意kk与html中的kk是一致的.
附录1.html代码:
<html>
<head>
<script language="VBscript">
<!--
function M_b()
set M_e=Scene.Engine
M_e.Nodes("MyScript").Fields("nodestring")="Shape {geometry Box{}}"
M_e.Nodes("MyScript").Fields("kk")=TRUE
end function
function M_s()
set M_e=Scene.Engine
M_e.Nodes("MyScript").Fields("nodestring")="Shape {geometry Extrusion{}}"
M_e.Nodes("MyScript").Fields("kk")=TRUE
end function
!-->
</script>
</head>
<body>
<OBJECT id="Scene"
CLASSID="CLSID:86A88967-7A20-11d2-8EDA-00600818EDB1"
WIDTH="300"
HEIGHT="300">
<PARAM NAME="Scene" value="kk.wrl">
</OBJECT>
<input type=button value="变大" onClick="M_b()">
<input type=button value="变小" onClick="M_s()"><br>
</body>
</html>
附录2.VRML代码:
#VRML V2.0 utf8
DirectionalLight {
ambientIntensity .5
intensity .2
}
NavigationInfo {
type "EXAMINE"
}
DEF Transfm Transform {
translation -4 0 -4
children [
Shape {
geometry Box{}
}]
}
DEF MyScript Script {
directOutput TRUE
eventIn SFBool kk
field SFNode node USE Transfm
field SFString nodestring ""
url"VRMLSCRIPT:
function kk(){
if(nodestring=='')
{nodestring='Shape {'
+'geometry Extrusion {'
+'}'
+'}' ;
}
node.children=Browser.createVrmlFromString(nodestring);
}
"
}
转自http://hi.baidu.com/layer7/blog/item/f456dc4a3b12bb2008f7ef4b.html