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") var shapes = require("../../../public/assets/javascripts/rectangles/engine/shapes/shapelist.js") var RegionList = require("../../../public/assets/javascripts/rectangles/engine/shapes/regionlist.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() if (doc.shapes.length) { parseMxShapes(doc) } else { parseMxRooms(doc) } res.json(doc) }) } } function parseMxShapes (doc) { var viewHeight = doc.viewHeight var wallHeight = doc.wallHeight shapes.deserialize( doc.shapes ) var walls = [], mx_walls = [], mx_floor = [], mx_ceiling = [] var regions = RegionList.build() regions.forEach(function(region){ var room = new Room({ rect: region, regions: [region], height: wallHeight, }) room.sides = region.sides region.id = Rooms.uid("room_") Rooms.list[ region.id ] = room Rooms.builder.build_walls(region) mx_floor.push( Rooms.builder.make_floor(room, region) ) mx_ceiling.push( Rooms.builder.make_ceiling(room, region) ) }) 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){ mx_floor.push( room.mx_floor ) room.mx_ceiling.forEach(function(mx){ mx_ceiling.push( mx.report() ) }) }) } function parseMxRooms (doc) { 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() ) }) }) }