//>>built // wrapped by build app define("dojox/drawing/tools/Path", ["dijit","dojo","dojox"], function(dijit,dojo,dojox){ dojo.provide("dojox.drawing.tools.Path"); dojox.drawing.tools.Path = dojox.drawing.util.oo.declare( // summary: // Class for a drawable Path // dojox.drawing.stencil.Path, function(){ // summary: constructor this.pathMode = ""; this.currentPathMode = ""; this._started = false; this.oddEvenClicks = 0; }, { draws:true, onDown: function(obj){ if(!this._started){ this.onStartPath(obj); } }, makeSubPath: function(_closePath){ if(_closePath){ if(this.currentPathMode=="Q"){ this.points.push({ x:this.points[0].x, y:this.points[0].y }); } this.points.push({t:"Z"}); this.render(); } this.currentPathMode = ""; this.pathMode = "M"; }, onStartPath: function(obj){ this._started = true; this.revertRenderHit = this.renderHit; this.renderHit = false; this.closePath = false; this.mouse.setEventMode("PathEdit"); this.closePoint = {x:obj.x, y:obj.y}; this._kc1 = this.connect(this.keys, "onEsc", this, function(){ this.onCompletePath(false); }); this._kc2 = this.connect(this.keys, "onKeyUp", this, function(evt){ switch(evt.letter){ case "c": this.onCompletePath(true); break; case "l": this.pathMode = "L"; break; case "m": this.makeSubPath(false); break; case "q": this.pathMode = "Q"; break; case "s": this.pathMode = "S"; break; case "z": this.makeSubPath(true); break; } //console.log("KEY:", evt.letter); }); }, onCompletePath:function(_closePath){ this.remove(this.closeGuide, this.guide); var box = this.getBounds(); if(box.w2 && this.closeRadius>this.util.distance(obj.x, obj.y, this.closePoint.x, this.closePoint.y)){ this.onCompletePath(true); }else { var p = { x:obj.x, y:obj.y }; this.oddEvenClicks++; if(this.currentPathMode != this.pathMode){ if(this.pathMode=="Q"){ p.t = "Q"; this.oddEvenClicks = 0; }else if(this.pathMode=="L"){ p.t = "L"; }else if(this.pathMode=="M"){ p.t = "M"; this.closePoint = {x:obj.x, y:obj.y}; } this.currentPathMode = this.pathMode; } this.points.push(p); if(this.points.length>1){ this.remove(this.guide); this.render(); } } //console.log(this.stringPath); }, createGuide: function(obj){ if(!this.points.length){ return; } var realPoints = [].concat(this.points); var pt = { x:obj.x, y:obj.y }; if(this.currentPathMode=="Q" && this.oddEvenClicks % 2){ // On a Q curve, every other click needs to be a // straight line - the inbetween Q coords don't render pt.t = "L"; // this is not permanent } this.points.push(pt); this.render(); this.points = realPoints; var dist = this.util.distance(obj.x, obj.y, this.closePoint.x, this.closePoint.y); if(this.points.length>1){ if(distthis.closeRadius && this.closeGuide){ this.remove(this.closeGuide); this.closeGuide = null; } } }, onMove: function(obj){ if(!this._started){ return; } this.createGuide(obj); }, onDrag: function(obj){ if(!this._started){ return; } this.createGuide(obj); } } ); dojox.drawing.tools.Path.setup = { // summary: See Base ToolsSetup // name:"dojox.drawing.tools.Path", tooltip:"Path Tool", iconClass:"iconLine" }; dojox.drawing.register(dojox.drawing.tools.Path.setup, "tool"); });