diff options
| author | Jules Laplace <jules@okfoc.us> | 2015-08-20 19:14:32 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2015-08-20 19:14:32 -0400 |
| commit | 618ccc76b96fa5d070484ce2d0ec8d509153da69 (patch) | |
| tree | 9c025a3c3bec857a2fa6abad103dd46875c62119 | |
| parent | a4a001668f9f05272a4fbc28567b259ee45ada97 (diff) | |
starting to convert polylines into regions
3 files changed, 80 insertions, 16 deletions
diff --git a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js index 1f2810f..94b902a 100644 --- a/public/assets/javascripts/rectangles/engine/shapes/regionlist.js +++ b/public/assets/javascripts/rectangles/engine/shapes/regionlist.js @@ -2,36 +2,91 @@ var RegionList = (function(){ var RegionList = {} var regions = RegionList.regions - - RegionList.init = function(){ + + 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, vertical, other_side + + 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 (overlaps(segment, open_segment)) { + // if we have overlap, it means we have made a full room + 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.build = function(){ + RegionList.getSortedSegments = function(){ + // get a list of all segments from these polylines var segments = shapes.getAllSegments() + + // re-orientate them so they're either facing up or right segments.forEach(function(segment){ - if (segment[0][0] == segment[1][0]) { - if (segment[0][1] > segment[1][1]) { + // vertical + if (segment[0].a == segment[1].a) { + if (segment[0].b > segment[1].b) { segment.push(segment.shift()) } } - else if (segment[0][1] == segment[1][1]) { - if (segment[0][0] > segment[1][0]) { + // horizontal + else if (segment[0].b == segment[1].b) { + if (segment[0].a > segment[1].a) { segment.push(segment.shift()) } } }) + + // sort them from top to bottom, left to right segments = segments.sort(function(a,b){ - return a[0][0] < b[0][0] + if (a[0].a < b[0].a) { + return -1 + } + else if (a[0].a == b[0].a) { + if (a[0].b < b[0].b) { + return -1 + } + else if (a[0].b == b[0].b) { + return 0 + } + else { + return 1 + } + } + else { + return 1 + } }) - console.log(segments) - - // get a list of all segments from these polylines - // re-orientate them so they're either facing up or right - // loop over them from left to right - // + return segments } + function isVertical (segment) { return segment[0].a == segment[1].a } + function isHorizontal (segment) { return segment[0].b == segment[1].b } + function overlaps (a,b) { return (a[0].b > b[0].b || a[1].b < b[1].b) } + function clone_segment(a){ return [a[0].clone(), a[1].clone()] } return RegionList })()
\ No newline at end of file diff --git a/public/assets/javascripts/ui/blueprint/BlueprintEditor.js b/public/assets/javascripts/ui/blueprint/BlueprintEditor.js index 73f21c0..8fe66ca 100644 --- a/public/assets/javascripts/ui/blueprint/BlueprintEditor.js +++ b/public/assets/javascripts/ui/blueprint/BlueprintEditor.js @@ -93,7 +93,7 @@ var BlueprintEditor = View.extend(AnimatedView.prototype).extend({ map.draw.ctx.save() map.draw.translate() - this.floorplan.draw(map.draw.ctx, true) + // this.floorplan.draw(map.draw.ctx, true) map.draw.coords() @@ -113,6 +113,15 @@ var BlueprintEditor = View.extend(AnimatedView.prototype).extend({ map.draw.mouse(map.ui.mouse.cursor) map.draw.camera(scene.camera) + var rooms = RegionList.build() + rooms.forEach(function(room,i){ + map.draw.ctx.fillStyle = colors[i % colors.length] + map.draw.ctx.fillRect( room[0][0].a, room[0][1].b, + room[1][0].a - room[0][0].a, + room[0][0].b - room[0][1].b + ) + }) + map.draw.ctx.restore() }, diff --git a/public/assets/javascripts/ui/blueprint/BlueprintUploader.js b/public/assets/javascripts/ui/blueprint/BlueprintUploader.js index c7138e9..fbb71d5 100644 --- a/public/assets/javascripts/ui/blueprint/BlueprintUploader.js +++ b/public/assets/javascripts/ui/blueprint/BlueprintUploader.js @@ -38,7 +38,7 @@ var BlueprintUploader = UploadView.extend({ this.$blueprints.show() data.forEach(this.append.bind(this)) this.hide() - if (this.nameToShow) { + if (this.nameToShow && this.nameToShow !== "new") { data.some(function(el){ if (el.slug == this.nameToShow) { this.parent.scaler.pick(el) |
