summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_rooms.js8
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/_walls.js2
-rw-r--r--public/assets/javascripts/rectangles/engine/rooms/grouper.js2
-rw-r--r--server/index.js1
-rw-r--r--server/lib/api/index.js1
-rw-r--r--server/lib/api/rooms.js72
-rw-r--r--test/mocks/mx.js11
7 files changed, 96 insertions, 1 deletions
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
index cb3e980..6f96275 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_rooms.js
@@ -109,6 +109,14 @@
})
Rooms.clipper.update()
}
+
+ base.report = function(){
+ var data = []
+ base.rooms.forEach(function(room){
+ data.push( room.report() )
+ })
+ return data
+ }
base.sorted_by_position = function(){
return sort.rooms_by_position( base.values() )
diff --git a/public/assets/javascripts/rectangles/engine/rooms/_walls.js b/public/assets/javascripts/rectangles/engine/rooms/_walls.js
index f2f395b..f9eb9b7 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/_walls.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/_walls.js
@@ -87,7 +87,7 @@
wall.deserialize( wall_data )
})
},
-
+
base.setColor = {
wall: function(rgb){
diff --git a/public/assets/javascripts/rectangles/engine/rooms/grouper.js b/public/assets/javascripts/rectangles/engine/rooms/grouper.js
index ba510e1..663d29d 100644
--- a/public/assets/javascripts/rectangles/engine/rooms/grouper.js
+++ b/public/assets/javascripts/rectangles/engine/rooms/grouper.js
@@ -20,6 +20,8 @@
Surface = require('../../models/surface')
sort = require('../../util/sort')
_ = require('lodash')
+ MX = require('../../../../../../test/mocks/mx.js')
+ scene = MX.Scene
FRONT = 0x1, BACK = 0x2, LEFT = 0x4, RIGHT = 0x8, FLOOR = 0x10, CEILING = 0x20
PI = Math.PI
HALF_PI = PI/2
diff --git a/server/index.js b/server/index.js
index 7112bde..f6636dd 100644
--- a/server/index.js
+++ b/server/index.js
@@ -134,6 +134,7 @@ site.route = function () {
app.get('/api/project', middleware.ensureAuthenticated, api.projects.index)
app.get('/api/project/:slug', api.projects.show)
+ app.get('/api/rooms/:slug', api.rooms.show)
app.post('/api/project/new', middleware.ensureAuthenticated, api.projects.create)
app.post('/api/project/edit', middleware.ensureAuthenticated, api.projects.update)
app.delete('/api/project/destroy', middleware.ensureAuthenticated, api.projects.destroy)
diff --git a/server/lib/api/index.js b/server/lib/api/index.js
index ad86daa..11e13fc 100644
--- a/server/lib/api/index.js
+++ b/server/lib/api/index.js
@@ -6,6 +6,7 @@ var api = {
media: require('./media'),
profile: require('./profile'),
projects: require('./projects'),
+ rooms: require('./rooms'),
collaborator: require('./collaborator'),
}
diff --git a/server/lib/api/rooms.js b/server/lib/api/rooms.js
new file mode 100644
index 0000000..f0e991d
--- /dev/null
+++ b/server/lib/api/rooms.js
@@ -0,0 +1,72 @@
+var vec = require("../../../public/assets/javascripts/rectangles/models/vec2.js")
+var Rect = require("../../../public/assets/javascripts/rectangles/models/rect.js")
+var Room = require("../../../public/assets/javascripts/rectangles/models/room.js")
+var Rooms = require("../../../public/assets/javascripts/rectangles/engine/rooms/_rooms.js")
+var Clipper = require("../../../public/assets/javascripts/rectangles/engine/rooms/clipper.js")
+var Builder = require("../../../public/assets/javascripts/rectangles/engine/rooms/builder.js")
+var Grouper = require("../../../public/assets/javascripts/rectangles/engine/rooms/grouper.js")
+var Walls = require("../../../public/assets/javascripts/rectangles/engine/rooms/_walls.js")
+
+/* jshint node: true */
+
+var _ = require('lodash'),
+ util = require('../util'),
+ upload = require('../upload'),
+ config = require('../../../config.json'),
+ Project = require('../schemas/Project');
+
+var rooms = module.exports = {
+ show: function(req, res){
+ Project.findOne({ slug: req.params.slug }, function(err, doc){
+ if (! doc) { res.json({ status: 404 }); return }
+ doc = doc.toObject()
+
+ doc.rooms.forEach(function(data){
+ var rect = new Rect(data.rect.x[0], data.rect.y[0], data.rect.x[1], data.rect.y[1])
+ var room = new Room({
+ id: data.id,
+ rect: rect,
+ height: data.height
+ })
+ Rooms.add(room)
+ })
+ Rooms.clipper.solve_rects()
+ Rooms.builder.build()
+
+ var walls = [], mx_walls = [], mx_floor = [], mx_ceiling = []
+ var collections = Rooms.grouper.collect()
+ Rooms.grouper.cull(collections)
+ Rooms.grouper.group(walls, collections, FRONT)
+ Rooms.grouper.group(walls, collections, BACK)
+ Rooms.grouper.group(walls, collections, LEFT)
+ Rooms.grouper.group(walls, collections, RIGHT)
+ walls.forEach(function(wall){
+ wall.mx.forEach(function(mx){
+ var data = mx.report()
+ data.id = wall.id
+ mx_walls.push(data)
+ })
+ })
+
+ doc.mx_walls = mx_walls
+ doc.mx_floor = mx_floor
+ doc.mx_ceiling = mx_ceiling
+
+ Rooms.forEach(function(room){
+ room.mx_floor.forEach(function(mx){
+ mx_floor.push( mx.report() )
+ })
+ room.mx_ceiling.forEach(function(mx){
+ mx_ceiling.push( mx.report() )
+ })
+ })
+
+ // Walls.deserialize(doc.walls)
+// data.media && Scenery.deserialize(data.media)
+
+ res.json(doc)
+ return
+
+ })
+ }
+}
diff --git a/test/mocks/mx.js b/test/mocks/mx.js
index 889f4bc..69c4b3a 100644
--- a/test/mocks/mx.js
+++ b/test/mocks/mx.js
@@ -1,22 +1,33 @@
// Non-DOM-dependent stub MX library
// Used for testing code that builds MX elements, without a DOM dependency
+var _ = require("lodash");
+
var MX = module.exports = {}
MX.Object3D = function (klass) {
this.klass = klass
this.width = this.height = this.scaleX = this.scaleY = this.scaleZ = 1
+ this.rotationX = this.rotationY = this.rotationZ = 0
this.z = this.y = this.x = 0
this.side = 0
this.type = "Face"
this.el = { style: {} }
this.rect = null
}
+MX.Object3D.prototype.report = function(){
+ var data = _.pick(this, ['x','y','z','width','height','rotationX','rotationY'])
+ return data
+}
MX.Scene = {
els: [],
add: function (el) {
MX.Scene.els.push(el)
+ },
+ remove: function (el) {
+ var index = MX.Scene.els.indexOf(el)
+ MX.Scene.els.splice(index, 1)
}
}