UNPKG

gs-json

Version:

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

278 lines (270 loc) 6.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.genDefaultMaterials = genDefaultMaterials; exports.genScene = genScene; exports.genGeom = genGeom; exports.genGroup = genGroup; exports.genObj = genObj; exports.addObjToGroup = addObjToGroup; exports.addObjToScene = addObjToScene; exports.addGroupToScene = addGroupToScene; exports.addMatsToScene = addMatsToScene; exports.addGeomToScene = addGeomToScene; exports.addSpriteToScene = addSpriteToScene; exports.genSprites = genSprites; var _uuid = require("../libs/uuid/uuid"); /** * Generate default materials. */ function genDefaultMaterials() { var black_line = { uuid: (0, _uuid.create_UUID)(), type: "LineBasicMaterial", color: 0, vertexColors: 0, side: 2, blending: 0, depthFunc: 3, depthTest: true, depthWrite: true }; var blue_line = { uuid: (0, _uuid.create_UUID)(), type: "LineBasicMaterial", color: 255, vertexColors: 0, side: 2, blending: 0, depthFunc: 3, depthTest: true, depthWrite: true }; var meshes_mat = { uuid: (0, _uuid.create_UUID)(), type: "MeshPhongMaterial", color: 16777215, emissive: 0, specular: 16777215, shininess: 10, vertexColors: 0, side: 2, blending: 0, depthFunc: 3, depthTest: true, depthWrite: true, transparent: false, wireframe: false, flatShading: true }; var meshes_glass_mat = { uuid: (0, _uuid.create_UUID)(), type: "MeshPhongMaterial", color: 0, emissive: 0, specular: 16777215, shininess: 40, vertexColors: 0, side: 1, blending: 0, depthFunc: 3, depthTest: true, depthWrite: true, transparent: true, opacity: 0.5, wireframe: false, flatShading: true }; var points_mat = { uuid: (0, _uuid.create_UUID)(), type: "PointsMaterial", color: 16777215, size: 2, sizeAttenuation: false }; return [black_line, blue_line, meshes_mat, meshes_glass_mat, points_mat]; } /** * Generate the scene. */ function genScene() { return { metadata: { version: 4.5, type: "Object", generator: "gs-json" }, geometries: [], materials: [], object: { type: "Scene", name: "Scene", children: [] } }; } /** * Generate geometry entity from data. */ function genGeom(xyzs, indexes, normals) { var geom = { uuid: (0, _uuid.create_UUID)(), type: "BufferGeometry", data: { attributes: { position: { itemSize: 3, type: "Float32Array", array: xyzs, normalized: false } } } }; if (indexes !== undefined) { geom.data.index = { type: "Uint16Array", array: indexes }; } if (normals !== undefined) { geom.data.attributes.normal = { itemSize: 3, type: "Float32Array", array: normals, normalized: false }; } return geom; } /** * Generate a group entity. This has nothing to do with gs-json groups. */ function genGroup(name) { var obj = { uuid: (0, _uuid.create_UUID)(), type: "Group", name: name, children: [] }; return obj; } /** * Generate an obj entity. */ function genObj(type, name, geom, mat) { var obj = { uuid: (0, _uuid.create_UUID)(), type: type, name: name, geometry: geom.uuid, material: mat.uuid }; if (type === "Mesh") { obj.castShadow = true; obj.receiveShadow = true; } else { obj.castShadow = false; obj.receiveShadow = false; } return obj; } /** * Add a obj entity to the group. */ function addObjToGroup(group, obj) { group.children.push(obj); } /** * Add an obj entity to the scene. */ function addObjToScene(scene, obj) { scene.object.children.push(obj); } /** * Add a group entity to the scene. */ function addGroupToScene(scene, group) { scene.object.children.push(group); } /** * Add some materials to the scene. */ function addMatsToScene(scene, mats) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = mats[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var mat = _step.value; scene.materials.push(mat); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } /** * Add a geom entity to the the scene. */ function addGeomToScene(scene, geom) { scene.geometries.push(geom); } /** * Add a sprite to the scene. */ function addSpriteToScene(scene, group, name, labels_xyzs) { var sprite = genSprites(name, labels_xyzs); sprite.uuid = (0, _uuid.create_UUID)(); group.children.push(sprite); return sprite; } /** * Generate a bunch of sprites, from labels and label centroids. */ function genSprites(name, labels_xyzs) { var group = genGroup(name); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = labels_xyzs[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var label_xyz = _step2.value; var label = label_xyz.label; var xyz = label_xyz.xyz; var sprite = { type: "Sprite", name: label, matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, xyz[0], xyz[1], xyz[2], 1], visible: false }; group.children.push(sprite); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return group; } //# sourceMappingURL=three_scene.js.map