[fusion-commits] r1817 - trunk/lib
svn_fusion at osgeo.org
svn_fusion at osgeo.org
Wed Mar 11 16:34:33 EDT 2009
Author: pagameba
Date: 2009-03-11 16:34:33 -0400 (Wed, 11 Mar 2009)
New Revision: 1817
Removed:
trunk/lib/CanvasTool.js
Log:
re #200, remove unnecessary CanvasTool base class.
Deleted: trunk/lib/CanvasTool.js
===================================================================
--- trunk/lib/CanvasTool.js 2009-03-11 20:33:51 UTC (rev 1816)
+++ trunk/lib/CanvasTool.js 2009-03-11 20:34:33 UTC (rev 1817)
@@ -1,947 +0,0 @@
-/**
- * Fusion.Tool.Canvas
- *
- * $Id$
- *
- * Copyright (c) 2007, DM Solutions Group Inc.
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/********************************************
- * Class: Fusion.Tool.Canvas
- *
- * Utility base class for drawing features on the map.
- * **********************************************************************/
-
-Fusion.Tool.Canvas = OpenLayers.Class({
- context: null,
- canvas: null,
- width: null,
- height: null,
-
- initializeCanvas: function() {
- this.context = null;
- this.canvas = null;
- this.width = null;
- this.height = null;
-
- this.mouseMoveCB = OpenLayers.Function.bindAsEventListener(this.mouseMove, this);
- this.mouseUpCB = OpenLayers.Function.bindAsEventListener(this.mouseUp, this);
- this.mouseDownCB = OpenLayers.Function.bindAsEventListener(this.mouseDown, this);
- this.dblClickCB = OpenLayers.Function.bindAsEventListener(this.dblClick, this);
-
- this.resizeCanvasFn = OpenLayers.Function.bind(this.resizeCanvas, this);
- },
-
- /**
- * (public) clearContext()
- *
- * wipe the slate clean
- */
- clearContext: function() {
- //console.log('Fusion.Tool.Canvas.clearContext');
- if (this.context) {
- this.context.clearRect(0,0,this.width,this.height);
- }
- },
-
- activateCanvas: function() {
- var map = this.getMap();
- map.registerForEvent(Fusion.Event.MAP_RESIZED, this.resizeCanvasFn);
- var domObj = map.getDomObj();
-
- var size = $(domObj).getContentBoxSize();
- this.width = size.width;
- this.height = size.height;
-
- /* create dynamic canvas */
- if (!this.canvas) {
- this.canvas = document.createElement('canvas');
-
- // we need to init this for IE
- if (typeof G_vmlCanvasManager != "undefined") {
- document.getElementsByTagName('BODY')[0].appendChild(this.canvas);
- G_vmlCanvasManager.initElement(this.canvas);
- this.canvas = document.getElementsByTagName('BODY')[0].lastChild;
- }
-
- this.canvas.id = 'featureDigitizer';
- this.canvas.style.position = 'absolute';
- this.canvas.style.top = '0px';
- this.canvas.style.left = '0px';
- this.canvas.style.width = this.width+'px';
- this.canvas.style.height = this.height+'px';
- this.canvas.width = this.width;
- this.canvas.height = this.height;
- this.canvas.style.zIndex = 99;
-
- }
-
- domObj.appendChild(this.canvas);
- if (!this.context) {
- this.context = this.canvas.getContext('2d');
- }
- this.canvas.style.width = this.width+'px';
- this.canvas.style.height = this.height+'px';
- this.canvas.width = this.width;
- this.canvas.height = this.height;
-
- map.observeEvent('mousemove', this.mouseMoveCB);
- map.observeEvent('mouseup', this.mouseUpCB);
- map.observeEvent('mousedown', this.mouseDownCB);
- map.observeEvent('dblclick', this.dblClickCB);
- },
-
- resizeCanvas: function() {
- var map = this.getMap();
- var domObj = map.getDomObj();
- var size = $(domObj).getContentBoxSize();
- this.width = size.width;
- this.height = size.height;
- this.canvas.style.width = this.width+'px';
- this.canvas.style.height = this.height+'px';
- this.canvas.width = this.width;
- this.canvas.height = this.height;
- },
-
- /**
- * (public) deactivate()
- *
- * deactivate the line digitizing tool
- */
- deactivateCanvas: function() {
- //console.log('Fusion.Tool.Canvas.deactivate');
- var map = this.getMap();
- map.deregisterForEvent(Fusion.Event.MAP_RESIZED, this.resizeCanvasFn);
- map.getDomObj().removeChild(this.canvas);
- this.context.clearRect(0,0,this.width,this.height);
- map.stopObserveEvent('mousemove', this.mouseMoveCB);
- map.stopObserveEvent('mouseup', this.mouseUpCB);
- map.stopObserveEvent('mousedown', this.mouseDownCB);
- map.stopObserveEvent('dblclick', this.dblClickCB);
- },
-
- /**
- * (public) mouseDown(e)
- *
- * handle the mouse down event
- *
- * @param e Event the event that happened on the mapObj
- */
- mouseDown: function(e) { },
-
- /**
- * (public) mouseUp(e)
- *
- * handle the mouse up event
- *
- * @param e Event the event that happened on the mapObj
- */
- mouseUp: function(e) { },
-
- /**
- * (public) mouseMove(e)
- *
- * handle the mouse move event
- *
- * @param e Event the event that happened on the mapObj
- */
- mouseMove: function(e) { },
-
- /**
- * (public) dblClick(e)
- *
- * handle the mouse dblclick event
- *
- * @param e Event the event that happened on the mapObj
- */
- dblClick: function(e) { }
-});
-
-/********************************************
- * Class: Fusion.Tool.Canvas.Point
- *
- * Utility base class for drawing point features on the map.
- * **********************************************************************/
-
-Fusion.Tool.Canvas.Point = OpenLayers.Class({
- center: null,
- radius: null,
- lineStyle: null,
- fillStyle: null,
-
- initialize: function(map) {
- this.center = new Fusion.Tool.Canvas.Node(0,0, map);
- this.radius = 5;
- this.lineStyle = new Fusion.Tool.Canvas.Style({lineWidth:2,strokeStyle:'rgba(0,0,0,1.0)'});
- this.fillStyle = new Fusion.Tool.Canvas.Style({fillStyle:'rgba(0,0,255, 0.5)'});
- this.segments = [];
-
- },
-
- setPoint: function(x,y) {
- this.center.set(x,y);
- },
-
- getPoint: function() {
- this.center.updateGeo();
- return {x:this.center.x, y:this.center.y};
- },
-
- draw: function( context ) {
- var x = this.center.px;
- var y = this.center.py;
- var radius = this.radius;
-
- this.fillStyle.apply(context);
- this.lineStyle.apply(context);
-
- context.beginPath();
- context.arc(x,y,radius, 0, 2*Math.PI, 1);
- context.closePath();
- context.fill();
- context.stroke();
-
- },
-
- getNodes: function() {
- return [this.center];
- },
-
- clean: function() {},
-
- updateGeo: function() {
- this.center.updateGeo();
- },
-
- updatePx: function() {
- this.center.updatePx();
- }
-});
-
-/********************************************
- * Class: Fusion.Tool.Canvas.Circle
- *
- * Utility base class for drawing circle features on the map.
- * **********************************************************************/
-
-Fusion.Tool.Canvas.Circle = OpenLayers.Class({
- map: null,
- center: null,
- radius: null,
- radiusPx: null,
- start: null,
- end: null,
- lineStyle: null,
- fillStyle: null,
-
- initialize: function(map) {
- this.map = map;
- this.center = new Fusion.Tool.Canvas.Node(0,0, map);
- this.radius = 1;
- this.lineStyle = new Fusion.Tool.Canvas.Style({lineWidth:2,strokeStyle:'rgba(0,0,0,1.0)'});
- this.fillStyle = new Fusion.Tool.Canvas.Style({fillStyle:'rgba(0,0,255, 0.5)'});
- this.segments = [];
- },
-
- setCenter: function(x,y) {
- this.center.set(x,y);
- },
-
- setRadius: function(r) {
- this.radius = Math.abs(r);
- this.radiusPx = this.map.geoToPixMeasure(this.radius);
- },
-
- draw: function( context ) {
- var x = this.center.px;
- var y = this.center.py;
- var radius = this.radiusPx;
- this.fillStyle.apply(context);
- this.lineStyle.apply(context);
-
- context.beginPath();
- if (this.start && this.end) {
- context.moveTo(x,y);
- var s = this.start;
- var e = this.end;
- if (s < e) {
- var t = s;
- s = e;
- e = t;
- }
- var sx = x + Math.sin(s) * radius;
- var sy = y - Math.cos(s) * radius;
- context.lineTo(sx,sy);
- context.arc(x,y,radius, s - Math.PI/2, e - Math.PI/2, 1);
- context.lineTo(x, y);
- } else {
- context.arc(x,y,radius, 0, 2*Math.PI, 1);
- }
- context.closePath();
- context.fill();
- context.stroke();
- },
-
- getNodes: function() {
- return [this.center];
- },
-
- clean: function() {},
-
- updateGeo: function() {
- this.center.updateGeo();
- this.radius = this.map.pixToGeoMeasure(this.radiusPx);
- },
-
- updatePx: function() {
- this.center.updatePx();
- this.radiusPx = this.map.geoToPixMeasure(this.radius);
- }
-});
-
-/********************************************
- * Class: Fusion.Tool.Canvas.Polygon
- *
- * Utility base class for drawing polygon features on the map.
- * **********************************************************************/
-
-Fusion.Tool.Canvas.Polygon = OpenLayers.Class({
- segments: null,
- lineStyle: null,
- fillStyle: null,
- map: null,
-
- initialize: function(map) {
- this.map = map;
- this.segments = [];
- this.lineStyle = new Fusion.Tool.Canvas.Style({lineWidth:2,strokeStyle:'rgba(0,0,0,1.0)'});
- this.fillStyle = new Fusion.Tool.Canvas.Style({fillStyle:'rgba(0,0,255, 0.5)'});
- },
-
- clean: function() {
- var nodes = this.getNodes();
- this.segments = [];
- var n1 = nodes[0];
- //console.log('n1: '+ n1);
- var n2 = nodes[1];
- for (var i=1; i<nodes.length;i++) {
- if (n1.x != n2.x || n1.y != n2.y) {
- this.addSegment(new Fusion.Tool.Canvas.Segment(n1,n2));
- //console.log('n2: '+ n2);
- n1 = n2;
- }
- n2 = nodes[i];
- }
-
- this.addSegment(new Fusion.Tool.Canvas.Segment(n1, nodes[0]));
- //console.log(this);
- },
-
- getNodes: function() {
- var nodes = [];
- nodes.push(this.segments[0].from);
- for (var i=0; i<this.segments.length; i++) {
- nodes.push(this.segments[i].to);
- }
- return nodes;
- },
-
- /*
- * reverse the nodes in the feature
- * and adjust segments
- */
- reverseNodes: function() {
- var nSegments = this.segments.length;
- if (!nSegments) {
- return;
- }
- //flip nodes on each segment
- for (var i=0; i < nSegments; i++) {
- var seg = this.segments[i];
- var tmp = seg.from;
- seg.from = seg.to;
- seg.to = tmp;
- };
- //reverse segment order
- this.segments.reverse();
- },
-
- /*
- * remove node from the nodes in this feature
- * and adjust segments
- */
- removeNode: function(node) {
- //end cases
- if (node == this.segments[0].from) {
- this.segments[0].from = null;
- this.segments.shift();
- this.segments[0].from = this.segments[this.segments.length - 1].to;
- return;
- }
- if (node == this.segments[this.segments.length -1].from) {
- this.segments[this.segments.length -1].from = null;
- this.segments.pop();
- this.segments[0].from = this.segments[this.segments.length - 1].to;
- return;
- }
- //general case
- for (var i=1; i < this.segments.length; i++) {
- if (node == this.segments[i].from){
- this.segments[i-1].to = this.segments[i].to;
- this.segments[i].from = null;
- this.segments.splice(i, 1);
- return;
- }
- };
-
- },
-
- draw: function( context ) {
- var x = this.segments[0].from.px;
- var y = this.segments[0].from.py;
- if (this.segments.length > 2) {
- /* draw closing line and fill */
-
- this.fillStyle.apply(context);
- context.beginPath();
- context.moveTo(x,y);
- for (var i=0; i<this.segments.length; i++) {
- var s = this.segments[i];
- context.lineTo(s.to.px, s.to.py);
- }
- context.lineTo(x,y); //closing line
- context.closePath();
- context.fill();
- }
- /* draw outline */
- this.lineStyle.apply(context);
- for (var i=0; i<this.segments.length; i++) {
- this.segments[i].draw(context);
- }
-
- var last = this.lastSegment();
- context.beginPath();
- context.moveTo(last.to.px,last.to.py);
- context.lineTo(x,y);
- context.stroke();
- },
-
- addSegment: function( s ) {
- s.normalStyle = this.lineStyle;
- this.segments[this.segments.length] = s;
- //console.log('add segment ' + s);
- },
-
- lastSegment: function() {
- return this.segments[this.segments.length-1];
- },
-
- /* find the segment with the given node as its end
- * @param Object node - the node at the end
- * @param Int tolerance - an optional tolerance in pixels
- * @return the segment or null if nothing is found.
- */
- segmentTo: function(node) {
- var margin = arguments.length > 1?arguments[1]:3;
- for (var i=0; i<this.segments.length; i++) {
- if (this.segments[i].hasTo(node, margin)) {
- return this.segments[i];
- }
- }
- return null;
- },
-
- /* find the segment with the given node as its start
- * @param Object node - the node at the start
- * @param Int tolerance - an optional tolerance in pixels
- * @return the segment or null if there is none.
- */
- segmentFrom: function(node) {
- var margin = arguments.length > 1?arguments[1]:3;
- for (var i=0; i<this.segments.length; i++) {
- if (this.segments[i].hasFrom(node, margin)) {
- return this.segments[i];
- }
- }
- return null;
- },
-
- /* extend an existing line by creating a new segment attached
- * to the last segment
- * @return the new segment
- */
- extendLine: function() {
- var last = this.lastSegment();
- var newNode = new Fusion.Tool.Canvas.Node(last.to.x, last.to.y, this.map);
- var newSegment = new Fusion.Tool.Canvas.Segment( last.to, newNode );
- this.addSegment(newSegment);
- return newSegment;
- },
-
- /* determine if the passed pixel coordinate is within this feature
- * @param point Object - {px,py} representation of point
- * @return true if the point is contained
- *
- * uses crossing test (Jordan Curve Theorem) algorithm discussed at
- * http://www.acm.org/tog/editors/erich/ptinpoly/
- */
- contains: function(node) {
- return true;
- },
-
-
- toString: function() {
- var szFeature = this.segments[0].from.toString();
- for (var i=0; i < this.segments.length; i++) {
- szFeature += ',' + this.segments[i].to.toString();
- }
- return 'POLYGON(' + szFeature + ')';
- },
-
- updateGeo: function() {
- for (var i=0; i < this.segments.length; i++) {
- this.segments[i].updateGeo();
- }
- },
-
- updatePx: function() {
- for (var i=0; i < this.segments.length; i++) {
- this.segments[i].updatePx();
- }
- }
-});
-
-/********************************************
- * Class: Fusion.Tool.Canvas.line
- *
- * Utility base class for drawing line features on the map.
- * **********************************************************************/
-
-Fusion.Tool.Canvas.Line = OpenLayers.Class({
- segments: null,
- lineStyle: null,
- map: null,
-
- initialize: function(map) {
- this.map = map;
- this.segments = [];
- this.lineStyle = new Fusion.Tool.Canvas.Style({strokeStyle:'rgba(0,0,0,1.0)'});
- },
-
- clean: function() {
- var nodes = this.getNodes();
- this.segments = [];
- var n1 = nodes[0];
- var n2 = nodes[1];
- for (var i=1; i<nodes.length;i++) {
- //console.log('n1: '+ n1);
- //console.log('n2: '+ n2);
- n2 = nodes[i];
- if (n1.x != n2.x || n1.y != n2.y) {
- this.addSegment(new Fusion.Tool.Canvas.Segment(n1,n2));
- n1 = n2;
- }
- }
- //console.log(this);
- },
-
- getNodes: function() {
- var nodes = [];
- nodes.push(this.segments[0].from);
- for (var i=0; i<this.segments.length; i++) {
- nodes.push(this.segments[i].to);
- }
- return nodes;
- },
-
- /*
- * reverse the nodes in the feature
- * and adjust segments
- */
- reverseNodes: function() {
- var nSegments = this.segments.length;
- if (!nSegments) {
- return;
- }
- //flip nodes on each segment
- for (var i=0; i < nSegments; i++) {
- var seg = this.segments[i];
- var tmp = seg.from;
- seg.from = seg.to;
- seg.to = tmp;
- };
- //reverse segment order
- this.segments.reverse();
- },
-
- /*
- * remove node from the nodes in this feature
- * and adjust segments
- */
- removeNode: function(node) {
- //end cases
- if (node == this.segments[0].from) {
- this.segments[0].from = null;
- this.segments.shift();
- return;
- }
- if (node == this.segments[this.segments.length -1].from) {
- this.segments[this.segments.length -1].from = null;
- this.segments.pop();
- return;
- }
- //general case
- for (var i=1; i < this.segments.length; i++) {
- if (node == this.segments[i].from){
- this.segments[i-1].to = this.segments[i].to;
- this.segments[i].from = null;
- this.segments.splice(i, 1);
- return;
- }
- };
-
- },
-
- draw: function( context ) {
- for (var i=0; i<this.segments.length; i++) {
- this.segments[i].draw(context);
- }
- },
-
- addSegment: function( s ) {
- s.normalStyle = this.lineStyle;
- this.segments[this.segments.length] = s;
- },
-
- lastSegment: function() {
- return this.segments[this.segments.length-1];
- },
-
- /* find the segment with the given node as its end
- * @param Object node - the node at the end
- * @param Int tolerance - an optional tolerance in pixels
- * @return the segment or null if nothing is found.
- */
- segmentTo: function(node) {
- var margin = arguments.length > 1?arguments[1]:3;
- for (var i=0; i<this.segments.length; i++) {
- if (this.segments[i].hasTo(node, margin)) {
- return this.segments[i];
- }
- }
- return null;
- },
-
- /* find the segment with the given node as its start
- * @param Object node - the node at the start
- * @param Int tolerance - an optional tolerance in pixels
- * @return the segment or null if there is none.
- */
- segmentFrom: function(node) {
- var margin = arguments.length > 1?arguments[1]:3;
- for (var i=0; i<this.segments.length; i++) {
- if (this.segments[i].hasFrom(node, margin)) {
- return this.segments[i];
- }
- }
- return null;
- },
-
- /* extend an existing line by creating a new segment attached
- * to the last segment
- * @return the new segment
- */
- extendLine: function() {
- var last = this.lastSegment();
- var newNode = new Fusion.Tool.Canvas.Node(last.to.x, last.to.y, this.map);
- var newSegment = new Fusion.Tool.Canvas.Segment( last.to, newNode );
- this.addSegment(newSegment);
- return newSegment;
- },
-
- updateGeo: function() {
- for (var i=0; i < this.segments.length; i++) {
- this.segments[i].updateGeo();
- }
- },
-
- updatePx: function() {
- for (var i=0; i < this.segments.length; i++) {
- this.segments[i].updatePx();
- }
- }
-});
-
-/********************************************
- * Class: Fusion.Tool.Canvas.Segment
- *
- * Utility base class for drawing line segments on the map.
- * **********************************************************************/
-
-Fusion.Tool.Canvas.Segment = OpenLayers.Class({
- from: null,
- to: null,
-
- initialize: function(from, to) {
- this.from = from;
- this.to = to;
- this.isEditing = false;
- this.normalStyle = new Fusion.Tool.Canvas.Style({lineWidth:1, strokeStyle:'rgba(0,0,0,1.0)'});
- this.editStyle = new Fusion.Tool.Canvas.Style({lineWidth:1, strokeStyle:'rgba(255,0,0,1.0)'});
- },
-
- /* returns true if the node is at the end of this segment
- * within the given margin
- * @return Bool true if found within margin, false otherwise
- */
- hasTo: function(node, margin) {
- return this.to.near({x:node.px, y:node.py}, margin);
- },
-
- /* returns true if the node is at the start of this segment
- * within the given margin
- * @return Bool true if found within margin, false otherwise
- */
- hasFrom: function(node, margin) {
- return this.from.near({x:node.px, y:node.py}, margin);
- },
-
- /* returns true if the given point falls along this segment
- * within the given margin
- * @return Bool true if found within margin, false otherwise
- */
- intersectsPoint: function(point, margin){
- //check bbox
- var minX = Math.min(this.to.px, this.from.px);
- var maxX = Math.max(this.to.px, this.from.px);
- if (point.x > maxX || point.x < minX){return false;};
- var maxY = Math.max(this.to.py, this.from.py);
- var minY = Math.min(this.to.py, this.from.py);
- if (point.y < minY || point.y > maxY){return false;};
-
- //determine slope
- var slope = parseFloat((maxY-minY))/(maxX-minX);
- var segY = slope * (point.x - minX) + minY;
- return (segY - margin < point.y && segY + margin > point.y);
-
- },
-
- setNormalStyle: function( style ) {
- this.normalStyle = style;
- },
-
- setEditStyle: function( style ) {
- this.editStyle = style;
- },
-
- draw: function( context ) {
- /* set up correct style */
- if (this.isEditing) {
- this.editStyle.apply(context);
- } else {
- this.normalStyle.apply(context);
- }
-
- /* draw segment */
- context.beginPath();
- context.moveTo(this.from.px, this.from.py);
- context.lineTo(this.to.px, this.to.py);
- context.closePath();
- context.stroke();
-
- /* draw nodes if editing */
- if (this.isEditing) {
- this.from.draw( context );
- this.to.draw( context );
- }
- },
-
- /* changes rendering style */
- setEditing: function(bEditing) {
- this.isEditing = bEditing;
- },
-
- toString: function() {
- return this.from.toString() + ', '+ this.to.toString();
- },
-
- updateGeo: function() {
- this.from.updateGeo();
- this.to.updateGeo();
- },
-
- updatePx: function() {
- this.from.updatePx();
- this.to.updatePx();
- }
-});
-
-/********************************************
- * Class: Fusion.Tool.Canvas.Node
- *
- * Utility base class to hold nodes that make up otherr features
- * **********************************************************************/
-
-Fusion.Tool.Canvas.Node = OpenLayers.Class({
- x: null,
- y: null,
- px: null,
- py: null,
- uid: null,
- map: null,
- counter: [0],
- isSelected: false,
-
- initialize: function(x,y, map) {
- this.map = map;
- this.set(x,y);
- var p = map.geoToPix(x, y);
- this.setPx(p.x, p.y);
- this.radius = 3;
- this.uid = this.counter[0];
- this.counter[0]++;
- this.normalStyle = new Fusion.Tool.Canvas.Style({lineWidth:1, strokeStyle:'rgba(0,0,0,1.0)'});
- this.selectedStyle = new Fusion.Tool.Canvas.Style({lineWidth:1, fillStyle:'rgba(255,0,0,1.0)',
- strokeStyle:'rgba(255,0,0,1.0)'});
- },
-
- set: function(x,y) {
- this.x = x;
- this.y = y;
- //update px position
- var p = this.map.geoToPix(x, y);
- this.setPx(p.x, p.y);
- },
-
- setPx: function(px, py) {
- this.px = px;
- this.py = py;
- },
-
- updateGeo: function() {
- if (!this.px || !this.py) {return;};
- var g = this.map.pixToGeo(this.px, this.py);
- this.set(g.x, g.y);
- },
-
- updatePx: function() {
- if (!this.x || !this.y) {return;};
- var p = this.map.geoToPix(this.x, this.y);
- this.setPx(p.x, p.y);
- },
-
- /* returns true if the supplied pixel position is
- * within the given tolerance
- * @return Bool true if found within margin, false otherwise
- */
- /*TODO: uses a square envelope for speed but could use radius
- *TODO: should support geographic tolerance
- */
- near: function(point, tolerance) {
- var minX = point.x - tolerance;
- var maxX = point.x + tolerance;
- var maxY = point.y + tolerance;
- var minY = point.y - tolerance;
- return ((this.px > minX && this.px < maxX) && (this.py > minY && this.py < maxY))?true:false;
- },
-
- /* returns true if this node is
- * within the given bbox
- * @param Array bbox - array of pixel coordinates to search within
- * @return Bool true if found within, false otherwise
- */
- within: function(bbox) {
- //TODO: handle > 2 coord pairs
- var minX = Math.min(bbox[0], bbox[2]);
- var maxX = Math.max(bbox[0], bbox[2]);
- var minY = Math.min(bbox[1], bbox[3]);
- var maxY = Math.max(bbox[1], bbox[3]);
- return ((this.px > minX && this.px < maxX) && (this.py > minY && this.py < maxY))?true:false;
- },
-
- /* draw a node on a canvas. */
- draw: function( context ) {
- /* set up correct style */
- if (this.isSelected) {
- this.selectedStyle.apply(context);
- } else {
- this.normalStyle.apply(context);
- }
-
- context.beginPath();
- context.arc(this.px, this.py, this.radius, 0, 2*Math.PI,1);
- context.closePath();
- context.stroke();
- if(this.isSelected){
- context.fill();
- };
- },
-
- /* changes rendering style */
- setSelected: function(bSelected) {
- this.isSelected = bSelected;
- },
-
- toString: function() {
- return '('+this.uid+') '+ this.x + ' ['+this.px+'px] '+ this.y+ ' ['+this.py+'px] ';
- }
-});
-
-/* encapsulate a context style */
-/********************************************
- * Class: Fusion.Tool.Canvas.Style
- *
- * Utility base class to encapsulate a context style.
- * **********************************************************************/
-
-Fusion.Tool.Canvas.Style = OpenLayers.Class({
- properties: ['fillStyle',
- 'globalAlpha',
- 'globalCompositeOperation',
- 'lineCap',
- 'lineJoin',
- 'lineWidth',
- 'miterLimit',
- 'shadowBlur',
- 'shadowColor',
- 'shadowOffsetX',
- 'shadowOffsetY',
- 'strokeStyle'],
-
- initialize: function( o ) {
- for (var i=0; i<this.properties.length; i++) {
- var p = this.properties[i];
- this[p] = o[p] ? o[p]:null;
- }
- },
-
- set: function( p, v ) {
- this[p] = v;
- },
-
- apply: function(context) {
- for (var i=0; i<this.properties.length; i++) {
- var p = this.properties[i];
- if (this[p]) {
- context[p] = this[p];
- }
- }
- }
-});
More information about the fusion-commits
mailing list