KRPANO 액션 작성법

사진/360 파노라마 2012.09.09 00:22 Posted by 드론쟁이 푸른하늘이

krpano에는 작고 간단하면서도 동적인 스크립트 언어가 있습니다. 이를 사용하면 krpano를 여러가지 방법으로 변경할 수 있습니다. krpano의 명령 혹은 함수는 action이라고 합니다. 기존의 액션을 사용하여 새로운 액션을 제작하는 것도 가능합니다. 


스크립트 언어는 동적이며, 기본적으로 일부 기정의된 변수를 제외하면 무유형(untyped)이지만, 액션 내부에서 타입이 자동 변환되기 때문에 거의 대부분 문제가 없습니다.


KRPANO 전역변수


  • version(RO)(예: "1.0.8.15", xmlversion(RO), build(RO) (예: "2012-8-10")
  • mouse.x, mouse.y, mouse.stagex, mouse.stagey  /(RO)* mouse.x/y는 현 area에 대한 상대좌표. */
  • keycode(RO)  /* onkeydown, onkeyup 이벤트에서 설정됨. 
  • wheeldelta(RO) /* 마우스휠 돌아간 양, onmousewheel 이벤트에서 설정됨 
  • fullscreen  /* 풀스크린상태. 설정하면 상태가 바뀜. 단, 마우스/키보드 액션이 있을때만 가능. 즉, onclick="set(fullscreen, true);" onkeydown="swtich(fullscree);" 등만 가능.
  • stagex, stagey(RO) /* 현재 윈도의 크기. onresize 때 크기를 알아낼때 사용
  • browser.useragent
  • isflash, ishtml5, ismobile, istablet, isdesktop(RO), ... 
  • timertick(RO)       /* 뷰어가 시작된 이후의 시간. miliseconds. */
  • random(RO) /* 0.0-1.0사이. 1-10까지 만들려면, mul(val, random, 9); add(val, 1); roundval(val);
  • hlookat_moveforce, vlookat_moveforce, fov_moveforce /* 0이 아닌 값으로 설정하면, 가속(keybaccelerate) 되어 최고속도(keybspeed)가 되면 다시 0.0으로 설정되고 감속(keybfriction)됨 */
  • multireslevel(RO)  /* 현재의 level */
  • lockmultireslevel   /* "current"이면 현재의 레벨로, "3"이면 3레벨로 고정. "-1"이면 고정 해제 */
  • downloadlockedlevel 
  • xml.url(RO)          /* 현재 xml파일의 경로 */
  • xml.content(RO)   /* xml 파일에 들어있는 전체 내용 */
  • xml.scene(RO)    /* 현재 scene의 이름 */
  • lasterror             /* 마지막 에러 */
  • haveexternalinterface  /* local에서 Flash/javascript를 실행시킬 수 있는지? */
  • havenetworkaccess  /* 


Actions


  • set(variable, value) /* variable :=value. variable이 없으면 만들어짐. 다른 변수를 복사해 넣으려면 set(variable1, get(variable2)); 로 써야 함.
  • get(variable)          /* 다른 action에 variable을 넘겨줄때나, array[]에서 사용해야 할 때
  • copy(dest, source)  /* set(dest, get(source)); 와 동일함
  • delete(...variables...) 
  • if (condition, then_action, else_action) ifnot (condition, then_action, else_action)      /* condition이 true, not 0, not null 이면 then_action 실행됨.   cond1 OPERATOR cond2. 관계연산자로는 ==, !=, </LT, GT, LE, GE, ===,!== (존재할 때만 비교)
  • action(actionname, parameters...) / actionname(parameters...)로 써도 가능. 매개변수는 'parameter'도 가능하고 "parameter" 도 가능
  • delayedcall(delay, action)  /* delay 초 후에 action 실행
  • for(startaction, condition, nextaction, loopaction), asyncfor(startaction, condition, nextaction, loopaction) /* startaction -> condition 체크 -> loopaction -> nextaction -> condition 체크 ->... 일반 for의 경우에는 for가 완료되어야 그 다음 문장이 실행됨. async의 경우 for를 한번 통과하고나서 다음문장을 계속실행. for의 loop action은 한 frame에 한번씩 수행됨*/
  • loop(condition, loopaction), asyncloop(condition, loopaction) /* condition check -> loopaction */
  • switch(variable, valueA*, valueB*,..) /* switch(variable)이면, 실행될때마다 variable이 true/false를 반복함. switch(variable, 3, 4, 7) 이라면 첫번째는 3 두번째는 4, 세번째는 7, 네번째는 3 등으로 계속 반복 */
  • push(variable), pop(variable) /* variable을 stack에 저장/불러옴 */
  • stopall() /* 현재 수행중인 actions, tween 정지. queueed action 제거 */
  • breakall() /* 현재 수행중인 actions, tween 정지. queued action 수행 */
  • add/sub/mul/div/mod/pow(variable, valueA, valueB) /* 파라미터가 두개일 경우, sub(A, B)는 A=A-B 임. 3개일 경우 mul(A,B,C)는 A=B+C 임. B/C는 자동 변환되므로 get()을 사용할 필요 없음 */
  • inc(variable, byvalue, max, min), dec(variable, byvalue, max, min) /* 최초 min. 한번실행될 때마다 byvalue만큼 증가. max에 도달하면 다시 min으로 설정. byvalue 디폴트 1. */
  • Math.PI, Math.abs(var), acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, round, sin, sqrt, tan
  • roundval(variable, decimalplaces*) /* 반올림. */
  • txtadd(destination, txt1, txt2*, txt3*,...)  /* dest와 txt1 만 있을 경우에는 dest= dest+txt1, 여러개일 경우, dest=txt1+txt2+... 반드시 get()을 사용해야 함 */
  • subtxt(dstvar, srcvar, startpos, len) /* 일부를 추출 */
  • indexoftxt(dstvar, srctxt, searchtxt, startindex*)  /* startindex는 처음 찾기 시작하는 위치 */
  • tween(variable, destinationvalue, time*, tweentype*, donecall*, updatecall*) /* tween 액션은 시간을 제어하는 애니메이션에 사용됨. 변수의 현재값을 목표값으로 동적으로 변경시킴. 주어진 시간(디폴트 0.5)동안. tweentype 매개변수에는 내삽의 형태를 지정. tween 이 완료되고 변수의 값이 목표값에 도달하면 donecall이 수행됨. variable:변하는 변수, time: 목표값에 도달하는 시간. distance를 사용하면 짧은 거리에는 짧은시간, 긴거리에는 긴사간이 되도록 할 수 있음. tweentype: 내삽유형(디폴트 easeOutQuad), donecall:목표값에 도달한 뒤 수행되는 액션. "WAIT"로 지정하면 사용자의 간섭필요. updatecall:값이 변경될 때마다 수행되는 액션. */
  • stoptween(variable,...) tween action에 사용되는 변수(variable)을 중지시킴.
  • loadpano(xmlpath, vars*, flags*, blend*), loadxml(xmlstring, vars*, flags*, blend*), loadscene(scenename, vars*, flags*, blend*) /* 새로운 파노라마를 불러들임. keep="true"로 지정된 플러그인, 핫스팟, 이벤트, 렌즈플레어만 보존됨. loadpano 뒤에 추가적인 action 이 있으면, onstart 이벤트가 실행되지 않음. xmlpath:불러들일 파노라마의 경로. 지정하지 않으면 %FIRSTXML%이 기본으로 사용됨. xmlstring:수행될 xml. scenename:불러들일 <scene>의 이름. blend:NOBLEND/BLEND(n) n초에 걸쳐 블렌딩/ZOOMBLEND(n,z) n초동안 z배율로 */
  • reloadpano() /*"image.sphere.url"이나 "image.type" 같은 변수는 동적으로 변경시킬 수 없다. 이들 변수는 처음 로드할 때만 파싱된다. 따라서 변경된 이미지 변수는 다시불러와야 알 수 있다. */
  • openurl(url, target*) 이 기능을 오프라인에서 사용하려면  Flashplayer의 External Interface를 사용할 수 있어야 함. target:_blank,_self,_parent,_top */
  • lookat(atH, atV, fov*) 
  • lookto(toH, toV, fov*, motiontype*, shortestway*, nonblocking*, donecall*) looktohotspot(hotspotname, fov*, motiontype*, shortestway*) moveto(toH, toV, motiontyep*) zoomto(fov, motiontype*) /* 뷰를 현재위치에서 주어진 위치로 이동시킴. 시행되는 동안, 유저인터페이스및 다른 액션이 정지됨. 가능하게하려면 oninterrupt 액션을 사용해야 함. motiontype: linear(speed)/smooth(accel, break, maxspeed)/tween(tweentype, time), shortestway="true"이면 최단경로로 이동. 
  • adjusthlookat(desthlookat) ??
  • wait(parameter) /* parameter:숫자이면 초. LOAD, BLEND. 그동안 어떤함수도 유저인터랙션도 안됨. oninterrupt로 가능 */
  • freezeview(state) /* state="true"이면 현재 파노 view가 정지됨. 정지되면 렌더링성능이 좋아짐. 
  • oninterrupt(actions) /* user interface를 중지시키는 액션(lookto, looktohotspot, moveto, zoomto, wait/tween에서 donecall로 WAIT을 지정했을때) 시행 전에 설정. 이러한 액션중에 사용자가 마우스를 클릭하는 등을 시행하면 여기에 지정된 action이 수행됨. action에 "break"를 지정하면 중지되고 빠져나옴. */
  • screentosphere(x,y,h,v) spheretoscreen(h,v,x,y) /* x,y:스크린좌표(좌상단0,0), h,v:구면좌표(360/180도) 모든 매개변수로 변수를 사용해야 함. 상수를 쓰면 안됨) */
  • showtext(text,textstyle*) /*한번에 하나씩만. 새로 부르면 원래것은 사라짐. txt:표시될 문자열. html코드 사용가능. 단 <>는 []로 대체. 예:[b]bold text[/b], 다음줄은 [br]. txtstyle: xml text style */
  • updateoject(updateall*, updatefov*) /* 파노 객체의 내부 3D 모델을 재구축. display.details, display.tessmode 를 바꾼 뒤 반드시 실행시켜야 함. image.hfov, image.vfov, image.voffset을 대화식으로 변경시켰다면, updatefov="true"로 매개변수를 설정하여 실행시켜야 함. 
  • updatescreen() 파노라마 뷰를 강제로 다시 그림. 
  • invalidatescreen() 강제로 다시그림. 렌더링 품질이 movequality/movequality10으로 바뀜. 
  • addlayer(name), addplugin(name), addhotspot(name), addlensflare(name, ath*, atv*) 동적으로 생성
  • removelayer(name), removeplugin(name)...
  • js(jsfunction(parameters*)) /* global javascript 호출. 오프라인으로 실행할 경우 Flashplayer의 External Interface가 있어야 함. */
  • fscommand(...) /* standalone Flashplayer를 제어하기 위한 명령 */
  • showlog(state*) /* state="true"이면 로그가 표시됨 */
  • trace(...) /* 변수의 내용을 로그에 표시 */
  • error(errormessage)




    댓글을 달아 주세요

    BLOG main image
    드론과 지도
    드론이 세상을 바꾸고 있습니다.드론의 활용처가 계속 넓어지고 있고, 글로벌 기업들의 참여가 많아지고 있으며, 새로운 기술들이 속속 등장하고 있습니다. 하지만 우리나라의 드론 산업은 일부 기업을 제외하면 중국에서 생산된 드론을 가져다가 조립하는 수준이 대부분입니다. 드론은 하드웨어, 소프트웨어, 데이터처리가 복합된 기술입니다. 어떤 기술들을 어떻게 조합할지에 성패가 달렸죠. 5년뒤 10년뒤에 이 블로그엔 어떤 글이 적힐까요? 그것이 궁금합니다.
    by 푸른하늘이
    Profile for bluesky61

    달력

    «   2018/09   »
                1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30            

    카테고리

    전체보기 (1586)
    구글어스 (829)
    공간정보 (236)
    사진 (103)
    드론/쿼드콥터 (239)
    지오캐싱 (47)
    기타 (131)
    • 4,494,857
    • 111406
    TNM Media textcube get rss

    드론과 지도

    푸른하늘이's Blog is powered by Tistory. / Supported by TNM Media.
    Copyright by 푸른하늘이 [ http://www.ringblog.com ]. All rights reserved.

    Textcube TNM Media
    푸른하늘이's Blog is powered by Tistory. Designed by Qwer999. Supported by TNM Media.