一、krpano动作/功能参考
1.编程逻辑/流量控制
(1)def(variable, type, value*)
定义具有特定类型的新变量,并可选地将其设置为给定值。当没有给定值且变量已经存在时,则具有当前值的变量将转换为给定类型。
boolean - true or false
number - a numeric value
integer or int - an integer value
uint - an unsigned integer value
string - text characters
object - an object with custom properties
array - a value-array
example:
def(b, boolean, true);
def(n, number, 123.456);
def(s, string, 'text');
def(obj, object);
def(obj.x, number, 0.0);
def(obj.y, number, 0.0);
(2)set(variable, value);set(object, variable:type=value, variable:type=value, ...);
set()操作是两种调用/使用可能性:
当使用两个参数调用时:
这是一个值的一个变量的正常集合。
当使用三个或更多参数调用时:
这是一个同时包含多个变量的多重集合。
在这里,变量将被设置或添加到对象中。
也可以选择指定变量的类型。
object
多个集合调用的对象-在此对象上将设置变量。
当对象不存在时,将创建它。
要在特定范围内定义变量,可以在这里使用全局或局部对象。
variable
变量名。
当变量不存在时,将创建该变量。
boolean - true or false
number - a numeric value
integer or int - an integer value
uint - an unsigned integer value
string - text characters
正常设置:
set(var1, 'hello');
set(var2, get(var1));
set(fullscreen, true);
set(layer[p1].visible, false);
set(hotspot[h1].scale, 2.5);
set(contextmenu.item[0].caption, 'hello item');
set(events.onxmlcomplete, null);
多组设置:
set(layer[p1], visible=false, alpha=0.5);
set(hotspot[hs1],
type='text',
ath=0.0,
atv=0.0,
html='Test Text',
css='text-align:center',
bg=false
);
set(global,
test='Test text',
havesomething:boolean=true,
var2:string=get(var1),
value:number=calc(1 + 2*3)
);
(3)action(get(variable), ... )
array[get(variable)]
get:variable" ... />
将变量解析为其值。get(var)操作是一个特殊操作,只能在调用其他操作或访问数组元素时用作参数。
当变量不存在时,get()将返回null。
注意-有些操作会自动尝试将其给定参数解析为其值。对于这些操作,不需要使用get(var)。
example:
set(dstvar, get(srcvar));
looktohotspot(get(name));
lookto(get(h), get(v), get(f));
showtext(get(msg));
tween(var,get(dstval));
set(pic, spot1);
set(hotspot[get(pic)].visible, false);
trace('xyz=', xyz, ' get(xyz)=', get(xyz));
txtadd(msg, 'fov=', get(view.fov));
action(calc(expression), ... )
array[calc(expression)]
calc:expression" ... />
计算/求值/将表达式解析为其值。
calc(expression)操作是一个特殊操作,只能在调用其他操作或访问数组元素时用作参数。
存储结果的变量。当变量不存在时,将创建该变量。数学或逻辑表达式。
set(y_new, calc(y_old - offset1 + offset2));
set(animationtime, calc('%1' == 'instant' ? 0.0 : 0.5));
<layer url="calc:'%CURRENTXML%/skin/' + settings.image1" />
(5)copy(destination, source,typeconversion*)
copy()操作将内容从一个变量复制到另一个变量。默认情况下,这与:set(destination,get(source))相同。
目标变量。当变量不存在时,将创建它。
源变量。当变量不存在时,将为目标变量设置null。
类型转换(可选)
当设置为true(默认值)时:
当两个变量都有不同的类型时,源变量的值将转换为目标变量的类型。
设置为false时:
将源变量的值和类型复制到目标变量。
删除并移除给定的变量。
参数:变量,任何变量名。
可以一次删除多个变量-只需传递多个变量名(用逗号分隔)。
set(tmp1, ...);set(tmp2, ...);delete(tmp1, tmp2);
(7)if(true/false,yes,no)
if(fullscreen, fullscreensetup(), windowsetup() );
if(fullscreen, set(layer[controls].visible, false) );
if(i LT 10, loop(next) );
if(var === null, set(var,0));
if(hotspot[spot1] === null, trace(there is no spot1 hotspot));
if((varA GT 5) AND (varA LT 10),
trace('varA is between 5 and 10')
);
if(varA AND varB AND varC, trace('all vars are true') );
if(var1 GT var2,
trace('condition is true');
lookto(100,20,50);
,
trace('condition is false');
lookto(0,0,100);
);
if(a*2+b GT (c+3)*1.5 OR teststring == '123', ...);
if(
test == 1, trace('test is 1'),
test == 2, trace('test is 2'),
test == 3, trace('test is 3'),
trace('test is someting else')
);
(8)delayedcall(delay, actions);delayedcall(id, delay, actions)
在给定的时间后调用/执行给定的操作。
参数:
id(可选)
delayedcall的可选唯一id。
此id可用于通过调用stopdelayedcall(id)来停止delayedcall。
延迟
执行操作前等待的秒数。
行动
延迟后要调用的操作。
delayedcall(5.0, hidelogo() );
delayedcall(10, looktohotspot(spot1);loadpano(pano2.xml); );
delayedcall(1, showtext('hello'); );
delayedcall(4, showtext('to the pano'); );
<action name="updatemousepos">
copy(layer[cursor].x, mouse.x);
copy(layer[cursor].y, mouse.y);
delayedcall(0.02, updatemousepos() );
</action>
使用给定的id停止delayedcall。
<events name="introimage_events"
onnewpano="delayedcall(introimage, 5.0, hide_introimage() );"
onremovepano="stopdelayedcall(introimage);"
在下一个处理中调用/执行给定的操作-这意味着在当前操作之后,但要尽快。
(11)callwhen(condition, actions);callwhen(id, condition, actions);
在条件为真或将成为真时调用给定的操作。
当条件当前不是true时,则callwhen()操作将一直等待,直到条件变为true。
参数:
id(可选)
callwhen的可选唯一id。
通过调用stop callwhen(id),此id可用于停止等待的callwhen。
条件
逻辑表达式。
callwhen()操作将在每帧中不断检查此条件,直到它变为真。
行动
条件为真时要调用的操作。
callwhen(plugin[video].loaded, plugin[video].playvideo(...); );
callwhen(plugin[maps].loaded, plugin[maps].setcenter(...); );
(12)stopcallwhen(id);
使用给定的id停止仍在等待的呼叫。
(13)for(startactions, condition, nextactions, loopactions)
首先调用startactions,然后检查条件,当它为true时,然后调用loopactions,然后调用nextactions,然后再次开始检查条件和循环。
for(set(i,0), i LT 10, inc(i), trace('i=',i) );.
for(set(i,0), i LT layer.count, inc(i),
trace('layer[',i,'].name=',layer[get(i)].name);
);
(14)loop(condition, loopactions);asyncloop(condition, loopactions, doneactions*);
只要条件为true,就将重复调用loopactions。当循环本身完成时,normal loop()操作将继续执行以下操作。asyncloop()将中间继续执行以下操作,并每帧执行一次loopactions。当异步循环最终完成时,将调用doneAction。
ondown="asyncloop(pressed, layer[scrollarea].scrollby(+2,0) );"
onover="asyncloop(hovering, updatemousepos(), hideinfo() );"
asyncloop(true, framehandler() )
(15)renderloop(loopactions);stoprenderloop();
renderloop()操作将在每帧执行一次loopactions。
要停止循环,需要在loopactions内部调用stoprenderloop()操作。
krpano-Action-Code Example:
renderloop(
if(...done with rendering...,
stoprenderloop(); );
);
Javascript-Code Example:
krpano.actions.renderloop(function(){
if(...done with rendering...){
krpano.actions.stoprenderloop();
}
});
(16)setinterval(id, delay, actions);clearinterval(id);
重复调用/执行给定的操作,并在两个操作之间有一个延迟时间间隔。
此id可用于通过调用clearinterval(id)来停止间隔。
延迟
操作调用之间等待的秒数。
使用0作为延迟时,每帧将调用一次操作。
行动
调用每个延迟秒的操作。
setinterval(time, 1.0,
jsget(time, (new Date()).toLocaleTimeString(); );
trace('time=',time);
);
<events onkeydown="setinterval(get(keycode), 0.1, trace(keycode); );"
onkeyup="clearinterval(get(keycode));"
/>
(17)toggle(variable);
toggle操作在true和false之间切换给定(布尔)变量的值。
toggle(fullscreen);
toggle(layer[button1].visible);
(18)switch(variable);switch(variable, value1, value2, ...);
开关动作在几个状态之间/通过几个状态来切换给定变量的值。每次调用开关动作时,值都将被切换/更改。
当只给出没有值参数的变量本身时,变量将在true和false之间切换。
当有两个或多个作为参数给定的值时,变量将切换所有这些值(从左到右)
switch(fullscreen);
switch(layer[button1].visible);
switch(layer[button1].alpha, 1.0, 0.5);
switch(layer[child].parent, button1, button2, button3);
switch(destpos, -100, 0, +100); tween(y,get(destpos));
(19)break();
中断/停止当前流中的操作调用的执行,以及从一个嵌套级别向上的操作调用(例如,当在if()调用内部调用时,也将停止if外部的流)。
当在for()或loop()循环中使用时,break()调用也将停止该循环。
(20)exitcall();
直接退出/停止当前操作“调用”。
“调用”要么是对<action>的调用,要么是对包含action代码的变量的调用,要么是对事件的action代码的调用。
(21)callwith(caller, actions);
使用特定的插件/层或热点元素作为调用方调用krpano操作代码。这可用于直接属性访问或模拟对这些元素的事件调用。
参数:
来电者
应该用作调用方的元素。
只能是<plugin>/<layer>或<hotspot>元素。
行动
任何krpano动作代码。
代码将在调用方的“context”中执行,这意味着对其属性的“直接”访问。
callwith(layer[test], onclick);
callwith(layer[test], trace('test pos=',x,'/',y); );
callwith(layer[test], tween(alpha, 0.0); );
(22)scope(scope, actions);
在特定范围内调用krpano操作代码。
scope(localonly, for(set(i,0), i LT 10, inc(i), trace(i)); );
scope(private:my_xml_plugin, trace(internal_var); );
(23)parentscopeset(variable, value)
将变量设置为a值-类似于Set()调用-但在父操作的范围内。
这可用于将内部本地作用域操作的结果返回/传递回外部作用域操作。
将当前本地作用域链接到给定元素的事件。
当调用该元素的事件(例如onclick)时,事件代码中将使用相同的作用域。默认情况下,事件始终使用全局范围。
注意-当链接到一个作用域时,有必要使用调用者来寻址元素作用域本身!
(25)assignstyle(elementname, styles);
将属性从一个或多个<style>元素复制到自定义元素。
assignstyle(layer[test], 'teststyle');
assignstyle(layer[test], 'style1|style2');
(26)copyattributes(destobject, srcobject)
将所有属性从一个对象复制到另一个对象。
注意-copyattributes()操作的参数必须是对象,而不是对象的名称/路径!这意味着可能需要使用get()操作来解析名称/路径。
copyattributes(get(layer[test]), get(style[style1]));
(27)events.dispatch(eventname, instantly*);
从所有<events>元素分派/调用给定事件。
参数:
事件名称
事件的名称。
立即(可选)
布尔设置(默认为true或false)。
当设置为true时,将立即调用和执行事件;当未设置或设置为false时,将在当前操作调用后调用事件。
<events name="events1" myevent="trace(events1...);" />
<events name="events2" myevent="trace(events2...);" />
events.dispatch(myevent);
(28)tohex(variable, prefix*, length*);tohex(destinationvariable, variable, prefix, length);
将给定变量的内容转换为十六进制字符串。
可用于创建html/css颜色字符串。
tohex(color,'#',6);
set(color, ...an_external_integer_input...);
tohex(color,'#',6);
txtadd(layer[text1].css,'color:',get(color),';');
(29)tolower(variable);toupper(variable);tolower(destinationvariable, sourcevariable);toupper(destinationvariable, sourcevariable)
将给定变量的内容转换为小写或大写。
(30)txtadd(destination, txt1, txt2*, txt3*, ...);
txtadd操作可用于将多个文本/值添加/连接在一起。
该操作可以与2个或更多参数一起使用。当只使用两个参数(目的地和文本)时,文本将添加到目的地变量的当前值。
参数:
目的地
存储连接文本的目标变量。
当变量不存在时,将创建该变量。
txt1,txt2,txt3。。。(可选)
将连接在一起的文本。
如果只使用一个txt参数,则此文本将添加到当前目标变量的内容中。
注意-当应该使用变量的内容时-则必须使用get()操作来解析变量!
txtadd(picfilename,'%CURRENTXML%/pic_',get(pic),'.jpg');
txtadd(crop,'0|',get(ypos),'|333|285');
txtadd(pname, 'thumbbar_image_', get(i));
txtadd(layer[text].html,'[p]',get(data[txt1].content),'[/p]');
txtadd(msg,get(view.fovtype),'=',get(fov),'°');
(31)subtxt(dstvar, srcvar, startpos, len);
subxt操作提取其他文本的一部分。
参数:
将存储提取文本的目标变量。当变量不存在时,将创建该变量。包含源文本的变量或文本。文本提取的起始位置。要提取的文本的长度。
(32)indexoftxt(index, txt, searchtxt, startindex*);
indexoftxt操作给出“txt”字符串中“searchtxt”值第一次出现的位置。将存储“searchtxt”第一次出现的索引的变量。
如果从未发生过“searchtxt”,则为-1。当变量不存在时,将创建该变量。
应该在其中搜索的文本。要搜索的文本。startindex(可选)开始搜索文本的起始索引/位置(默认为0)。
(33)txtreplace(var, searchtext, replacetext);txtreplace(dstvar, srcvar, searchtext, replacetext)
txtreplace操作在“var/srcvar”中搜索“searchtext”的所有匹配项,并将其替换为“replacetext”。
参数:
变量/srcvar/dstwar要搜索的变量(var,srcvar)和结果的存储位置(var,dstvar)。当变量不存在时,将创建该变量。
搜索文本
应该搜索的文本。
替换文本
将替换“searchtxt”出现的文本。
(34)txtsplit(string, separator, resultingarray);txtsplit(string, separator, var1, var2, ...);
txtsplit操作在“var/srcvar”中搜索所有出现的“searchtext”,并将其替换为“replacetext”。
分隔符或字符串。
resultingarray(使用3个参数调用txtsplit()操作时)
将拆分部分作为“value”属性包含的数组变量的名称。
变1,变2。。。(使用4个或更多参数调用txtsplit()操作时)
拆分的结果将直接分配给给定的变量。
当使用null作为变量时,该值将被忽略/跳过(只能用于提取某些特定值)。
txtsplit('1|2|3', '|', a, b, c);
trace('a=',get(a), ' b=',get(b), ' c=',get(c));
a=1 b=2 c=3
Split into an array:
txtsplit('x|y|z', '|', arr);
for(set(i,0), i LT arr.count, inc(i),
trace('arr[',get(i),'].value=',arr[get(i)].value);
);
Result:
arr[0].value=x
arr[1].value=y
arr[2].value=z
(35)txtjoin(var, separator, array);txtjoin(var, separator, var1, var2, ...);
txtjoin操作浓缩给定数组或给定变量中的所有元素,并在它们之间插入指定的分隔字符串。
当变量不存在时,将创建该变量。
将在元素之间插入的分隔符或字符串。
数组(使用3个参数调用txtjoin()操作时)
数组变量的名称。
变1,变2。。。(使用4个或更多参数调用txtjoin()操作时)
要联接的变量或值。
txtsplit(image.prealign, '|', rx, ry, rz);
add(ry,90);
txtjoin(image.prealign, '|', rx, ry, rz);
Split into an array:
txtsplit('x|y|z', '|', arr);
for(set(i,0), i LT arr.count, inc(i),
trace('arr[',get(i),'].value=',arr[get(i)].value);
);
Result:
arr[0].value=x
arr[1].value=y
arr[2].value=z
(36)fromcharcode(var, charcode);
fromcharcode操作将给定的字符代码转换为字符串并存储在给定的变量中。存储字符的变量。
当变量不存在时,将创建该变量。
字符码
作为数字的Unicode字符代码。
(37)escape(var);escape(var, text);unescape(var);unescape(var, text);
escape和unescape操作是转义给定变量或给定文本的内容,然后将结果存储到给定变量中。
With text参数-转义/未转义文本将存储在其中的变量。将被转义/取消转义的文本。
(38)tween(variable, value, time*, tweentype*, donecall*, updatecall*);
tween操作可用于时间控制的动画/变量更改。该操作将动态地将变量的当前值更改为给定值。可以同时将多个变量连接在一起。因此,请指定多个变量、值和由|字符分隔的二十种类型。如果指定了多个变量,但只有一个值和/或只有一个tweentype,则所有变量将tween转换为相同的值和/或使用相同的tweentype。对于所有给定的变量,时间、完成和更新调用将始终相同。
Parameters:{variable,value,time,tweentype,donecall ,updatecall }
tween(scale,2);
tween(rotate,90);
tween(width,50%);
onover="tween(alpha,0.7,distance(0.3,0.2));"
onout="tween(alpha,1.0,distance(0.3,0.2));"
set(alpha,0);
set(visible,true);
tween(alpha, 1.0 ,0.3);
tween(layer[logo].width, get(destwidth));
set(layer[image].enabled,false);
tween(layer[image].alpha,0.0,0.5,default,removeplugin(image));
set(view.stereographic,true);
tween(view.vlookat, 90.0, 2.0);
tween(view.fisheye, 1.0, 2.0);
tween(view.fov, 150.0, 2.0);
stoptween操作停止当前正在运行的tween操作。
ondown="tween(layer[text].y, 10, distance(400,0.7), linear);"
onup="stoptween(layer[text].y);"
(40)tweentypes;https://krpano.com/docu/actions/#setinterval
(41)loadpano(xmlpath, vars*, flags*, blend*)
loadscene(scenename, vars*, flags*, blend*)
loadpanoscene(xmlpath, scenename, vars*, flags*, blend*)
loadxml(xmlstring, vars*, flags*, blend*)
loadpano(pano2.xml);
loadpano(pano2.xml, null, MERGE, BLEND(1));
loadscene(scene1);
loadscene(scene1, null, MERGE, BLEND(1));
loadxml('<krpano><image><sphere url="pano.jpg"/></image></krpano>');
loadxml(get(data[xml].content), null, KEEPALL);
loadpano('%VIEWER%/pano.xml', null, MERGE, BLEND(2));
loadpano(sphere.xml, image.hfov=1.0&view.limitview=fullrange);
openurl('https://krpano.com',_self);
openurl('help.html');
(43)lookat(h, v, fov*, distortion*, architectural*, pannini*)
看这个全景位置。
Parameters:{h,v,fov,distortion,architectural,pannini }
lookat(0,0);
lookat(0,0,90);
loadpano(pano.xml);
lookat(45.1, -20.2, 110.0);
(44)lookto(toH,toV,fov*,motiontype*,shortestway*,nonblocking*,donecall*)
looktohotspot(hotspotname*, fov*, motiontype*, shortestway*)
将视图从当前查看位置移动到给定位置。
注意-在移动过程中,用户界面和所有其他操作都被阻止。这意味着下一个操作将在当前操作完成时执行。oninterrupt操作可用于使用户能够中断这些操作。
Parameters:{toH,toV,hotspotname ,fov ,motiontype 、shortestway,nonblocking ,donecall}
moveto(100.0,5,linear(10));
zoomto(130,smooth());
lookto(33,-22,30,smooth(100,50,20));
looktohotspot(hotspot1);
looktohotspot(hotspot2, 40);
looktohotspot(hotspot3, 25, smooth(100,50,20));
looktohotspot(get(name));
(45)adjusthlookat(desthlookat);
调整手动粗花呢的view.hlookat值。
它修复了360度环绕,以最短的方式到达desthlookat。
参数:
当desthlookat是变量名时,将自动使用该变量的值。
current view.hlookat变量将调整(不更改当前视图)为该值旁边的变量。
adjusthlookat(140);
tween(view.hlookat, 140);
(46)adjust360(source_ath, target_ath);
将源路径变量调整为最短的水平360度(相对于目标路径变量)。
源/开始路径值。
source路径必须是变量的名称。
目标路径
目标/目标ath值。
当desthlookat是变量名时,将自动使用该变量的值。
将热点移动到当前水平查看位置:
adjust360(hotspot[test].ath, view.hlookat);
tween(hotspot[test].ath, get(view.hlookat), 1.0);
(47)getlooktodistance(result, toH, toV, fromH*, fromV*)
获取fromH/fromV和toH/toV观察点之间的球面距离(以度为单位)。结果将始终介于0.0和180.0之间(在球体上不可能超过180度的距离)。
Parameters:{result,toH,toV,fromH ,fromV }
(48)stoplookto();
停止非阻塞的lookto/looktohotspot/moveto/zoomto操作。
(49)stopmovements();
立即停止所有用户驱动(通过鼠标、键盘或触摸)的平移和缩放运动。
(50)wait(parameter);
等待几秒钟或等待事件。
注意-用户界面和以下所有操作将在等待期间被阻止。这意味着当当前等待操作完成时,将执行当前调用中的下一个操作。oninterrupt操作可用于使此操作可被用户中断。
oninterrupt(break);
lookto(150,30,70);
wait(3);
lookto(242,0,150);
lookto(280,-10,50);
wait(3);
loadpano(pano2.xml,null,MERGE,BLEND(2));
lookat(100,50,5);
wait(BLEND);
lookto(100,50,150);
(51)oninterrupt(actions);
此操作可在启动一组阻止用户界面的操作(如lookto、looktohotspot、moveto、zoomto、wait和tween with wait as donecall)之前使用。当这些操作中的任何一个被用户中断时(例如,通过单击),这些操作将停止,并执行在oninterrupt操作中定义的操作。
oninterrupt(break);
lookto(150,30,70);
wait(3);
lookto(242,0,150);
lookto(280,-10,50);
wait(3);
oninterrupt( trace(user interrupt); );
lookto(0,0,90);
lookto(90,0,90);
lookto(180,0,90);
lookto(270,0,90);
lookto(0,0,90);
(52)screentosphere(x,y, h,v);spheretoscreen(h,v, x,y, stereoside*)
屏幕坐标和球面坐标之间的转换操作。
screentosphere操作将x/y变量转换为h/v变量,spheretoscreen操作将h/v变量转换为x/y变量。
参数:
x/y轴
以左上边缘像素为单位显示屏幕坐标的变量。
高压
以度(360x180)为单位的球坐标变量。
立体(可选)
对于立体渲染-定义坐标应映射到哪个屏幕边。可能的设置:l表示左侧,r表示右侧,或未设置/未定义正常的非立体屏幕坐标。
笔记:
x,y,h,v参数必须是变量名,不能使用值!
当变量不存在时,将创建它。
screentosphere(mouse.x, mouse.y, toh, tov);
(53)screentolayer(layer, screenx,screeny, layerx,layery);layertoscreen(layer, layerx,layery, screenx,screeny)
用于在屏幕/阶段和相对<layer>坐标之间转换的操作。
screentolayer(bar, mouse.stagex,mouse.stagey, lx,ly);
div(fill, lx, layer[bar].pixelwidth);
mul(fill, 100);
clamp(fill, 0, 100);
txtadd(layer[barfill].width, get(fill), '%');
(54)spheretospace(h,v,depth, x,y,z);spacetosphere(x,y,z, h,v,depth)
用于在球面坐标和XYZ三维空间坐标之间转换的操作。将热点位置从球面坐标转换为空间坐标:
spheretospace(ath,atv,depth, tx,ty,tz);
set(ath,0);
set(atv,0);
set(depth,0);
and back:
spacetosphere(tx,ty,tz, ath,atv,depth);
set(tx,0);
set(ty,0);
(55)remapfovtype(fov, srcfovtype, dstfovtype);remapfovtype(fov, srcfovtype, dstfovtype, width, height)
将一个fov值从一个fov类型重新映射到另一个fov类型。
当改变视场类型,同时,重新映射视场时,结果的全景缩放将保持不变。
Parameters:{fov,srcfovtype,dstfovtype,width ,height}
set(view.fovtype, HFOV);
set(view.fov, 90);
set(view.fovtype, VFOV);
remapfovtype(view.fov, HFOV, VFOV);
(56)