summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/map/tools/arrow.js
blob: 0b0557e8ae0e81c4f5e4f187183d12e67404c853 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// 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
})