molstar
Version:
A comprehensive macromolecular library.
58 lines • 2.06 kB
JavaScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { __spreadArray } from "tslib";
import { spline } from '../../../mol-math/interpolate';
import { ColorScale } from '../../../mol-util/color';
import { ValueCell } from '../../../mol-util';
export function getControlPointsFromString(s) {
return s.split(/\s*,\s*/).map(function (p) {
var ps = p.split(/\s*:\s*/);
return { x: parseFloat(ps[0]), alpha: parseFloat(ps[1]) };
});
}
export function getControlPointsFromVec2Array(array) {
return array.map(function (v) { return ({ x: v[0], alpha: v[1] }); });
}
export function createTransferFunctionTexture(controlPoints, listOrName, texture) {
var cp = __spreadArray(__spreadArray([
{ x: 0, alpha: 0 },
{ x: 0, alpha: 0 }
], controlPoints, true), [
{ x: 1, alpha: 0 },
{ x: 1, alpha: 0 },
], false);
var scale = ColorScale.create({ domain: [0, 1], listOrName: listOrName });
var n = 256;
var array = texture ? texture.ref.value.array : new Uint8Array(n * 4);
var k = 0;
var x1, x2;
var a0, a1, a2, a3;
var il = controlPoints.length + 1;
for (var i = 0; i < il; ++i) {
x1 = cp[i + 1].x;
x2 = cp[i + 2].x;
a0 = cp[i].alpha;
a1 = cp[i + 1].alpha;
a2 = cp[i + 2].alpha;
a3 = cp[i + 3].alpha;
var jl = Math.round((x2 - x1) * n);
for (var j = 0; j < jl; ++j) {
var t = j / jl;
array[k * 4 + 3] = Math.max(0, spline(a0, a1, a2, a3, t, 0.5) * 255);
scale.colorToArray(k / 255, array, k * 4);
++k;
}
}
var textureImage = { array: array, width: 256, height: 1 };
if (texture) {
ValueCell.update(texture, textureImage);
return texture;
}
else {
return ValueCell.create(textureImage);
}
}
//# sourceMappingURL=transfer-function.js.map