jui.define("chart.draw", [ "util.base" ], function(_) { /** * @class chart.draw * @alias Draw * @requires util.base * @requires jquery * */ var Draw = function() { /** * @method drawBefore * * run before draw object * */ /** * @method draw * * draw object * * @return {Object} * */ /** * @method drawAfter * * run after draw object */ /** * @method drawAnimate * * implements animate code after draw object */ /** * @method render * * 모든 Draw 객체는 render 함수를 통해서 그려진다. * */ this.render = function() { if(!_.typeCheck("function", this.draw)) { throw new Error("JUI_CRITICAL_ERR: 'draw' method must be implemented"); } // Call drawBefore method if(_.typeCheck("function", this.drawBefore)) { this.drawBefore(); } // Call draw method (All) var obj = this.draw(); // Call drawAnimate method if(_.typeCheck("function", this.drawAnimate)) { var draw = this.grid || this.brush || this.widget || this.map; if(draw.animate !== false) { this.drawAnimate(obj); } } // Call drawAfter method if(_.typeCheck("function", this.drawAfter)) { this.drawAfter(obj); } return obj; } /** * @method format * Get a default format callback of draw object. * * @return {Function} */ this.format = function() { var draw = this.grid || this.brush || this.widget, callback = draw.format || this.chart.format; return callback.apply(this.chart, arguments); } /** * @method balloonPoints * * 말풍선 그리그 메소드 * * @param {String} type * @param {Number} w * @param {Number} h * @param {Number} anchor * @return {String} */ this.balloonPoints = function(type, w, h, anchor) { var points = []; if(type == "top") { points.push([ 0, 0 ].join(",")); points.push([ w, 0 ].join(",")); points.push([ w, h ].join(",")); points.push([ (w / 2) + (anchor / 2), h ].join(",")); points.push([ (w / 2), h + anchor ].join(",")); points.push([ (w / 2) - (anchor / 2), h ].join(",")) points.push([ 0, h ].join(",")); points.push([ 0, 0 ].join(",")); } else if(type == "bottom") { points.push([ 0, anchor ].join(",")); points.push([ (w / 2) - (anchor / 2), anchor ].join(",")); points.push([ (w / 2), 0 ].join(",")); points.push([ (w / 2) + (anchor / 2), anchor ].join(",")); points.push([ w, anchor ].join(",")); points.push([ w, anchor + h ].join(",")) points.push([ 0, anchor + h ].join(",")); points.push([ 0, anchor ].join(",")); } else if(type == "left") { points.push([ 0, 0 ].join(",")); points.push([ w, 0 ].join(",")); points.push([ w, (h / 2) - (anchor / 2) ].join(",")); points.push([ w + anchor, (h / 2) ].join(",")); points.push([ w, (h / 2) + (anchor / 2) ].join(",")); points.push([ w, h ].join(",")); points.push([ 0, h ].join(",")); points.push([ 0, 0 ].join(",")); } else if(type == "right") { points.push([ 0, 0 ].join(",")); points.push([ w, 0 ].join(",")); points.push([ w, h ].join(",")); points.push([ 0, h ].join(",")); points.push([ 0, (h / 2) + (anchor / 2) ].join(",")); points.push([ 0 - anchor, (h / 2) ].join(",")); points.push([ 0, (h / 2) - (anchor / 2) ].join(",")); points.push([ 0, 0 ].join(",")); } else { points.push([ 0, 0 ].join(",")); points.push([ w, 0 ].join(",")); points.push([ w, h ].join(",")); points.push([ 0, h ].join(",")); points.push([ 0, 0 ].join(",")); } return points.join(" "); } /** * @method on * * chart.on() 을 쉽게 사용 할 수 있게 해주는 유틸리티 함수 * * @param {String} type event name * @param {Function} callback * @return {*} */ this.on = function(type, callback) { var self = this; return this.chart.on(type, function() { if(_.startsWith(type, "axis.") && _.typeCheck("integer", self.axis.index)) { var axis = self.chart.axis(self.axis.index), e = arguments[0]; if (_.typeCheck("object", axis)) { if (arguments[1] == self.axis.index) { callback.apply(self, [ e ]); } } } else { callback.apply(self, arguments); } }, "render"); } this.calculate3d = function() { var w = this.axis.area("width"), h = this.axis.area("height"), x = this.axis.area("x"), y = this.axis.area("y"), d = this.axis.depth, r = this.axis.degree, p = this.axis.perspective, list = arguments; if(!_.typeCheck("integer", r.x)) r.x = 0; if(!_.typeCheck("integer", r.y)) r.y = 0; if(!_.typeCheck("integer", r.z)) r.z = 0; for(var i = 0; i < list.length; i++) { list[i].perspective = p; list[i].rotate(Math.max(w, h, d), r, x + (w/2), y + (h/2), d/2); } } } Draw.setup = function() { return { /** @cfg {String} [type=null] Specifies the type of a widget/brush/grid to be added.*/ type: null, /** @cfg {Boolean} [animate=false] Run the animation effect.*/ animate: false } } return Draw; });