summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles')
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/regionlist.js64
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/shapelist.js3
2 files changed, 48 insertions, 19 deletions
diff --git a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
index 86269a6..0dd4a1e 100644
--- a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
+++ b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js
@@ -10,10 +10,25 @@ var RegionList = (function(){
var RegionList = {}
var regions = RegionList.regions
+ // Build a list of regions from the existing shapes.
+ // Operates on all the shapes at once.
RegionList.build = function(){
-
- // first, get the segments sorted right to left & top to bottom
var segments = RegionList.getSortedSegments()
+ return RegionList.buildRoomsFromSegments(segments)
+ }
+
+ // Build a list of regions from the individual shapes.
+ // Same, but operates on the shapes individually
+ RegionList.buildByShape = function(){
+ var shapes = RegionList.getSortedSegmentsByShape()
+ var region_lists = shapes.map(function(shape){
+ return RegionList.buildRoomsFromSegments(shape.segments)
+ })
+ var regions = []
+ return regions.concat.apply(regions, region_lists);
+ }
+
+ RegionList.buildRoomsFromSegments = function(segments){
var rooms = []
var seen_rooms = {}
@@ -172,31 +187,42 @@ var RegionList = (function(){
return rooms
}
-
// Gets a list of polylines from the ShapeList and sorts the segments.
RegionList.getSortedSegments = function(){
// get a list of all segments from these polylines
var segments = shapes.getAllSegments()
- // re-orient them so they're either facing up or right and make them into rects
- segments = segments.map(function(segment){
- // vertical
- if (segment[0].a == segment[1].a) {
- if (segment[0].b > segment[1].b) {
- segment.push(segment.shift())
- }
- }
- // horizontal
- else if (segment[0].b == segment[1].b) {
- if (segment[0].a > segment[1].a) {
- segment.push(segment.shift())
- }
- }
- return new Rect( segment[0].a, segment[0].b, segment[1].a, segment[1].b )
- })
+ segments = segments.map(RegionList.segmentsToRects)
return sort.rects_by_position(segments)
}
+
+ RegionList.getSortedSegmentsByShape = function(){
+ return shapes.getAllShapeSegments().map(function(shape){
+ var segments = shape.map(RegionList.segmentsToRects)
+ return {
+ shape: shape,
+ segments: sort.rects_by_position(segments)
+ }
+ })
+ }
+
+ // re-orient a segment so it's either facing up or right and make it into a rect
+ RegionList.segmentsToRects = function(segment){
+ // vertical
+ if (segment[0].a == segment[1].a) {
+ if (segment[0].b > segment[1].b) {
+ segment.push(segment.shift())
+ }
+ }
+ // horizontal
+ else if (segment[0].b == segment[1].b) {
+ if (segment[0].a > segment[1].a) {
+ segment.push(segment.shift())
+ }
+ }
+ return new Rect( segment[0].a, segment[0].b, segment[1].a, segment[1].b )
+ }
return RegionList
diff --git a/public/assets/javascripts/rectangles/engine/shapes/shapelist.js b/public/assets/javascripts/rectangles/engine/shapes/shapelist.js
index e5a70fb..2d33af2 100644
--- a/public/assets/javascripts/rectangles/engine/shapes/shapelist.js
+++ b/public/assets/javascripts/rectangles/engine/shapes/shapelist.js
@@ -69,6 +69,9 @@ var ShapeList = Fiber.extend(function(base){
exports.forEach = function(fn){
this.shapes.forEach(fn)
}
+ exports.getAllShapeSegments = function(){
+ return this.shapes.map(function(shape){ return shape.getSegments() })
+ }
exports.getAllSegments = function(){
var segments = []
this.shapes.forEach(function(shape){