diff options
Diffstat (limited to 'assets/javascripts/rectangles/app.js')
| -rw-r--r-- | assets/javascripts/rectangles/app.js | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/assets/javascripts/rectangles/app.js b/assets/javascripts/rectangles/app.js deleted file mode 100644 index 071dfe8..0000000 --- a/assets/javascripts/rectangles/app.js +++ /dev/null @@ -1,177 +0,0 @@ -window.ctx = window.rects = window.regions = window.w = window.h = null; - -var app = new function(){ - var canvas = document.createElement("canvas") - var ctx = window.ctx = canvas.getContext("2d") - var w = window.w = canvas.width = 500 - var h = window.h = canvas.height = 500 - var regions = [] - document.querySelector("#map").appendChild(canvas) - - function init(){ - bind() - animate() - } - function animate(){ - requestAnimationFrame(animate) - clear_canvas() - - if (modified) { - solve_rects() - } - draw_ruler() - draw_regions(regions) - draw_mouse(mouse) - z = false - } - - var rects = window.rects = [ - new rect(100,100, 300,300), - new rect(200,200, 400,400), - ] - - this.creating = false - this.dragging = false - - var modified = true - var mouse = new rect(0,0,0,0) - - function bind(){ - canvas.addEventListener("mousedown", function(e){ - var x = e.pageX, y = e.pageY - mouse = new rect (x,y) - if (e.shiftKey) { - mouse.quantize(10) - } - - var intersects = rects.filter(function(r){ return r.focused = r.contains(x,y) }) - // console.log(intersects) - - if (intersects.length){ - app.dragging = intersects[0] - } - else { - app.creating = true - } - if (e.shiftKey && app.dragging) { - app.dragging.quantize(10) - } - }) - canvas.addEventListener("mousemove", function(e){ - var x, y - if (e.shiftKey) { - x = quantize( e.pageX, 10 ) - y = quantize( e.pageY, 10 ) - } - else { - x = e.pageX - y = e.pageY - } - - mouse.x.b = x - mouse.y.b = y - - if (app.dragging) { - app.dragging.translation.a = mouse.x.magnitude() - app.dragging.translation.b = mouse.y.magnitude() - } - else if (app.creating) { - mouse.x.b = x - mouse.y.b = y - } - else { - mouse.x.a = mouse.x.b - mouse.y.a = mouse.y.b - } - }) - document.addEventListener("mouseup", function(e){ - if (app.creating) { - if (mouse.height() != 0 && mouse.width() != 0) { - rects.push(mouse.normalize()) - } - } - if (app.dragging) { - app.dragging.normalize() - } - mouse = new rect(e.pageX, e.pageY) - app.creating = app.dragging = false - modified = true - }) - } - - function solve_rects(){ - rects = sort_rects_by_position(rects) - - for (var i = 0; i < rects.length; i++) { - rects[i].id = i - rects[i].reset() - } - regions = [] - - var left, right - for (var i = 0; i < rects.length; i++) { - left = rects[i] - for (var j = i+1; j < rects.length; j++) { - right = rects[j] - if (left.intersects(right)) { - left.clipTo(right) - right.clipTo(left) - } - if (left.x.b < right.x.a) { - break - } - } - } - for (var i = 0; i < rects.length; i++) { - regions = regions.concat(rects[i].regions) - } - - regions = sort_rects_by_area( regions.filter(function(r){ return !!r }) ) - - var ty = new tree (regions[0].y.a, [regions[0]]) - var tx = new tree (regions[0].x.a, ty) - var ttx, tty - - for (var i = 1; i < regions.length; i++) { - ttx = tx.add (regions[i].x.a, null) - if (ttx.data) { - tty = ttx.data.add (regions[i].y.a, null) - // duplicate polygon? - if (tty.data) { - tty.data.forEach(function(yy, ii){ - if (yy.intersects(regions[i])) { - if (yy.area() > regions[i].area()) { - regions[i].dupe = true - } - else { - yy.dupe = true - tty.data[ii] = regions[i] - } - } - }) - } - else { - tty.data = [regions[i]] - } - } - else { - ttx.data = new tree (regions[i].y.a, [regions[i]]) - } - } - - regions = sort_rects_by_position(regions) - - modified = false - // document.getElementById("intersects").innerHTML = sort_rects_by_position(regions).join("<br>") - } - - // generate floor and ceiling for some regions - // generate walls from surviving regions - // generate ceiling-walls where ceiling has discontinuity - - - this.init = init - return this -} - -app.init() |
