summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/assets/javascripts/rectangles/engine/shapes/regionlist.js83
-rw-r--r--public/assets/javascripts/ui/blueprint/BlueprintEditor.js11
-rw-r--r--public/assets/javascripts/ui/blueprint/BlueprintUploader.js2
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)