123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- var query = null;
- function load() {
- selectDataType();
- loadCsvExample();
- loadJsonExample();
- loadJavascriptExample();
- loadGooglespreadsheetExample();
- loadDatasourceExample();
- draw();
- }
- /**
- * Upate the UI based on the currently selected datatype
- */
- function selectDataType() {
- }
- function round(value, decimals) {
- return parseFloat(value.toFixed(decimals));
- }
- function loadCsvExample() {
- var csv = "";
- // headers
- csv += '"x", "y", "value"\n';
- // create some nice looking data with sin/cos
- var steps = 30;
- var axisMax = 314;
- var axisStep = axisMax / steps;
- for (var x = 0; x < axisMax; x+=axisStep) {
- for (var y = 0; y < axisMax; y+=axisStep) {
- var value = Math.sin(x/50) * Math.cos(y/50) * 50 + 50;
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(value, 2) + '\n';
- }
- }
- document.getElementById("csvTextarea").innerHTML = csv;
- // also adjust some settings
- document.getElementById("style").value = "surface";
- document.getElementById("verticalRatio").value = "0.5";
- document.getElementById("xLabel").value = "x";
- document.getElementById("yLabel").value = "y";
- document.getElementById("zLabel").value = "value";
- document.getElementById("filterLabel").value = "";
- document.getElementById("legendLabel").value = "";
- drawCsv();
- }
- function loadCsvAnimationExample() {
- var csv = "";
- // headers
- csv += '"x", "y", "value", "time"\n';
- // create some nice looking data with sin/cos
- var steps = 20;
- var axisMax = 314;
- var tMax = 31;
- var axisStep = axisMax / steps;
- for (var t = 0; t < tMax; t++) {
- for (var x = 0; x < axisMax; x+=axisStep) {
- for (var y = 0; y < axisMax; y+=axisStep) {
- var value = Math.sin(x/50 + t/10) * Math.cos(y/50 + t/10) * 50 + 50;
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(value, 2) + ', ' + t + '\n';
- }
- }
- }
- document.getElementById("csvTextarea").innerHTML = csv;
- // also adjust some settings
- document.getElementById("style").value = "surface";
- document.getElementById("verticalRatio").value = "0.5";
- document.getElementById("animationInterval").value = 100;
- document.getElementById("xLabel").value = "x";
- document.getElementById("yLabel").value = "y";
- document.getElementById("zLabel").value = "value";
- document.getElementById("filterLabel").value = "time";
- document.getElementById("legendLabel").value = "";
- drawCsv();
- }
- function loadCsvLineExample() {
- var csv = "";
- // headers
- csv += '"sin(t)", "cos(t)", "t"\n';
- // create some nice looking data with sin/cos
- var steps = 100;
- var axisMax = 314;
- var tmax = 4 * 2 * Math.PI;
- var axisStep = axisMax / steps;
- for (t = 0; t < tmax; t += tmax / steps) {
- var r = 1;
- var x = r * Math.sin(t);
- var y = r * Math.cos(t);
- var z = t;
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + '\n';
- }
- document.getElementById("csvTextarea").innerHTML = csv;
- // also adjust some settings
- document.getElementById("style").value = "line";
- document.getElementById("verticalRatio").value = "1.0";
- document.getElementById("showPerspective").checked = false;
- document.getElementById("xLabel").value = "sin(t)";
- document.getElementById("yLabel").value = "cos(t)";
- document.getElementById("zLabel").value = "t";
- document.getElementById("filterLabel").value = "";
- document.getElementById("legendLabel").value = "";
- drawCsv();
- }
- function loadCsvMovingDotsExample() {
- var csv = "";
- // headers
- csv += '"x", "y", "z", "color value", "time"\n';
- // create some shortcuts to math functions
- var sin = Math.sin;
- var cos = Math.cos;
- var pi = Math.PI;
- // create the animation data
- var tmax = 2.0 * pi;
- var tstep = tmax / 75;
- var dotCount = 1; // set this to 1, 2, 3, 4, ...
- for (var t = 0; t < tmax; t += tstep) {
- var tgroup = parseFloat(t.toFixed(2));
- var value = t;
- // a dot in the center
- var x = 0;
- var y = 0;
- var z = 0;
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n';
- // one or multiple dots moving around the center
- for (var dot = 0; dot < dotCount; dot++) {
- var tdot = t + 2*pi * dot / dotCount;
- //data.addRow([sin(tdot), cos(tdot), sin(tdot), value, tgroup]);
- //data.addRow([sin(tdot), -cos(tdot), sin(tdot + tmax*1/2), value, tgroup]);
- var x = sin(tdot);
- var y = cos(tdot);
- var z = sin(tdot);
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n';
- var x = sin(tdot);
- var y = -cos(tdot);
- var z = sin(tdot + tmax*1/2);
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n';
- }
- }
- document.getElementById("csvTextarea").innerHTML = csv;
- // also adjust some settings
- document.getElementById("style").value = "dot-color";
- document.getElementById("verticalRatio").value = "1.0";
- document.getElementById("animationInterval").value = "35";
- document.getElementById("animationAutoStart").checked = true;
- document.getElementById("showPerspective").checked = true;
- document.getElementById("xLabel").value = "x";
- document.getElementById("yLabel").value = "y";
- document.getElementById("zLabel").value = "z";
- document.getElementById("filterLabel").value = "time";
- document.getElementById("legendLabel").value = "color value";
- drawCsv();
- }
- function loadCsvColoredDotsExample() {
- var csv = "";
- // headers
- csv += '"x", "y", "z", "distance"\n';
- // create some shortcuts to math functions
- var sqrt = Math.sqrt;
- var pow = Math.pow;
- var random = Math.random;
- // create the animation data
- var imax = 200;
- for (var i = 0; i < imax; i++) {
- var x = pow(random(), 2);
- var y = pow(random(), 2);
- var z = pow(random(), 2);
- var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2));
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(dist, 2)+ '\n';
- }
- document.getElementById("csvTextarea").innerHTML = csv;
- // also adjust some settings
- document.getElementById("style").value = "dot-color";
- document.getElementById("verticalRatio").value = "1.0";
- document.getElementById("showPerspective").checked = true;
- document.getElementById("xLabel").value = "x";
- document.getElementById("yLabel").value = "y";
- document.getElementById("zLabel").value = "value";
- document.getElementById("legendLabel").value = "distance"
- document.getElementById("filterLabel").value = "";
- drawCsv();
- }
- function loadCsvSizedDotsExample() {
- var csv = "";
- // headers
- csv += '"x", "y", "z", "range"\n';
- // create some shortcuts to math functions
- var sqrt = Math.sqrt;
- var pow = Math.pow;
- var random = Math.random;
- // create the animation data
- var imax = 200;
- for (var i = 0; i < imax; i++) {
- var x = pow(random(), 2);
- var y = pow(random(), 2);
- var z = pow(random(), 2);
- var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2));
- var range = sqrt(2) - dist;
- csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(range, 2)+ '\n';
- }
- document.getElementById("csvTextarea").innerHTML = csv;
- // also adjust some settings
- document.getElementById("style").value = "dot-size";
- document.getElementById("verticalRatio").value = "1.0";
- document.getElementById("showPerspective").checked = true;
- document.getElementById("xLabel").value = "x";
- document.getElementById("yLabel").value = "y";
- document.getElementById("zLabel").value = "z";
- document.getElementById("legendLabel").value = "range";
- document.getElementById("filterLabel").value = "";
- drawCsv();
- }
- function loadJsonExample() {
- }
- function loadJavascriptExample() {
- }
- function loadJavascriptFunctionExample() {
- }
- function loadGooglespreadsheetExample() {
- }
- function loadDatasourceExample() {
- }
- /**
- * Retrieve teh currently selected datatype
- * @return {string} datatype
- */
- function getDataType() {
- return "csv";
- }
- /**
- * Retrieve the datatable from the entered contents of the csv text
- * @param {boolean} [skipValue] | if true, the 4th element is a filter value
- * @return {vis.DataSet}
- */
- function getDataCsv() {
- var csv = document.getElementById("csvTextarea").value;
- // parse the csv content
- var csvArray = csv2array(csv);
- var data = new vis.DataSet();
- var skipValue = false;
- if (document.getElementById("filterLabel").value != "" && document.getElementById("legendLabel").value == "") {
- skipValue = true;
- }
- // read all data
- for (var row = 1; row < csvArray.length; row++) {
- if (csvArray[row].length == 4 && skipValue == false) {
- data.add({x:parseFloat(csvArray[row][0]),
- y:parseFloat(csvArray[row][1]),
- z:parseFloat(csvArray[row][2]),
- style:parseFloat(csvArray[row][3])});
- }
- else if (csvArray[row].length == 4 && skipValue == true) {
- data.add({x:parseFloat(csvArray[row][0]),
- y:parseFloat(csvArray[row][1]),
- z:parseFloat(csvArray[row][2]),
- filter:parseFloat(csvArray[row][3])});
- }
- else if (csvArray[row].length == 5) {
- data.add({x:parseFloat(csvArray[row][0]),
- y:parseFloat(csvArray[row][1]),
- z:parseFloat(csvArray[row][2]),
- style:parseFloat(csvArray[row][3]),
- filter:parseFloat(csvArray[row][4])});
- }
- else {
- data.add({x:parseFloat(csvArray[row][0]),
- y:parseFloat(csvArray[row][1]),
- z:parseFloat(csvArray[row][2]),
- style:parseFloat(csvArray[row][2])});
- }
- }
- return data;
- }
- /**
- * remove leading and trailing spaces
- */
- function trim(text) {
- while (text.length && text.charAt(0) == ' ')
- text = text.substr(1);
- while (text.length && text.charAt(text.length-1) == ' ')
- text = text.substr(0, text.length-1);
- return text;
- }
- /**
- * Retrieve the datatable from the entered contents of the javascript text
- * @return {vis.DataSet}
- */
- function getDataJson() {
- var json = document.getElementById("jsonTextarea").value;
- var data = new google.visualization.DataTable(json);
- return data;
- }
- /**
- * Retrieve the datatable from the entered contents of the javascript text
- * @return {vis.DataSet}
- */
- function getDataJavascript() {
- var js = document.getElementById("javascriptTextarea").value;
- eval(js);
- return data;
- }
- /**
- * Retrieve the datatable from the entered contents of the datasource text
- * @return {vis.DataSet}
- */
- function getDataDatasource() {
- }
- /**
- * Retrieve a JSON object with all options
- */
- function getOptions() {
- var options = {
- width: document.getElementById("width").value,
- height: document.getElementById("height").value,
- style: document.getElementById("style").value,
- showAnimationControls: (document.getElementById("showAnimationControls").checked != false),
- showGrid: (document.getElementById("showGrid").checked != false),
- showXAxis: (document.getElementById("showXAxis").checked != false),
- showYAxis: (document.getElementById("showYAxis").checked != false),
- showZAxis: (document.getElementById("showZAxis").checked != false),
- showPerspective: (document.getElementById("showPerspective").checked != false),
- showLegend: (document.getElementById("showLegend").checked != false),
- showShadow: (document.getElementById("showShadow").checked != false),
- keepAspectRatio: (document.getElementById("keepAspectRatio").checked != false),
- verticalRatio: Number(document.getElementById("verticalRatio").value) || undefined,
- animationInterval: Number(document.getElementById("animationInterval").value) || undefined,
- xLabel: document.getElementById("xLabel").value,
- yLabel: document.getElementById("yLabel").value,
- zLabel: document.getElementById("zLabel").value,
- filterLabel: document.getElementById("filterLabel").value,
- legendLabel: document.getElementById("legendLabel").value,
- animationPreload: (document.getElementById("animationPreload").checked != false),
- animationAutoStart:(document.getElementById("animationAutoStart").checked != false),
- xCenter: document.getElementById("xCenter").value,
- yCenter: document.getElementById("yCenter").value,
- xMin: Number(document.getElementById("xMin").value) || undefined,
- xMax: Number(document.getElementById("xMax").value) || undefined,
- xStep: Number(document.getElementById("xStep").value) || undefined,
- yMin: Number(document.getElementById("yMin").value) || undefined,
- yMax: Number(document.getElementById("yMax").value) || undefined,
- yStep: Number(document.getElementById("yStep").value) || undefined,
- zMin: Number(document.getElementById("zMin").value) || undefined,
- zMax: Number(document.getElementById("zMax").value) || undefined,
- zStep: Number(document.getElementById("zStep").value) || undefined,
- valueMin: Number(document.getElementById("valueMin").value) || undefined,
- valueMax: Number(document.getElementById("valueMax").value) || undefined,
- xBarWidth: Number(document.getElementById("xBarWidth").value) || undefined,
- yBarWidth: Number(document.getElementById("yBarWidth").value) || undefined
- };
- return options;
- }
- /**
- * Redraw the graph with the entered data and options
- */
- function draw() {
- return drawCsv();
- }
- function drawCsv() {
- // retrieve data and options
- var data = getDataCsv();
- var options = getOptions();
- // Creat a graph
- var graph = new vis.Graph3d(document.getElementById('graph'), data, options);
- }
- function drawJson() {
- // retrieve data and options
- var data = getDataJson();
- var options = getOptions();
- // Creat a graph
- var graph = new vis.Graph3d(document.getElementById('graph'), data, options);
- }
- function drawJavascript() {
- // retrieve data and options
- var data = getDataJavascript();
- var options = getOptions();
- // Creat a graph
- var graph = new vis.Graph3d(document.getElementById('graph'), data, options);
- }
- function drawGooglespreadsheet() {
- // Instantiate our graph object.
- drawGraph = function(response) {
- document.getElementById("draw").disabled = "";
- if (response.isError()) {
- error = 'Error: ' + response.getMessage();
- document.getElementById('graph').innerHTML =
- "<span style='color: red; font-weight: bold;'>" + error + "</span>"; ;
- }
- // retrieve the data from the query response
- data = response.getDataTable();
- // specify options
- options = getOptions();
- // Instantiate our graph object.
- var graph = new vis.Graph3d(document.getElementById('graph'), data, options);
- }
- url = document.getElementById("googlespreadsheetText").value;
- document.getElementById("draw").disabled = "disabled";
- // send the request
- query && query.abort();
- query = new google.visualization.Query(url);
- query.send(drawGraph);
- }
- function drawDatasource() {
- // Instantiate our graph object.
- drawGraph = function(response) {
- document.getElementById("draw").disabled = "";
- if (response.isError()) {
- error = 'Error: ' + response.getMessage();
- document.getElementById('graph').innerHTML =
- "<span style='color: red; font-weight: bold;'>" + error + "</span>"; ;
- }
- // retrieve the data from the query response
- data = response.getDataTable();
- // specify options
- options = getOptions();
- // Instantiate our graph object.
- var graph = new vis.Graph3d(document.getElementById('graph'), data, options);
- };
- url = document.getElementById("datasourceText").value;
- document.getElementById("draw").disabled = "disabled";
- // if the entered url is a google spreadsheet url, replace the part
- // "/ccc?" with "/tq?" in order to retrieve a neat data query result
- if (url.indexOf("/ccc?")) {
- url.replace("/ccc?", "/tq?");
- }
- // send the request
- query && query.abort();
- query = new google.visualization.Query(url);
- query.send(drawGraph);
- }
|