UNPKG

molstar

Version:

A comprehensive macromolecular library.

106 lines (105 loc) 4.96 kB
"use strict"; /** * Copyright (c) 2021-2025 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 = Clip; const linear_algebra_1 = require("../mol-math/linear-algebra"); const misc_1 = require("../mol-math/misc"); const param_definition_1 = require("./param-definition"); const string_1 = require("./string"); function Clip() { } (function (Clip) { /** Clip object types */ Clip.Type = { none: 0, // to switch clipping off 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, t => (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)), transform: param_definition_1.ParamDefinition.Mat4(linear_algebra_1.Mat4.identity()), }, o => (0, string_1.stringToWords)(o.type)) }; function createClipObjects(count) { return { count: 0, type: (new Array(count)).fill(1), invert: (new Array(count)).fill(false), position: (new Array(count * 3)).fill(0), rotation: (new Array(count * 4)).fill(0), scale: (new Array(count * 3)).fill(1), transform: (new Array(count * 16)).fill(0), }; } const qA = (0, linear_algebra_1.Quat)(); const qB = (0, linear_algebra_1.Quat)(); const vA = (0, linear_algebra_1.Vec3)(); const vB = (0, linear_algebra_1.Vec3)(); const mA = (0, linear_algebra_1.Mat4)(); const mB = (0, linear_algebra_1.Mat4)(); function getClip(props, clip) { const count = props.objects.length; const { type, invert, position, rotation, scale, transform } = (clip === null || clip === void 0 ? void 0 : clip.objects) || createClipObjects(count); for (let i = 0; i < count; ++i) { const 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); linear_algebra_1.Mat4.toArray(p.transform, transform, i * 16); } return { variant: props.variant, objects: { count, type, invert, position, rotation, scale, transform } }; } Clip.getClip = getClip; function areEqual(cA, cB) { if (cA.variant !== cB.variant) return false; if (cA.objects.count !== cB.objects.count) return false; const oA = cA.objects, oB = cB.objects; for (let 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; linear_algebra_1.Mat4.fromArray(mA, oA.transform, i * 16); linear_algebra_1.Mat4.fromArray(mB, oB.transform, i * 16); if (!linear_algebra_1.Mat4.areEqual(mA, mB, linear_algebra_1.EPSILON)) return false; } return true; } Clip.areEqual = areEqual; })(Clip || (exports.Clip = Clip = {}));