Difference between revisions of "Google Charts"
Jump to navigation
Jump to search
(<.< i couldn't resist) |
m (<lsl> tag to <source>) |
||
(One intermediate revision by one other user not shown) | |||
Line 5: | Line 5: | ||
[http://chart.apis.google.com/chart?chs=200x125&chd=s:99WPHmWPPWHetWe1mtmmemmte&cht=lc&chxt=x,y&chxl=0:|4AM|4PM|4AM|1:||8 Example] | [http://chart.apis.google.com/chart?chs=200x125&chd=s:99WPHmWPPWHetWe1mtmmemmte&cht=lc&chxt=x,y&chxl=0:|4AM|4PM|4AM|1:||8 Example] | ||
< | <source lang="lsl2"> | ||
string simpleEncode(list values, float min, float max) | |||
{ | { | ||
string text = ""; | string text = ""; | ||
float range = 244 / (min - max);//4 * 61 | float range = 244 / (min - max);//4 * 61 | ||
integer index = llGetListLength(values); | integer index = -llGetListLength(values); | ||
do | |||
{ | { | ||
integer type = llGetListEntryType(values, | integer type = llGetListEntryType(values, index); | ||
if(type == TYPE_FLOAT || type == TYPE_INTEGER) | if(type == TYPE_FLOAT || type == TYPE_INTEGER) | ||
text = llGetSubString(llIntegerToBase64((integer)(range * (min - llList2Float(values, index)))), 4, 4) + text; | text = llGetSubString(llIntegerToBase64((integer)(range * (min - llList2Float(values, index)))), 4, 4) + text; | ||
else | else | ||
text = "_" + text; | text = "_" + text; | ||
++index; | |||
} | } | ||
while (index); | |||
return text; | return text; | ||
} | } | ||
Line 27: | Line 32: | ||
if(value >= 10.0) | if(value >= 10.0) | ||
return llGetSubString(str, 0, -8); | return llGetSubString(str, 0, -8); | ||
integer i = -1; | integer i = -1; | ||
while(llGetSubString(str, i, i) == "0") --i; | while(llGetSubString(str, i, i) == "0") | ||
if(llGetSubString(str, i, i) == ".") --i; | --i; | ||
if(llGetSubString(str, i, i) == ".") | |||
--i; | |||
return llGetSubString(str, 0, i); | return llGetSubString(str, 0, i); | ||
} | } | ||
Line 37: | Line 47: | ||
integer min = llFloor(llListStatistics(LIST_STAT_MIN, values)); | integer min = llFloor(llListStatistics(LIST_STAT_MIN, values)); | ||
integer max = llCeil(llListStatistics(LIST_STAT_MAX, values)); | integer max = llCeil(llListStatistics(LIST_STAT_MAX, values)); | ||
string url = "http://chart.apis.google.com/chart" | string url = "http://chart.apis.google.com/chart" | ||
+ "?chs=200x125" | + "?chs=200x125" | ||
Line 43: | Line 54: | ||
+ "&chxt=x,y" | + "&chxt=x,y" | ||
+ "&chxl=0:"; | + "&chxl=0:"; | ||
integer | |||
integer index = -llGetListLength(captions); | |||
url += "|" + llEscapeURL(llList2String(captions, | do | ||
{ | |||
url += "|" + llEscapeURL(llList2String(captions, index)); | |||
++index; | |||
} | |||
while (index); | |||
url += "|1:"; | url += "|1:"; | ||
++yDivisions; | ++yDivisions; | ||
float range = max - min; | float range = max - min; | ||
url += "|" + cleanup((( | index = 1; | ||
do | |||
{ | |||
url += "|" + cleanup(((index * range) / yDivisions) + min); | |||
++index; | |||
} | |||
while (index <= yDivisions); | |||
return url; | return url; | ||
} | } | ||
Line 58: | Line 82: | ||
state_entry() | state_entry() | ||
{ | { | ||
llSay( | // PUBLIC_CHANNEL has the integer value 0 | ||
llSay(PUBLIC_CHANNEL, | |||
chartUrl([8,8,3,2,1,5,3,2,2,3,1,4,6,3,4,7,5,6,5,5,4,5,5,6,4], ["4AM", "4PM", "4AM"], 0)); | |||
} | } | ||
touch_start(integer total_number) | touch_start(integer total_number) | ||
{ | { | ||
llSay( | llSay(PUBLIC_CHANNEL, | ||
chartUrl([8,8,3,2,1,5,3,2,2,3,1,4,6,3,4,7,5,6,5,5,4,5,5,6,4], ["4AM", "4PM", "4AM"], 0)); | |||
} | } | ||
}</ | } | ||
</source> | |||
{{LSLC|Library|Google Charts}} | {{LSLC|Library|Google Charts}} | ||
{{LSLC|Examples|Google Charts}} | {{LSLC|Examples|Google Charts}} |
Latest revision as of 14:10, 24 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
This script allows you to take an existing list of values and represent it as a chart using Google's Chart API. The example here takes a list of visitors per hour and represents it as a bar chart. The simpleEncoding method provided by Google has been converted to LSL script.
string simpleEncode(list values, float min, float max)
{
string text = "";
float range = 244 / (min - max);//4 * 61
integer index = -llGetListLength(values);
do
{
integer type = llGetListEntryType(values, index);
if(type == TYPE_FLOAT || type == TYPE_INTEGER)
text = llGetSubString(llIntegerToBase64((integer)(range * (min - llList2Float(values, index)))), 4, 4) + text;
else
text = "_" + text;
++index;
}
while (index);
return text;
}
string cleanup(float value)
{
string str = (string)value;
if(value >= 10.0)
return llGetSubString(str, 0, -8);
integer i = -1;
while(llGetSubString(str, i, i) == "0")
--i;
if(llGetSubString(str, i, i) == ".")
--i;
return llGetSubString(str, 0, i);
}
string chartUrl(list values, list captions, integer yDivisions)
{
integer min = llFloor(llListStatistics(LIST_STAT_MIN, values));
integer max = llCeil(llListStatistics(LIST_STAT_MAX, values));
string url = "http://chart.apis.google.com/chart"
+ "?chs=200x125"
+ "&chd=s:" + simpleEncode(values, min, max)
+ "&cht=lc"
+ "&chxt=x,y"
+ "&chxl=0:";
integer index = -llGetListLength(captions);
do
{
url += "|" + llEscapeURL(llList2String(captions, index));
++index;
}
while (index);
url += "|1:";
++yDivisions;
float range = max - min;
index = 1;
do
{
url += "|" + cleanup(((index * range) / yDivisions) + min);
++index;
}
while (index <= yDivisions);
return url;
}
default
{
state_entry()
{
// PUBLIC_CHANNEL has the integer value 0
llSay(PUBLIC_CHANNEL,
chartUrl([8,8,3,2,1,5,3,2,2,3,1,4,6,3,4,7,5,6,5,5,4,5,5,6,4], ["4AM", "4PM", "4AM"], 0));
}
touch_start(integer total_number)
{
llSay(PUBLIC_CHANNEL,
chartUrl([8,8,3,2,1,5,3,2,2,3,1,4,6,3,4,7,5,6,5,5,4,5,5,6,4], ["4AM", "4PM", "4AM"], 0));
}
}