molstar
Version:
A comprehensive macromolecular library.
97 lines (96 loc) • 4.55 kB
JavaScript
/**
* Copyright (c) 2021 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.Clip = void 0;
var linear_algebra_1 = require("../mol-math/linear-algebra");
var misc_1 = require("../mol-math/misc");
var param_definition_1 = require("./param-definition");
var string_1 = require("./string");
function Clip() {
}
exports.Clip = Clip;
(function (Clip) {
/** Clip object types */
Clip.Type = {
none: 0,
plane: 1,
sphere: 2,
cube: 3,
cylinder: 4,
infiniteCone: 5,
};
Clip.Params = {
variant: param_definition_1.ParamDefinition.Select('pixel', param_definition_1.ParamDefinition.arrayToOptions(['instance', 'pixel'])),
objects: param_definition_1.ParamDefinition.ObjectList({
type: param_definition_1.ParamDefinition.Select('plane', param_definition_1.ParamDefinition.objectToOptions(Clip.Type, function (t) { return (0, string_1.stringToWords)(t); })),
invert: param_definition_1.ParamDefinition.Boolean(false),
position: param_definition_1.ParamDefinition.Vec3((0, linear_algebra_1.Vec3)()),
rotation: param_definition_1.ParamDefinition.Group({
axis: param_definition_1.ParamDefinition.Vec3(linear_algebra_1.Vec3.create(1, 0, 0)),
angle: param_definition_1.ParamDefinition.Numeric(0, { min: -180, max: 180, step: 1 }, { description: 'Angle in Degrees' }),
}, { isExpanded: true }),
scale: param_definition_1.ParamDefinition.Vec3(linear_algebra_1.Vec3.create(1, 1, 1)),
}, function (o) { return (0, string_1.stringToWords)(o.type); })
};
function createClipObjects() {
return {
count: 0,
type: (new Array(5)).fill(1),
invert: (new Array(5)).fill(false),
position: (new Array(5 * 3)).fill(0),
rotation: (new Array(5 * 4)).fill(0),
scale: (new Array(5 * 3)).fill(1),
};
}
var qA = (0, linear_algebra_1.Quat)();
var qB = (0, linear_algebra_1.Quat)();
var vA = (0, linear_algebra_1.Vec3)();
var vB = (0, linear_algebra_1.Vec3)();
function getClip(props, clip) {
var _a = (clip === null || clip === void 0 ? void 0 : clip.objects) || createClipObjects(), type = _a.type, invert = _a.invert, position = _a.position, rotation = _a.rotation, scale = _a.scale;
for (var i = 0, il = props.objects.length; i < il; ++i) {
var p = props.objects[i];
type[i] = Clip.Type[p.type];
invert[i] = p.invert;
linear_algebra_1.Vec3.toArray(p.position, position, i * 3);
linear_algebra_1.Quat.toArray(linear_algebra_1.Quat.setAxisAngle(qA, p.rotation.axis, (0, misc_1.degToRad)(p.rotation.angle)), rotation, i * 4);
linear_algebra_1.Vec3.toArray(p.scale, scale, i * 3);
}
return {
variant: props.variant,
objects: { count: props.objects.length, type: type, invert: invert, position: position, rotation: rotation, scale: scale }
};
}
Clip.getClip = getClip;
function areEqual(cA, cB) {
if (cA.variant !== cB.variant)
return false;
if (cA.objects.count !== cB.objects.count)
return false;
var oA = cA.objects, oB = cB.objects;
for (var i = 0, il = oA.count; i < il; ++i) {
if (oA.invert[i] !== oB.invert[i])
return false;
if (oA.type[i] !== oB.type[i])
return false;
linear_algebra_1.Vec3.fromArray(vA, oA.position, i * 3);
linear_algebra_1.Vec3.fromArray(vB, oB.position, i * 3);
if (!linear_algebra_1.Vec3.equals(vA, vB))
return false;
linear_algebra_1.Vec3.fromArray(vA, oA.scale, i * 3);
linear_algebra_1.Vec3.fromArray(vB, oB.scale, i * 3);
if (!linear_algebra_1.Vec3.equals(vA, vB))
return false;
linear_algebra_1.Quat.fromArray(qA, oA.rotation, i * 4);
linear_algebra_1.Quat.fromArray(qB, oB.rotation, i * 4);
if (!linear_algebra_1.Quat.equals(qA, qB))
return false;
}
return true;
}
Clip.areEqual = areEqual;
})(Clip = exports.Clip || (exports.Clip = {}));
;