// Tool used to move corners of polylines var ArrowTool = MapTool.extend(function(base){ var exports = {} var selected_point = null, selected_segment = null, original_point = null, selected_shape = null var src_points, dest_points exports.down = function(e, cursor){ last_point.a = cursor.x.a last_point.b = cursor.y.a var p = shapes.findClosestPoint(last_point) if (p && p.shape.type() !== "ortho") { selected_shape = p.shape selected_point = p.point original_point = selected_point.clone() return } var segment = shapes.findClosestSegment(last_point) if (segment) { document.body.style.cursor = "pointer" selected_segment = segment console.log(segment.head, segment.tail) selected_shape = segment.shape src_points = segment.shape.cloneSegment( segment ) dest_points = segment.shape.getSegment( segment ) last_point.a = segment.x last_point.b = segment.y cursor.x.a = cursor.x.b = last_point.a cursor.y.a = cursor.y.b = last_point.b } else { map.ui.set_drag_tool("position") } } exports.move = function(e, cursor){ last_point.a = cursor.x.a last_point.b = cursor.y.a var p = shapes.findClosestPoint(last_point) if (p) { document.body.style.cursor = "pointer" last_point.assign(p.point) cursor.x.a = cursor.x.b = last_point.a cursor.y.a = cursor.y.b = last_point.b return } var segment = shapes.findClosestSegment(last_point) if (segment) { document.body.style.cursor = "pointer" last_point.a = segment.x last_point.b = segment.y cursor.x.a = cursor.x.b = last_point.a cursor.y.a = cursor.y.b = last_point.b } else { document.body.style.cursor = "crosshair" } } exports.drag = function(e, cursor){ if (selected_point) { selected_point.a = original_point.a + cursor.x.magnitude() selected_point.b = original_point.b + cursor.y.magnitude() selected_shape.rebuild() } else if (selected_segment) { selected_shape.translateSegment( src_points, dest_points, cursor.x.magnitude(), cursor.y.magnitude() ) selected_shape.rebuild() } } exports.up = function(e, cursor){ selected_point = selected_shape = selected_segment = original_point = null } return exports })