UNPKG

molstar

Version:

A comprehensive macromolecular library.

111 lines 5.95 kB
"use strict"; /** * Copyright (c) 2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Sukolsak Sakshuwong <sukolsak@stanford.edu> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.GeometryControls = exports.GeometryParams = void 0; var tslib_1 = require("tslib"); var renderer_1 = require("../../mol-gl/renderer"); var geometry_1 = require("../../mol-math/geometry"); var component_1 = require("../../mol-plugin-state/component"); var mol_task_1 = require("../../mol-task"); var objects_1 = require("../../mol-plugin-state/objects"); var mol_state_1 = require("../../mol-state"); var param_definition_1 = require("../../mol-util/param-definition"); var set_1 = require("../../mol-util/set"); var glb_exporter_1 = require("./glb-exporter"); var obj_exporter_1 = require("./obj-exporter"); var stl_exporter_1 = require("./stl-exporter"); var usdz_exporter_1 = require("./usdz-exporter"); exports.GeometryParams = { format: param_definition_1.ParamDefinition.Select('glb', [ ['glb', 'glTF 2.0 Binary (.glb)'], ['stl', 'Stl (.stl)'], ['obj', 'Wavefront (.obj)'], ['usdz', 'Universal Scene Description (.usdz)'] ]) }; var GeometryControls = /** @class */ (function (_super) { (0, tslib_1.__extends)(GeometryControls, _super); function GeometryControls(plugin) { var _this = _super.call(this) || this; _this.plugin = plugin; _this.behaviors = { params: _this.ev.behavior(param_definition_1.ParamDefinition.getDefaultValues(exports.GeometryParams)) }; return _this; } GeometryControls.prototype.getFilename = function () { var models = this.plugin.state.data.select(mol_state_1.StateSelection.Generators.rootsOfType(objects_1.PluginStateObject.Molecule.Model)).map(function (s) { return s.obj.data; }); var uniqueIds = new Set(); models.forEach(function (m) { return uniqueIds.add(m.entryId.toUpperCase()); }); var idString = set_1.SetUtils.toArray(uniqueIds).join('-'); return "" + (idString || 'molstar-model'); }; GeometryControls.prototype.exportGeometry = function () { var _this = this; var task = mol_task_1.Task.create('Export Geometry', function (ctx) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var renderObjects, filename, style, boundingSphere, boundingBox, renderObjectExporter, i, il, blob, e_1; var _a, _b, _c, _d; return (0, tslib_1.__generator)(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 7, , 8]); renderObjects = (_a = this.plugin.canvas3d) === null || _a === void 0 ? void 0 : _a.getRenderObjects(); filename = this.getFilename(); style = (0, renderer_1.getStyle)((_b = this.plugin.canvas3d) === null || _b === void 0 ? void 0 : _b.props.renderer.style); boundingSphere = (_c = this.plugin.canvas3d) === null || _c === void 0 ? void 0 : _c.boundingSphereVisible; boundingBox = geometry_1.Box3D.fromSphere3D((0, geometry_1.Box3D)(), boundingSphere); renderObjectExporter = void 0; switch (this.behaviors.params.value.format) { case 'glb': renderObjectExporter = new glb_exporter_1.GlbExporter(style, boundingBox); break; case 'obj': renderObjectExporter = new obj_exporter_1.ObjExporter(filename, boundingBox); break; case 'stl': renderObjectExporter = new stl_exporter_1.StlExporter(boundingBox); break; case 'usdz': renderObjectExporter = new usdz_exporter_1.UsdzExporter(style, boundingBox, boundingSphere.radius); break; default: throw new Error('Unsupported format.'); } i = 0, il = renderObjects.length; _e.label = 1; case 1: if (!(i < il)) return [3 /*break*/, 5]; return [4 /*yield*/, ctx.update({ message: "Exporting object " + i + "/" + il })]; case 2: _e.sent(); return [4 /*yield*/, renderObjectExporter.add(renderObjects[i], (_d = this.plugin.canvas3d) === null || _d === void 0 ? void 0 : _d.webgl, ctx)]; case 3: _e.sent(); _e.label = 4; case 4: ++i; return [3 /*break*/, 1]; case 5: return [4 /*yield*/, renderObjectExporter.getBlob(ctx)]; case 6: blob = _e.sent(); return [2 /*return*/, { blob: blob, filename: filename + '.' + renderObjectExporter.fileExtension }]; case 7: e_1 = _e.sent(); this.plugin.log.error('' + e_1); throw e_1; case 8: return [2 /*return*/]; } }); }); }); return this.plugin.runTask(task, { useOverlay: true }); }; return GeometryControls; }(component_1.PluginComponent)); exports.GeometryControls = GeometryControls; //# sourceMappingURL=controls.js.map