diff options
Diffstat (limited to 'assets/javascripts/rectangles/engine/clipper.js')
| -rw-r--r-- | assets/javascripts/rectangles/engine/clipper.js | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/assets/javascripts/rectangles/engine/clipper.js b/assets/javascripts/rectangles/engine/clipper.js index 01a4921..d814fec 100644 --- a/assets/javascripts/rectangles/engine/clipper.js +++ b/assets/javascripts/rectangles/engine/clipper.js @@ -2,11 +2,6 @@ var Clipper = new function(){ var base = this - var rooms = base.rooms = [] - var regions = base.regions = [] - - var modified = true - base.init = function(){ base.bind() base.update() @@ -17,20 +12,34 @@ var Clipper = new function(){ } base.update = function(){ - Clipper.solve_rects() + 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 (base.rooms.length == 0) return; - - for (var i = 0; i < base.rooms.length; i++) { - base.rooms[i].reset() + 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() } + } - var rooms = sort_rooms_by_position( base.rooms ) - - var regions = [] + // 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++) { @@ -52,7 +61,10 @@ var Clipper = new function(){ 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]]) @@ -85,8 +97,6 @@ var Clipper = new function(){ ttx.data = new Tree (regions[i].y.a, [regions[i]]) } } - - base.regions = sort_rects_by_position(regions) } return base |
