molstar
Version:
A comprehensive macromolecular library.
94 lines • 3.13 kB
JavaScript
/**
* Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.BoxCage = exports.PerforatedBox = exports.Box = void 0;
var linear_algebra_1 = require("../../mol-math/linear-algebra");
var primitive_1 = require("./primitive");
var polygon_1 = require("./polygon");
var cage_1 = require("./cage");
var a = (0, linear_algebra_1.Vec3)(), b = (0, linear_algebra_1.Vec3)(), c = (0, linear_algebra_1.Vec3)(), d = (0, linear_algebra_1.Vec3)();
var points = (0, polygon_1.polygon)(4, true);
/**
* Create a box
*/
function createBox(perforated) {
var triangleCount = 12;
var vertexCount = perforated ? 12 * 3 : 6 * 4;
var builder = (0, primitive_1.PrimitiveBuilder)(triangleCount, vertexCount);
// create sides
for (var i = 0; i < 4; ++i) {
var ni = (i + 1) % 4;
linear_algebra_1.Vec3.set(a, points[i * 3], points[i * 3 + 1], -0.5);
linear_algebra_1.Vec3.set(b, points[ni * 3], points[ni * 3 + 1], -0.5);
linear_algebra_1.Vec3.set(c, points[ni * 3], points[ni * 3 + 1], 0.5);
linear_algebra_1.Vec3.set(d, points[i * 3], points[i * 3 + 1], 0.5);
if (perforated) {
builder.add(a, b, c);
}
else {
builder.addQuad(a, b, c, d);
}
}
// create bases
linear_algebra_1.Vec3.set(a, points[0], points[1], -0.5);
linear_algebra_1.Vec3.set(b, points[3], points[4], -0.5);
linear_algebra_1.Vec3.set(c, points[6], points[7], -0.5);
linear_algebra_1.Vec3.set(d, points[9], points[10], -0.5);
if (perforated) {
builder.add(c, b, a);
}
else {
builder.addQuad(d, c, b, a);
}
linear_algebra_1.Vec3.set(a, points[0], points[1], 0.5);
linear_algebra_1.Vec3.set(b, points[3], points[4], 0.5);
linear_algebra_1.Vec3.set(c, points[6], points[7], 0.5);
linear_algebra_1.Vec3.set(d, points[9], points[10], 0.5);
if (perforated) {
builder.add(a, b, c);
}
else {
builder.addQuad(a, b, c, d);
}
return builder.getPrimitive();
}
var box;
function Box() {
if (!box)
box = createBox(false);
return box;
}
exports.Box = Box;
var perforatedBox;
function PerforatedBox() {
if (!perforatedBox)
perforatedBox = createBox(true);
return perforatedBox;
}
exports.PerforatedBox = PerforatedBox;
var boxCage;
function BoxCage() {
if (!boxCage) {
boxCage = (0, cage_1.createCage)([
0.5, 0.5, -0.5,
-0.5, 0.5, -0.5,
-0.5, -0.5, -0.5,
0.5, -0.5, -0.5,
0.5, 0.5, 0.5,
-0.5, 0.5, 0.5,
-0.5, -0.5, 0.5,
0.5, -0.5, 0.5
], [
0, 4, 1, 5, 2, 6, 3, 7,
0, 1, 1, 2, 2, 3, 3, 0,
4, 5, 5, 6, 6, 7, 7, 4 // top base
]);
}
return boxCage;
}
exports.BoxCage = BoxCage;
//# sourceMappingURL=box.js.map
;