molstar
Version:
A comprehensive macromolecular library.
111 lines • 5.95 kB
JavaScript
/**
* 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
;