summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/engine/map/tools/polyline.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/engine/map/tools/polyline.js')
-rw-r--r--public/assets/javascripts/rectangles/engine/map/tools/polyline.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/public/assets/javascripts/rectangles/engine/map/tools/polyline.js b/public/assets/javascripts/rectangles/engine/map/tools/polyline.js
new file mode 100644
index 0000000..559aea8
--- /dev/null
+++ b/public/assets/javascripts/rectangles/engine/map/tools/polyline.js
@@ -0,0 +1,69 @@
+var PolylineTool = MapTool.extend(function (base) {
+ var exports = {}
+ exports.down = function(e, cursor){
+
+ // rightclick?
+ if (e.ctrlKey || e.which === 3) {
+ e.preventDefault()
+ e.stopPropagation()
+ if (map.ui.placing) {
+ // close polyline or cancel
+ map.ui.placing = false
+ if (line.points.length > 2) {
+ line.build()
+ }
+ else {
+ line.reset()
+ }
+ return
+ }
+ map.ui.tools.position.rightclick(e, cursor)
+ return
+ }
+
+ // compare to initial point
+ var p = last_point.clone()
+ if (map.ui.placing) {
+ if (line.canCloseWith(p)) {
+ line.close()
+ line.build()
+ map.ui.placing = false
+ }
+ else {
+ line.add(p)
+ }
+ }
+ else {
+ map.ui.placing = true
+ line = new Polyline ()
+ line.add(p)
+ }
+ }
+ exports.move = function(e, cursor){
+ last_point.a = cursor.x.a
+ last_point.b = cursor.y.a
+ if (map.ui.placing && line.canCloseWith(last_point)) {
+ document.body.style.cursor = "pointer"
+ last_point.assign(line.points[0])
+ cursor.x.a = cursor.x.b = last_point.a
+ cursor.y.a = cursor.y.b = last_point.b
+ return
+ }
+ var end_point = shapes.findClosestEndPoint(last_point)
+ if (end_point) {
+ document.body.style.cursor = "pointer"
+ last_point.assign(end_point.point)
+ cursor.x.a = cursor.x.b = last_point.a
+ cursor.y.a = cursor.y.b = last_point.b
+ return
+ }
+ else {
+ document.body.style.cursor = "crosshair"
+ }
+ }
+ exports.cancel = function(){
+ if (map.ui.placing) { line.reset() }
+ map.ui.placing = false
+ }
+ return exports
+}) \ No newline at end of file