diff options
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/rooms/_rooms.js | 8 | ||||
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/rooms/_walls.js | 2 | ||||
| -rw-r--r-- | public/assets/javascripts/rectangles/engine/rooms/grouper.js | 2 | ||||
| -rw-r--r-- | server/index.js | 1 | ||||
| -rw-r--r-- | server/lib/api/index.js | 1 | ||||
| -rw-r--r-- | server/lib/api/rooms.js | 72 | ||||
| -rw-r--r-- | test/mocks/mx.js | 11 |
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) } } |
