molstar
Version:
A comprehensive macromolecular library.
88 lines • 4.24 kB
JavaScript
/**
* Copyright (c) 2019-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.spinStructure = exports.getSpinStructureAxisAndOrigin = exports.SpinStructureParams = exports.explodeStructure = exports.unwindStructureAssembly = void 0;
var param_definition_1 = require("../../mol-util/param-definition");
var geometry_1 = require("../../mol-math/geometry");
var linear_algebra_1 = require("../../mol-math/linear-algebra");
var structure_1 = require("../../mol-model/structure");
var _unwindMatrix = (0, linear_algebra_1.Mat4)();
function unwindStructureAssembly(structure, unitTransforms, t) {
for (var i = 0, _i = structure.units.length; i < _i; i++) {
var u = structure.units[i];
geometry_1.SymmetryOperator.lerpFromIdentity(_unwindMatrix, u.conformation.operator, t);
unitTransforms.setTransform(_unwindMatrix, u);
}
}
exports.unwindStructureAssembly = unwindStructureAssembly;
var _centerVec = (0, linear_algebra_1.Vec3)(), _transVec = (0, linear_algebra_1.Vec3)(), _transMat = (0, linear_algebra_1.Mat4)();
function explodeStructure(structure, unitTransforms, t, sphere) {
var d = sphere.radius * t;
for (var i = 0, _i = structure.units.length; i < _i; i++) {
var u = structure.units[i];
linear_algebra_1.Vec3.transformMat4(_centerVec, u.lookup3d.boundary.sphere.center, u.conformation.operator.matrix);
linear_algebra_1.Vec3.sub(_transVec, _centerVec, sphere.center);
linear_algebra_1.Vec3.setMagnitude(_transVec, _transVec, d);
linear_algebra_1.Mat4.fromTranslation(_transMat, _transVec);
unitTransforms.setTransform(_transMat, u);
}
}
exports.explodeStructure = explodeStructure;
//
exports.SpinStructureParams = {
axis: param_definition_1.ParamDefinition.MappedStatic('custom', {
structure: param_definition_1.ParamDefinition.Group({
principalAxis: param_definition_1.ParamDefinition.Select('dirA', [['dirA', 'A'], ['dirB', 'B'], ['dirC', 'C']])
}),
custom: param_definition_1.ParamDefinition.Group({
vector: param_definition_1.ParamDefinition.Vec3(linear_algebra_1.Vec3.create(0, 0, 1))
})
}),
origin: param_definition_1.ParamDefinition.MappedStatic('structure', {
structure: param_definition_1.ParamDefinition.Group({}),
custom: param_definition_1.ParamDefinition.Group({
vector: param_definition_1.ParamDefinition.Vec3(linear_algebra_1.Vec3.create(0, 0, 0))
})
}),
};
function getSpinStructureAxisAndOrigin(structure, props) {
var axis, origin;
if (props.axis.name === 'custom') {
axis = props.axis.params.vector;
}
else {
var pa = structure_1.Structure.getPrincipalAxes(structure);
axis = pa.momentsAxes[props.axis.params.principalAxis];
}
if (props.origin.name === 'custom') {
origin = props.origin.params.vector;
}
else {
var pa = structure_1.Structure.getPrincipalAxes(structure);
origin = pa.momentsAxes.origin;
}
return { axis: axis, origin: origin };
}
exports.getSpinStructureAxisAndOrigin = getSpinStructureAxisAndOrigin;
var _rotMat = (0, linear_algebra_1.Mat4)();
var _transMat2 = (0, linear_algebra_1.Mat4)();
var _t = (0, linear_algebra_1.Mat4)();
function spinStructure(structure, unitTransforms, t, axis, origin) {
for (var i = 0, _i = structure.units.length; i < _i; i++) {
var u = structure.units[i];
linear_algebra_1.Vec3.negate(_transVec, origin);
linear_algebra_1.Mat4.fromTranslation(_transMat, _transVec);
linear_algebra_1.Mat4.fromRotation(_rotMat, Math.PI * t * 2, axis);
linear_algebra_1.Mat4.fromTranslation(_transMat2, origin);
linear_algebra_1.Mat4.mul(_t, _rotMat, _transMat);
linear_algebra_1.Mat4.mul(_t, _transMat2, _t);
unitTransforms.setTransform(_t, u);
}
}
exports.spinStructure = spinStructure;
//# sourceMappingURL=helpers.js.map
;