minimap_zoomrect.xml 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <krpano>
  2. <!--
  3. minimap_zoomrect.xml
  4. krpano 1.21
  5. https://krpano.com/plugins/xmlextensions/#minimap_zoomrect
  6. A helper script for adding a zooming-indicator for a mini-overview-map.
  7. A rectangle will be added within the image layer and the size and position
  8. will automatically be updated depending on the zooming and panning.
  9. Additionally the rectangle will be dragable to pan around and the map-image
  10. will be clickable to pan to a certain position.
  11. Example:
  12. <layer name="minimap"
  13. url="map.jpg"
  14. bgborder="1 0xFFFFFF"
  15. align="lefttop" x="10" y="10"
  16. ...
  17. style="minimap_zoomrect"
  18. zoomrect_border="1 0x0000FF"
  19. zoomrect_dragable="true"
  20. zoomrect_movetoclick="true"
  21. />
  22. -->
  23. <style name="minimap_zoomrect"
  24. maskchildren="true"
  25. handcursor="false"
  26. onloaded.addevent="minimap_zoomrect_init();"
  27. onclick.addevent="minimap_zoomrect_onclick_moveto();"
  28. />
  29. <action name="minimap_zoomrect_init" scope="local">
  30. addlayer(auto, zoomrect);
  31. if(!isvalue(caller.zoomrect_dragable), def(caller.zoomrect_dragable, boolean, true));
  32. if(!isvalue(caller.zoomrect_movetoclick), def(caller.zoomrect_movetoclick, boolean, true));
  33. set(caller.scalechildren,false);
  34. set(zoomrect,
  35. parent=get(caller.name),
  36. type='container',
  37. bgborder=calc(caller.zoomrect_border ? caller.zoomrect_border : '1 0x0000FF 1.0'),
  38. bgcapture=true,
  39. ondown='minimap_zoomrect_dragging();'
  40. );
  41. calc(events[calc(caller.name+'_zoomrect')].onviewchanged, 'minimap_zoomrect_onviewchanged(' + zoomrect.name + ')');
  42. copy(events[calc(caller.name+'_zoomrect')].keep, caller.keep);
  43. </action>
  44. <action name="minimap_zoomrect_onclick_moveto" scope="local">
  45. if(caller.zoomrect_movetoclick,
  46. tween(view.hlookat, calc((caller.hitx-0.5) * image.hfov));
  47. tween(view.vlookat, calc((caller.hity-0.5) * image.vfov));
  48. );
  49. </action>
  50. <action name="minimap_zoomrect_onviewchanged" scope="local" args="zoomrect_name">
  51. copy(zoomrect, layer[get(zoomrect_name)]);
  52. set(zoomrect.align, 'center');
  53. calc(zoomrect.width, ((view.hfov / image.hfov) * 100) + '%');
  54. calc(zoomrect.height, ((view.vfov / image.vfov) * 100) + '%');
  55. calc(zoomrect.x, ((view.hlookat / image.hfov) * 100) + '%');
  56. calc(zoomrect.y, ((view.vlookat / image.vfov) * 100) + '%');
  57. </action>
  58. <action name="minimap_zoomrect_dragging" scope="local">
  59. copy(parentlayer, layer[get(caller.parent)]);
  60. if(parentlayer.zoomrect_dragable,
  61. copy(sx, mouse.x);
  62. copy(sy, mouse.y);
  63. asyncloop(caller.pressed,
  64. calc(dx, (mouse.x - sx));
  65. calc(dy, (mouse.y - sy));
  66. copy(sx, mouse.x);
  67. copy(sy, mouse.y);
  68. set(caller.align, 'lefttop');
  69. calc(caller.x, caller.pixelx + dx);
  70. calc(caller.y, caller.pixely + dy);
  71. calc(h, (caller.x + caller.pixelwidth/2) / parentlayer.pixelwidth - 0.5);
  72. calc(v, (caller.y + caller.pixelheight/2) / parentlayer.pixelheight - 0.5);
  73. calc(view.hlookat, h * image.hfov);
  74. calc(view.vlookat, v * image.vfov);
  75. );
  76. );
  77. </action>
  78. </krpano>