Browse Source

load all models or assembly preset

David Sehnal 4 năm trước cách đây
mục cha
commit
7c6827f5f5

+ 9 - 0
src/apps/viewer/index.ts

@@ -154,6 +154,15 @@ export class Viewer {
         }));
     }
 
+    async loadAllModelsOrAssemblyFromUrl(url: string, format: BuiltInTrajectoryFormat = 'mmcif', isBinary = false) {
+        const plugin = this.plugin;
+
+        const data = await plugin.builders.data.download({ url, isBinary }, { state: { isGhost: true } });
+        const trajectory = await plugin.builders.structure.parseTrajectory(data, format);
+
+        await this.plugin.builders.structure.hierarchy.applyPreset(trajectory, 'all-models', { useDefaultIfSingleModel: true });
+    }
+
     async loadStructureFromData(data: string | number[], format: BuiltInTrajectoryFormat, options?: { dataLabel?: string }) {
         const _data = await this.plugin.builders.data.rawData({ data, label: options?.dataLabel });
         const trajectory = await this.plugin.builders.structure.parseTrajectory(_data, format);

+ 10 - 1
src/mol-plugin-state/builder/structure/hierarchy-preset.ts

@@ -73,6 +73,11 @@ const defaultPreset = TrajectoryHierarchyPresetProvider({
     }
 });
 
+const AllModelsParams = (a: PluginStateObject.Molecule.Trajectory | undefined, plugin: PluginContext) => ({
+    useDefaultIfSingleModel: PD.Optional(PD.Boolean(false)),
+    ...CommonParams(a, plugin)
+});
+
 const allModels = TrajectoryHierarchyPresetProvider({
     id: 'preset-trajectory-all-models',
     display: {
@@ -82,11 +87,15 @@ const allModels = TrajectoryHierarchyPresetProvider({
     isApplicable: o => {
         return o.data.frameCount > 1;
     },
-    params: CommonParams,
+    params: AllModelsParams,
     async apply(trajectory, params, plugin) {
         const tr = StateObjectRef.resolveAndCheck(plugin.state.data, trajectory)?.obj?.data;
         if (!tr) return { };
 
+        if (tr.frameCount === 1 && params.useDefaultIfSingleModel) {
+            return defaultPreset.apply(trajectory, params as any, plugin);
+        }
+
         const builder = plugin.builders.structure;
 
         const models = [], structures = [];