diff --git a/src/mol-plugin-state/transforms/representation.ts b/src/mol-plugin-state/transforms/representation.ts index dd61588bc7fbb1711cb7a886e401f5c7080cb01e..eca2ddd82c65d21cd128e84872f4679ceb584d3d 100644 --- a/src/mol-plugin-state/transforms/representation.ts +++ b/src/mol-plugin-state/transforms/representation.ts @@ -702,7 +702,7 @@ const ModelUnitcell3D = PluginStateTransform.BuiltIn({ return Task.create('Model Unit Cell', async ctx => { const symmetry = ModelSymmetry.Provider.get(a.data); if (!symmetry) return StateObject.Null; - const data = getUnitcellData(a.data, symmetry); + const data = getUnitcellData(a.data, symmetry, params); const repr = UnitcellRepresentation({ webgl: plugin.canvas3d?.webgl, ...plugin.representation.structure.themes }, () => UnitcellParams); await repr.createOrUpdate(params, data).runInContext(ctx); return new SO.Shape.Representation3D({ repr, source: a }, { label: `Unit Cell`, description: symmetry.spacegroup.name }); @@ -713,7 +713,7 @@ const ModelUnitcell3D = PluginStateTransform.BuiltIn({ const symmetry = ModelSymmetry.Provider.get(a.data); if (!symmetry) return StateTransformer.UpdateResult.Null; const props = { ...b.data.repr.props, ...newParams }; - const data = getUnitcellData(a.data, symmetry); + const data = getUnitcellData(a.data, symmetry, props); await b.data.repr.createOrUpdate(props, data).runInContext(ctx); b.data.source = a; return StateTransformer.UpdateResult.Updated; diff --git a/src/mol-repr/shape/model/unitcell.ts b/src/mol-repr/shape/model/unitcell.ts index fc28c1c9a7ad8abb2c90933d82fa491213550399..4acdbdd039e0f4bbb7096652bd0edf647988860b 100644 --- a/src/mol-repr/shape/model/unitcell.ts +++ b/src/mol-repr/shape/model/unitcell.ts @@ -29,10 +29,16 @@ interface UnitcellData { ref: Vec3 } +const CellRef = { + origin: 'Origin', + model: 'Model' +}; + const CellParams = { ...Mesh.Params, cellColor: PD.Color(ColorNames.orange), - cellScale: PD.Numeric(2, { min: 0.1, max: 5, step: 0.1 }) + cellScale: PD.Numeric(2, { min: 0.1, max: 5, step: 0.1 }), + ref: PD.Select('model', PD.objectToOptions(CellRef), { isEssential: true }) }; type MeshParams = typeof CellParams @@ -98,11 +104,12 @@ function getUnitcellShape(ctx: RuntimeContext, data: UnitcellData, props: Unitce // -export function getUnitcellData(model: Model, symmetry: Symmetry) { - return { - symmetry, - ref: Vec3.transformMat4(Vec3(), Model.getCenter(model), symmetry.spacegroup.cell.toFractional) - }; +export function getUnitcellData(model: Model, symmetry: Symmetry, props: UnitcellProps) { + const ref = Vec3(); + if (props.ref === 'model') { + Vec3.transformMat4(ref, Model.getCenter(model), symmetry.spacegroup.cell.toFractional); + } + return { symmetry, ref }; } export type UnitcellRepresentation = Representation<UnitcellData, UnitcellParams>