Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.charting.Chart3D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.charting.Chart3D"] = true;dojo.provide("dojox.charting.Chart3D");dojo.require("dojox.gfx3d");(function(){var observerVector = {x: 0, y: 0, z: 1}, v = dojox.gfx3d.vector, n = dojox.gfx.normalizedLength;dojo.declare("dojox.charting.Chart3D", null, {constructor: function(node, lights, camera, theme){// setup a viewthis.node = dojo.byId(node);this.surface = dojox.gfx.createSurface(this.node, n(this.node.style.width), n(this.node.style.height));this.view = this.surface.createViewport();this.view.setLights(lights.lights, lights.ambient, lights.specular);this.view.setCameraTransform(camera);this.theme = theme;// initialize internal variablesthis.walls = [];this.plots = [];},// public APIgenerate: function(){return this._generateWalls()._generatePlots();},invalidate: function(){this.view.invalidate();return this;},render: function(){this.view.render();return this;},addPlot: function(plot){return this._add(this.plots, plot);},removePlot: function(plot){return this._remove(this.plots, plot);},addWall: function(wall){return this._add(this.walls, wall);},removeWall: function(wall){return this._remove(this.walls, wall);},// internal API_add: function(array, item){if(!dojo.some(array, function(i){ return i == item; })){array.push(item);this.view.invalidate();}return this;},_remove: function(array, item){var a = dojo.filter(array, function(i){ return i != item; });return a.length < array.length ? (array = a, this.invalidate()) : this;},_generateWalls: function(){for(var i = 0; i < this.walls.length; ++i){if(v.dotProduct(observerVector, this.walls[i].normal) > 0){this.walls[i].generate(this);}}return this;},_generatePlots: function(){var depth = 0, m = dojox.gfx3d.matrix, i = 0;for(; i < this.plots.length; ++i){depth += this.plots[i].getDepth();}for(--i; i >= 0; --i){var scene = this.view.createScene();scene.setTransform(m.translate(0, 0, -depth));this.plots[i].generate(this, scene);depth -= this.plots[i].getDepth();}return this;}});})();}