0byt3m1n1
Path:
/
data
/
applications
/
aps
/
phprojekt
/
6.0.6-0
/
standard
/
htdocs
/
htdocs
/
dojo
/
dojox
/
drawing
/
tools
/
[
Home
]
File: Path.js
/* Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ if(!dojo._hasResource["dojox.drawing.tools.Path"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojox.drawing.tools.Path"] = true; 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.w<this.minimumSize && box.h<this.minimumSize){ this.remove(this.hit, this.shape, this.closeGuide); this._started = false; this.mouse.setEventMode(""); this.setPoints([]); return; } if(_closePath){ if(this.currentPathMode=="Q"){ this.points.push({ x:this.points[0].x, y:this.points[0].y }); } this.closePath = true; } this.renderHit = this.revertRenderHit; this.renderedOnce = true; this.onRender(this); this.disconnect([this._kc1, this._kc2]); this.mouse.setEventMode(""); this.render(); //console.log(this.stringPath); }, onUp: function(/*EventObject*/obj){ //console.log(" Path UP", obj.mid, "within:", obj.withinCanvas) if(!this._started || !obj.withinCanvas){ return; } if(this.points.length>2 && 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(dist<this.closeRadius && !this.closeGuide){ var c = { cx:this.closePoint.x, cy:this.closePoint.y, rx:this.closeRadius, ry:this.closeRadius } this.closeGuide = this.container.createEllipse(c) .setFill(this.closeColor); }else if(dist>this.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"); }