|
Table of Contents
Scripts > SapphirePanoramaAVI
CommentsTo use this script, first open Sapphire and move the camera to the vantage point from which you would like the panorama generated. Then, in the Sapphire menu, select the 'Scripts→Run script file' menu option, and select this script file. Script contents//
// Title: Sapphire Panorama AVI script
// Author: Aaron Torpy
// Date: 5 Mar 2009
// URL: http://www.bundysoft.com/wiki/doku.php?id=tutorials:l3dt:panorama
// Updated: 14 Jul 2011
//
hvar pHF
set pHF <GetMap "HF">
float scale
set scale <map.GetHorizScale pHF>
// create settings variables
float ls.PositionX
float ls.PositionY
float ls.Heading
float ls.Altitude
int ls.nFrames
// initialise settings with default values
set ls.PositionX <div <map.GetWidth pHF> 2>
set ls.PositionY <div <map.GetWidth pHF> 2>
set ls.nFrames 360
set ls.Altitude 500
set ls.Heading 0
// get position from Sapphire if open
if <Sapphire.IsShown>
set ls.PositionX <Sapphire.Camera.GetPosX>
set ls.PositionY <Sapphire.Camera.GetPosY>
set ls.Altitude <Sapphire.Camera.GetPosZ>
set ls.Altitude <mul ls.Altitude scale> // convert from reduced units to metres
set ls.Heading <Sapphire.Camera.GetAzim>
set ls.Heading <RadToDeg ls.Heading> // convert to degrees
endif
// ask user for settings
if <not <EditUI &ls "Enter movie settings">>
return false
endif
// ask user for filename
filesel FS
filesel.Init &FS false NULL "AVI movie file (*.avi)|*.avi|" "avi" NULL
if <not <EditUI &FS "Enter output file">>
return false
endif
string FileName
set FileName <filesel.GetPathA &FS>
float alt
set alt <div ls.Altitude scale>
float azim
set azim <DegToRad ls.Heading>
Sapphire.ShowWnd
Sapphire.SetPause true
Sapphire.Camera.SetElev 0
Sapphire.Camera.SetAzim azim
Sapphire.Camera.SetPos3d ls.PositionX ls.PositionY alt
// calculate angle step size
float dtheta
set dtheta <div <DegToRad 360> ls.nFrames>
// prepare progres box
progbox prog
progbox.SetTitle &prog "Recording movie"
progbox.ShowWnd &prog
// prepare some variables for the loop
int k kmax
set k 0
set kmax ls.nFrames
map Frame
// run a few frames to make Sapphire settle
do
Sapphire.RenderFrame 0
while <islt <incr k> 10>
// now run the panorama loop
set k 0
do
// update progress display
progbox.SetProgress &prog k kmax
Sapphire.Camera.SetAzim azim // set camera angle
Sapphire.RenderFrame 0 // render a frame
Sapphire.ScreenCap2 &Frame // capture frame to 'Frame' image
// if first frame, initialise AVI stream
if <iseq k 0>
assert <file.AVI_VFW.OpenStream FileName <map.GetWidth &Frame> <map.GetHeight &Frame> 25 "CVID"> "Error: cannot open file stream"
endif
file.AVI_VFW.AddFrame &Frame // add 'Frame' image to AVI stream
// increment azimuth
set azim <add azim dtheta>
while <islt <incr k> kmax>
// finalise AVI stream
file.AVI_VFW.CloseStream
// finish by setting Sapphire free
if <Sapphire.IsPaused>
Sapphire.SetPause false
endif
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Share Alike 3.0 Unported
|