summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/map/tools/arrow.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/map/tools/arrow.js')
-rw-r--r--public/assets/javascripts/rectangles/engine/map/tools/arrow.js47
1 files changed, 41 insertions, 6 deletions
diff --git a/public/assets/javascripts/rectangles/engine/map/tools/arrow.js b/public/assets/javascripts/rectangles/engine/map/tools/arrow.js
index 00478d4..0b0557e 100644
--- a/public/assets/javascripts/rectangles/engine/map/tools/arrow.js
+++ b/public/assets/javascripts/rectangles/engine/map/tools/arrow.js
@@ -3,16 +3,33 @@
var ArrowTool = MapTool.extend(function(base){
var exports = {}
- var selected_point = null, original_point = null, selected_shape = null
+ 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) {
+ 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")
@@ -28,6 +45,15 @@ var ArrowTool = MapTool.extend(function(base){
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"
@@ -35,13 +61,22 @@ var ArrowTool = MapTool.extend(function(base){
}
exports.drag = function(e, cursor){
- selected_point.a = original_point.a + cursor.x.magnitude()
- selected_point.b = original_point.b + cursor.y.magnitude()
- selected_shape.rebuild()
+ 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 = original_point = null
+ selected_point = selected_shape = selected_segment = original_point = null
}
return exports