summaryrefslogtreecommitdiff
path: root/assets/javascripts/rectangles/engine/clipper.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-05-05 15:56:07 -0400
committerJules Laplace <jules@okfoc.us>2014-05-05 15:56:07 -0400
commit9f4204d35f1dbd861417cd8a04bb26c46299f55a (patch)
tree79a6f43198f38dba10de55d47c3995b83a29d263 /assets/javascripts/rectangles/engine/clipper.js
parent79b0e1b0a127260978c69165466953ae86f6d6b2 (diff)
happy with refactor
Diffstat (limited to 'assets/javascripts/rectangles/engine/clipper.js')
-rw-r--r--assets/javascripts/rectangles/engine/clipper.js104
1 files changed, 0 insertions, 104 deletions
diff --git a/assets/javascripts/rectangles/engine/clipper.js b/assets/javascripts/rectangles/engine/clipper.js
deleted file mode 100644
index d814fec..0000000
--- a/assets/javascripts/rectangles/engine/clipper.js
+++ /dev/null
@@ -1,104 +0,0 @@
-
-var Clipper = new function(){
- var base = this
-
- base.init = function(){
- base.bind()
- base.update()
- }
-
- base.bind = function(){
- map.ui.mouse.tube.on("up", function(){ base.update() })
- }
-
- base.update = function(){
- base.solve_rects()
- app.tube("clip")
- }
-
- var rooms, regions
-
- // Given a set of overlapping rooms, clip any intersections, then cull any duplicate polygons
- base.solve_rects = function(){
- if (Rooms.list.length == 0) return
-
- base.reset_rects()
- base.clip_rects()
- base.cull_rects()
-
- Rooms.regions = sort_rects_by_position(regions)
- }
-
- // Reset the clipping/culling states of each of the rooms
- base.reset_rects = function(){
- for (var i = 0; i < Rooms.list.length; i++) {
- Rooms.list[i].reset()
- }
- }
-
- // Compare each room to the rooms it overlaps, and subdivide
- base.clip_rects = function(){
- var rooms = Rooms.sorted_by_position()
- regions = []
-
- var left, right
- for (var i = 0; i < rooms.length; i++) {
- left = rooms[i]
- for (var j = i+1; j < rooms.length; j++) {
- right = rooms[j]
- if (left.rect.intersects(right.rect)) {
- left.clipTo(right.rect)
- right.clipTo(left.rect)
- left.intersects.push(right)
- right.intersects.push(left)
- }
- if (left.rect.x.b < right.rect.x.a) {
- break
- }
- }
- }
- for (var i = 0; i < rooms.length; i++) {
- rooms[i].regions = rooms[i].regions.filter(function(r){ return !!r })
- regions = regions.concat(rooms[i].regions)
- }
- }
-
- // Find overlapping regions (of the same size) and dedupe
- base.cull_rects = function(){
- regions = sort_rects_by_area( regions )
-
- 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]])
- }
- }
- }
-
- return base
-}
-