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