UNPKG

gs-json

Version:

gs-JSON is a domain agnostic unifying 3D file format for geometric and semantic modelling (hence the 'gs').

144 lines (137 loc) 5.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.genThreeOptModel = genThreeOptModel; exports.genThreeOptModelAndMaps = genThreeOptModelAndMaps; var _three_geom = require("./three_geom"); var threeg = _interopRequireWildcard(_three_geom); var _three_scene = require("./three_scene"); var threes = _interopRequireWildcard(_three_scene); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } /** * Add stuff to scene. */ function add(scene, three_type, description, data, material) { var buff_geom = threes.genGeom(data.xyzs_flat, data.indexes); threes.addGeomToScene(scene, buff_geom); threes.addObjToScene(scene, threes.genObj(three_type, description, buff_geom, material)); } /** * Add all objects faces to the scene and generate one big threejs mesh out of it. */ function createFaces(scene, objects, material) { var data = threeg.getDataFromAllFaces(objects); if (data !== null) { add(scene, "Mesh", "All faces", data, material); return data.reverse_map; } return null; } /** * Add all objects edges to the scene and create one big line segment soup out of it. */ function createWires(scene, objects, material) { var data = threeg.getDataFromAllWires(objects); if (data !== null) { add(scene, "LineSegments", "All wires", data, material); return data.reverse_map; } return null; } /** * Add all objects edges to the scene and create one big line segment soup out of it. */ function createEdges(scene, objects, material) { var data = threeg.getDataFromAllEdges(objects); if (data !== null) { add(scene, "LineSegments", "All edges", data, material); return data.reverse_map; } return null; } /** * Add all objects vertices to the scene and create one big vertex soup out of it. */ function createVertices(scene, objects, material) { var data = threeg.getDataFromAllVertices(objects); if (data !== null) { add(scene, "Points", "All vertices", data, material); return data.reverse_map; } return null; } /** * Add all other lines to the scene and create one big line segment soup out of it. */ function createOtherLines(scene, objects, material) { var data = threeg.getDataAllOtherLines(objects); if (data !== null) { add(scene, "LineSegments", "Other lines", data, material); } } /** * Add all points to the scene and create one big point soup out of it. */ function createPoints(scene, points, material) { // create xyzs gs.Array var data = threeg.getDataFromAllPoints(points); if (data !== null) { add(scene, "Points", "All points", data, material); return data.reverse_map; } return null; } /** * Generate the model. */ function genThreeOptModel(model) { // check that this is model, this is required for Mobius if (model.constructor.name !== "Model") { throw new Error("Invalid model."); } // create scene var scene = threes.genScene(); var mats = threes.genDefaultMaterials(); threes.addMatsToScene(scene, mats); // TODO add the points only once using threejs interleaved buffer // add the objects var objs = model.getGeom().getAllObjs(); var faces_map = createFaces(scene, objs, mats[2]); var wires_map = createWires(scene, objs, mats[1]); var edges_map = createEdges(scene, objs, mats[0]); var vertices_map = createVertices(scene, objs, mats[4]); // add points var all_points = model.getGeom().getAllPoints(); var points_map = createPoints(scene, all_points, mats[4]); // other createOtherLines(scene, objs, mats[0]); // return the scene with object and points return scene; } /** * Generate the model together with some maps. */ function genThreeOptModelAndMaps(model) { if (model.constructor.name !== "Model") { throw new Error("Invalid model."); } var scene = threes.genScene(); var mats = threes.genDefaultMaterials(); threes.addMatsToScene(scene, mats); // TODO add the points only once using threejs interleaved buffer // add the objects var objs = model.getGeom().getAllObjs(); var faces_map = createFaces(scene, objs, mats[2]); var wires_map = createWires(scene, objs, mats[1]); var edges_map = createEdges(scene, objs, mats[0]); var vertices_map = createVertices(scene, objs, mats[4]); // add points var all_points = model.getGeom().getAllPoints(); var points_map = createPoints(scene, all_points, mats[4]); // other createOtherLines(scene, objs, mats[0]); // return the scene with object and points return { scene: scene, faces_map: faces_map, wires_map: wires_map, edges_map: edges_map, vertices_map: vertices_map, points_map: points_map }; } //# sourceMappingURL=three_generate.js.map