# Code Snippets

## Rotating 360 degrees NonPhys

Awhile ago I stumbled upon Slerp, and I wanted to make a way to generate a list of rotations for doing a complete rotation.

(this is some of the UGLIEST code I have ever written, but it seems to work. Do not rely on it if you need precision.) <lsl> list GenerateRotationList(integer num) {

```   list RotationList = [];
rotation a = ZERO_ROTATION;
rotation b = llEuler2Rot(<0,0,180> * DEG_TO_RAD );
float interval = 2 / (float) num;
float i = interval;
for(; i <= 1; i += interval)
RotationList += slerp(a,b,i);

if(num % 2)
i = 1 - i + interval;
else
i = interval;
b = llEuler2Rot(<0,0,180.001> * DEG_TO_RAD );
for(; i <= 1; i += interval)
RotationList += slerp(b,a,i);
return RotationList;
```

} </lsl>

## SLURL Raster Image URL Generator

I was rather interested in the raster images provided within SL and SLURL.com so I decided to figure out how to replicate it in such a way that it could be incorporated into tools and/or services outside the standard fair offered by Linden Labs. At some point I may rewrite it to use PHP or offer tips to incorporate it into something like the WMS provider in MapGuide.

### PseudoCode

```
//grab the region coordinates and store them
\$RegionPos;

//1 Tile = 256m
\$TilePos = \$RegionPos/256.0;

//Fix the offset in the service
\$TilePos.y = 1279.0 - \$TilePos.y;

//genrate the URL, the 0 on the end may be a switch for gif/png, need to read up more on the SL map API
\$mapURL = "http://secondlife.com/apps/mapapi/grid/map_image/" \
+ Floor(\$TilePos.x) + "-" + Floor(\$TilePos.y) + "-1-0"
```

### LSL

<lsl> //SLURL Tile URL Generator - By Kerik Rau

//Based on the javascript from SLURL.com, merely an adaptation in LSL //It should only take a minute or 2 to export this into PHP or other languages

//SLURL uses WMS, I still want to look at incorporating it into something like Mapguide //I will need to look at the implementation to see if this would be easy or a pain

vector genTileVec(vector RegPos) {

```   //tiles are in a grid based on the regions, so 256m = 1 tile
RegPos /= 256.0;

//offset provided in the javascript, really 1278 + 1 (probably 0 -> 1 index difference?)
RegPos.y = 1279.0 - RegPos.y;
```
```   return RegPos;
```

}

string genMapURL() {

```   vector TilePos = genTileVec(llGetRegionCorner());

//should look like http://secondlife.com/apps/mapapi/grid/map_image/x-y-zoom-0
string mapURL = "http://secondlife.com/apps/mapapi/grid/map_image/";
mapURL += (string) llFloor(TilePos.x);
mapURL += "-";
mapURL += (string) llFloor(TilePos.y);

//the 3rd value is something to do with zoom, but only 1 seems to work with this
//the 4th value is undefined, omitting it works but I leave it in to match SLURL
mapURL += "-1-0";
return mapURL;
```

}

default {

```   state_entry()
{
llSetText("SLURL Raster Image URL Generator\nOpens the image of the current sim\n(in a browser)", <1,1,1>, 1);
}

touch_start(integer numdet)
{
integer i;
for(i = 0; i < numdet; ++i)