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
JavaScript
;
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