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
})
|