ThreeD.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.charting.themes.ThreeD"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  7. dojo._hasResource["dojox.charting.themes.ThreeD"] = true;
  8. dojo.provide("dojox.charting.themes.ThreeD");
  9. dojo.require("dojo.colors"); // for dojo.Color.sanitize()
  10. dojo.require("dojox.charting.Theme");
  11. dojo.require("dojox.charting.themes.gradientGenerator");
  12. dojo.require("dojox.charting.themes.PrimaryColors"); // as a baseline theme
  13. (function(){
  14. var dc = dojox.charting, themes = dc.themes, Theme = dc.Theme,
  15. gi = themes.gradientGenerator.generateGradientByIntensity,
  16. colors = ["#f00", "#0f0", "#00f", "#ff0", "#0ff", "#f0f"], // the same is in PrimaryColors
  17. defaultFill = {type: "linear", space: "shape", x1: 0, y1: 0, x2: 100, y2: 0},
  18. // 3D cylinder map is calculated using dojox.gfx3d
  19. cyl3dMap = [
  20. {o: 0.00, i: 174}, {o: 0.08, i: 231}, {o: 0.18, i: 237}, {o: 0.30, i: 231},
  21. {o: 0.39, i: 221}, {o: 0.49, i: 206}, {o: 0.58, i: 187}, {o: 0.68, i: 165},
  22. {o: 0.80, i: 128}, {o: 0.90, i: 102}, {o: 1.00, i: 174}
  23. ],
  24. hiliteIndex = 2, hiliteIntensity = 100, lumStroke = 50,
  25. cyl3dFills = dojo.map(colors, function(c){
  26. var fill = dojo.delegate(defaultFill),
  27. colors = fill.colors = themes.gradientGenerator.generateGradientByIntensity(c, cyl3dMap),
  28. hilite = colors[hiliteIndex].color;
  29. // add highlight
  30. hilite.r += hiliteIntensity;
  31. hilite.g += hiliteIntensity;
  32. hilite.b += hiliteIntensity;
  33. hilite.sanitize();
  34. return fill;
  35. });
  36. themes.ThreeD = themes.PrimaryColors.clone();
  37. themes.ThreeD.series.shadow = {dx: 1, dy: 1, width: 3, color: [0, 0, 0, 0.15]};
  38. themes.ThreeD.next = function(elementType, mixin, doPost){
  39. if(elementType == "bar" || elementType == "column"){
  40. // custom processing for bars and columns: substitute fills
  41. var index = this._current % this.seriesThemes.length,
  42. s = this.seriesThemes[index], old = s.fill;
  43. s.fill = cyl3dFills[index];
  44. var theme = Theme.prototype.next.apply(this, arguments);
  45. // cleanup
  46. s.fill = old;
  47. return theme;
  48. }
  49. return Theme.prototype.next.apply(this, arguments);
  50. };
  51. })();
  52. }