molstar
Version:
A comprehensive macromolecular library.
106 lines (105 loc) • 5.37 kB
JavaScript
"use strict";
/**
* Copyright (c) 2019-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.TransformParam = void 0;
exports.getDistanceDataFromStructureSelections = getDistanceDataFromStructureSelections;
exports.getAngleDataFromStructureSelections = getAngleDataFromStructureSelections;
exports.getDihedralDataFromStructureSelections = getDihedralDataFromStructureSelections;
exports.getLabelDataFromStructureSelections = getLabelDataFromStructureSelections;
exports.getOrientationDataFromStructureSelections = getOrientationDataFromStructureSelections;
exports.getPlaneDataFromStructureSelections = getPlaneDataFromStructureSelections;
exports.transformParamsNeedCentroid = transformParamsNeedCentroid;
exports.getTransformFromParams = getTransformFromParams;
const param_definition_1 = require("../../mol-util/param-definition.js");
const linear_algebra_1 = require("../../mol-math/linear-algebra.js");
function getDistanceDataFromStructureSelections(s) {
const lociA = s[0].loci;
const lociB = s[1].loci;
return { pairs: [{ loci: [lociA, lociB] }] };
}
function getAngleDataFromStructureSelections(s) {
const lociA = s[0].loci;
const lociB = s[1].loci;
const lociC = s[2].loci;
return { triples: [{ loci: [lociA, lociB, lociC] }] };
}
function getDihedralDataFromStructureSelections(s) {
const lociA = s[0].loci;
const lociB = s[1].loci;
const lociC = s[2].loci;
const lociD = s[3].loci;
return { quads: [{ loci: [lociA, lociB, lociC, lociD] }] };
}
function getLabelDataFromStructureSelections(s) {
const loci = s[0].loci;
return { infos: [{ loci }] };
}
function getOrientationDataFromStructureSelections(s) {
return { locis: s.map(v => v.loci) };
}
function getPlaneDataFromStructureSelections(s) {
return { locis: s.map(v => v.loci) };
}
const GetTransformState = {
center: (0, linear_algebra_1.Vec3)(),
rotation: (0, linear_algebra_1.Mat4)(),
translationToCenter: (0, linear_algebra_1.Mat4)(),
translationFromCenter: (0, linear_algebra_1.Mat4)(),
translation: (0, linear_algebra_1.Mat4)(),
local: (0, linear_algebra_1.Mat4)(),
};
function transformParamsNeedCentroid(src) {
var _a;
if (src.name === 'components' && ((_a = src.params.rotationCenter) === null || _a === void 0 ? void 0 : _a.name) === 'centroid') {
return true;
}
return false;
}
function getTransformFromParams(src, centroid) {
var _a, _b;
if (src.name === 'matrix') {
const transform = (0, linear_algebra_1.Mat4)();
linear_algebra_1.Mat4.copy(transform, src.params.data);
if (src.params.transpose)
linear_algebra_1.Mat4.transpose(transform, transform);
return transform;
}
else {
if (((_a = src.params.rotationCenter) === null || _a === void 0 ? void 0 : _a.name) === 'centroid') {
linear_algebra_1.Vec3.copy(GetTransformState.center, centroid);
}
else if (((_b = src.params.rotationCenter) === null || _b === void 0 ? void 0 : _b.name) === 'point') {
linear_algebra_1.Vec3.copy(GetTransformState.center, src.params.rotationCenter.params.point);
}
else {
linear_algebra_1.Vec3.set(GetTransformState.center, 0, 0, 0);
}
linear_algebra_1.Mat4.fromTranslation(GetTransformState.translationToCenter, GetTransformState.center);
linear_algebra_1.Mat4.fromRotation(GetTransformState.rotation, src.params.angle * Math.PI / 180, src.params.axis);
linear_algebra_1.Mat4.fromTranslation(GetTransformState.translationFromCenter, linear_algebra_1.Vec3.negate(GetTransformState.center, GetTransformState.center));
const transform = linear_algebra_1.Mat4.mul3((0, linear_algebra_1.Mat4)(), GetTransformState.translationToCenter, GetTransformState.rotation, GetTransformState.translationFromCenter);
linear_algebra_1.Mat4.fromTranslation(GetTransformState.translation, src.params.translation);
linear_algebra_1.Mat4.mul(transform, GetTransformState.translation, transform);
return transform;
}
}
exports.TransformParam = param_definition_1.ParamDefinition.MappedStatic('matrix', {
matrix: param_definition_1.ParamDefinition.Group({
data: param_definition_1.ParamDefinition.Mat4(linear_algebra_1.Mat4.identity()),
transpose: param_definition_1.ParamDefinition.Boolean(false),
}, { isFlat: true }),
components: param_definition_1.ParamDefinition.Group({
translation: param_definition_1.ParamDefinition.Vec3(linear_algebra_1.Vec3.create(0, 0, 0)),
axis: param_definition_1.ParamDefinition.Vec3(linear_algebra_1.Vec3.create(1, 0, 0)),
angle: param_definition_1.ParamDefinition.Numeric(0, { min: -360, max: 360, step: 1 }, { description: 'Angle in Degrees' }),
rotationCenter: param_definition_1.ParamDefinition.MappedStatic('point', {
point: param_definition_1.ParamDefinition.Group({ point: param_definition_1.ParamDefinition.Vec3(linear_algebra_1.Vec3.create(0, 0, 0)) }, { isFlat: true }),
centroid: param_definition_1.ParamDefinition.Group({})
}),
}, { isFlat: true }),
}, { label: 'Kind' });