Skip to main content

Flash API (Pano2VR)

This is the documentation for Pano2VR 4. You can find the new documentation for Pano2VR 5 here.

To embed the pano, please use the following code:

Loading the Panorama[edit]

Actionscript 3.0[edit]

import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
 
var loader:Loader = new Loader();
var url:String = "panorama.swf";
var urlReq:URLRequest = new URLRequest(url);
var vr:MovieClip; // panorama movieclip
 
// This is done after the swf is loaded.
function finished_loading (e:Event) {
}
 
function initHandler(event:Event):void {
	trace("initHandler: " + event);
	vr = MovieClip(loader.content); // cast 'DisplayObject' to 'MovieClip'
//	vr.isFlash10=false; // Disable Flash 10 rendering if the container is Flash 9
}
 
function initPanorama(e:Event) {
// check if the panorama object is available and initialize it
	if ((vr!=null) && (vr.pano!=null)) {
		removeEventListener( Event.ENTER_FRAME , initPanorama);
		vr.x=50;
		vr.y=50;
		vr.pano.setWindowSize(400,300);
	}
}
// call initPanorama every frame
addEventListener( Event.ENTER_FRAME , initPanorama);
 
// Tell the loader to call 'finished_loading' after the swf is loaded.
loader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, finished_loading);
// Tell the loader to call 'initHandler' after the swf is initialized.
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
loader.load(urlReq);
addChild(loader); // add your swf directly to the stage

If you like to remove the panorama use the following code:

vr.cleanup();
removeChild(loader);

You need to call the cleanup method to avoid errors like "Cannot access a property or method of a null object reference" because ActionScript doesn't provide a destructor for objects.

Actionscript 2.0[edit]

Only for Flash 8 export in Pano2VR 2.x - deprecated

var vr:MovieClip = _root.createEmptyMovieClip("vr", 1);
vr._lockroot=true;
// move the upper left corner
vr._x=100;
vr._y=200;
var myLoader = new MovieClipLoader();
var myListener = new Object();
myListener.onLoadStart = function () {
// Set the dimensions and position of the pano
  vr.window_width=500;
  vr.window_height=380;
  vr.window_x=100;
  vr.window_y=10;
};
myListener.onLoadInit = function () {
  // your initalisation of the pano, add Hotspots,...
  // You can also set the window size here but you need to use the API
  vr.pano.setWindowSize(500,380);
};
myLoader.addListener(myListener);
myLoader.loadClip("mypanorama.swf", vr);

I never managed to use loadMovie properly, so if you really want to use it you are on your own. The demo at http://gardengnomesoftware.com/samples/pano2qtvr/flashtour/ includes the .fla file with the complete source code.

Panorama API calls[edit]

After the panorama is initialized and loaded you can make the following API calls at runtime

Changing the view[edit]

<panoclip>.pano.getPan(); // returns the current pan angle
<panoclip>.pano.setPan(angle_in_degrees:Number); // sets the current pan angle
<panoclip>.pano.changePan(offset_in_degrees:Number); // change the current pan angle
 
<panoclip>.pano.getTilt(); // returns the current tilt angle
<panoclip>.pano.setTilt(angle_in_degrees:Number); // sets the current tilt angle
<panoclip>.pano.changeTilt(offset_in_degrees:Number); // change the current tilt angle
 
<panoclip>.pano.getFov(); // sets the current FoV
<panoclip>.pano.setFov(angle_in_degrees:Number); // sets the current FoV
<panoclip>.pano.changeFov(offset_in_degrees:Number); // change the current FoV
 
<panoclip>.pano.moveTo(pan:Number, tilt:Number, fov:Number, speed:Number ); // move to position

Changing the panorama window[edit]

<panoclip>.pano.setWindowSize(<width>,<height>); // sets the current panorama window size
<panoclip>.pano.setWindowPos(<x>,<y>); // sets the panorama window position

Hotspots[edit]

<panoclip>.pano.addHotspot(<id:String>,<pan:Number>,<tilt:Number>,<mc:MovieClip>); // Adds a Hotspot to the panorama

Basically only the _x and _y are moved by the pano so the depth of your movieclip defines for example the visibility. Also you can let the movieclip do what ever you want for example open a URL, change the color on mouse over.... animations will always run with the speed of the pano so don't expect wonders. On a normal PC this would result in 10-20 fps.

<panoclip>.pano.unloadHotspots(); // Remove references for all Hotspots

Video[edit]

If you like to play panoramic videos you can directly access the video object. The variables are:

<panoclip>.pano.video.connection // NetConnection object
<panoclip>.pano.video.stream // NetStream object
<panoclip>.pano.video.video // Video object

You can also bind a video at runtime with

<panoclip>.attachVideo(videoXML:String);

The videoXML has to be the same form as for the HTML based binding.

Example:

vr.attachVideo('<video url="video.flv"/>');

Others[edit]

Some other API calls that might be useful

<panoclip>.pano.setAutorotate(<speed:Number>,<delay:Number>,<return to horizon:Number>,<only in focus:Boolean>); 
// Allow interaction with the panorama (mouse/keyboard)
<panoclip>.pano.setLocked(<value:Boolean>); 
// change the Flash 9 quality for the current speed (in scripted movement)
<panoclip>.pano.setMeshDensity(<angular speed:Number>); 
// open a new panorama.swf within the current player, target can be "pan/tilt/fov"
<panoclip>.pano.openNext(<url:String>,<target:String>);

Change the default Hotspot handler[edit]

For panoramas with QuickTime like hotspots the following code allows to use your own handler.

Actionscript 3.0[edit]

import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
 
var loader:Loader = new Loader();
var url:String = "panorama.swf";
var urlReq:URLRequest = new URLRequest(url);
var vr:MovieClip; // panorama movieclip
 
// This is done after the swf is loaded.
function finished_loading (e:Event) {
}
 
function initHandler(event:Event):void {
	trace("initHandler: " + event);
	vr = MovieClip(loader.content); // cast 'DisplayObject' to 'MovieClip'
//	vr.isFlash10=false; // Disable Flash 10 rendering if the container is Flash 9
}
 
function initPanorama(e:Event) {
// check if the panorama object is available and initialize it
	if ((vr!=null) && (vr.pano!=null)) {
		removeEventListener( Event.ENTER_FRAME , initPanorama);
// Hotspot handlers
		vr.pano.onClickQtHotspot=function(id:Number,title:String,url:String,target:String) {
			// add your code here!
			trace("Area Hotspot:" + id + "," + title);
		}
		vr.pano.onClickHotspot=function(id:String,obj:Object,url:String,target:String) {
			// add your code here!
			trace("Point Hotspot:" + id);
		}
		vr.pano.onRollOverQtHotspot=function(id:Number,title:String,url:String,target:String) {
			trace("QtRollOver " + id + "," + title);
		} 
		vr.pano.onRollOutQtHotspot=function(id:Number,title:String,url:String,target:String) {
			trace("QtRollOut " + id + "," + title);
		}
	}
}
// call initPanorama every frame
addEventListener( Event.ENTER_FRAME , initPanorama);
 
// Tell the loader to call 'finished_loading' after the swf is loaded.
loader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, finished_loading);
// Tell the loader to call 'initHandler' after the swf is initialized.
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
loader.load(urlReq);
addChild(loader); // add your swf directly to the stage

Actionscript 2.0[edit]

Only for Flash 8 export in Pano2VR 2.x - deprecated

var vr:MovieClip = _root.createEmptyMovieClip("vr", 1);
vr._lockroot=true;
 
var myLoader = new MovieClipLoader();
var myListener = new Object();
 
myListener.onLoadInit = function () {
// callback after the pano is fully loaded   
  vr.pano.onClickQtHotspot=function(id:Number,title:String,url:String,target:String)     
  {
    // add your code here!
    trace(id + "," + title);
  }
};
myLoader.addListener(myListener);
myLoader.loadClip("mypanorama.swf", vr);

See also[edit]

Flash Output (Pano2VR)