var RegionList = (function(){ var RegionList = {} var regions = RegionList.regions RegionList.build = function(){ var segments = RegionList.getSortedSegments() // loop over them from left to right // console.log(segments.map(function(s){ return s.toString() }).join("\n")) var rooms = [] var open_segments = [] var segment, open_segment, y_segments for (var i = 0; i < segments.length; i++) { segment = segments[i] if (! isVertical(segment)) { continue } for (var j = 0; j < open_segments.length; j++) { open_segment = open_segments[j] if (segment.y.overlaps(open_segment.y)) { // if we have overlap, it means we have made a full room y_segments = open_segment.y.split(segment.y) if (y_segments.length == 1) { open_segment.x.b = segment.x.b rooms.push(open_segment) } // other_side = clone_segment(open_segment) // other_side[0].a = segment[0].a // other_side[1].a = segment[1].a // rooms.push([open_segment, other_side]) open_segments.splice(j, 1) j-- } } open_segments.push(segment) } // console.log(rooms.map(function(s){ return s[0][0].toString() + " " + s[0][1].toString() + " " + s[1][0].toString() + " " + s[1][1].toString() }).join("\n")) return rooms } 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 ) }) return sort.rects_by_position(segments) } return RegionList })()