Map.UI = Map.UI || {} Map.UI.Ortho = function(map){ var base = this base.creating = base.dragging = base.resizing = false base.mouse = new mouse({ el: map.el, down: function(e, cursor){ cursor.x.div(map.dimensions.a).add(0.5).mul(map.dimensions.a / map.zoom).add(map.center.a) cursor.y.div(map.dimensions.b).sub(0.5).mul(map.dimensions.b / map.zoom).sub(map.center.b) // compare to initial point var p = new vec2( cursor.x.a, cursor.y.a ) if (placing) { if (points.length > 2 && points[0].distanceTo( p ) < 10/map.zoom) { points.push( points[0].clone() ) placing = false add_mx_polyline(points) } else { points.push( p ) mx_points.push( add_mx_point(p) ) } } else { placing = true points = [] points.push( p ) mx_points.push( add_mx_point(p) ) } }, move: function(e, cursor){ cursor.x.div(map.dimensions.a).add(0.5).mul(map.dimensions.a / map.zoom).add(map.center.a) cursor.y.div(map.dimensions.b).sub(0.5).mul(map.dimensions.b / map.zoom).sub(map.center.b) last_point = new vec2( cursor.x.a, cursor.y.a ) if (placing && points.length > 1 && points[0].distanceTo( last_point ) < 10/map.zoom) { document.body.style.cursor = "pointer" last_point.assign(points[0]) cursor.x.a = cursor.x.b = last_point.a cursor.y.a = cursor.y.b =last_point.b } else { document.body.style.cursor = "crosshair" } }, drag: function(e, cursor){ cursor.x.b = ((cursor.x.b/map.dimensions.a)+0.5) * map.dimensions.a / map.zoom + map.center.a cursor.y.b = ((cursor.y.b/map.dimensions.b)-0.5) * map.dimensions.b / map.zoom - map.center.b }, up: function(e, cursor, new_cursor){ new_cursor.x.div(map.dimensions.a).add(0.5).mul(map.dimensions.a / map.zoom).add(map.center.a) new_cursor.y.div(map.dimensions.b).sub(0.5).mul(map.dimensions.b / map.zoom).sub(map.center.b) } }) base.wheel = new wheel({ el: map.el, update: mousewheel, }) function mousewheel (e, deltaY, deltaX){ map.set_zoom(map.zoom_exponent - deltaY/20) } }