diff --git a/src/mol-model-formats/structure/property/assembly.ts b/src/mol-model-formats/structure/property/assembly.ts index 93b5ae666182502893aa324007e21196abc4bf31..062a75d1607891f461d8a815349cca72cc6e06bb 100644 --- a/src/mol-model-formats/structure/property/assembly.ts +++ b/src/mol-model-formats/structure/property/assembly.ts @@ -74,10 +74,11 @@ function operatorGroupsProvider(generators: Generator[], matrices: Matrices): () function getMatrices(pdbx_struct_oper_list: StructOperList): Matrices { const { id, matrix, vector, _schema } = pdbx_struct_oper_list; const matrices = new Map<string, Mat4>(); + const t = Vec3(); for (let i = 0, _i = pdbx_struct_oper_list._rowCount; i < _i; i++) { const m = Tensor.toMat4(Mat4(), _schema.matrix.space, matrix.value(i)); - const t = Tensor.toVec3(Vec3(), _schema.vector.space, vector.value(i)); + Tensor.toVec3(t, _schema.vector.space, vector.value(i)); Mat4.setTranslation(m, t); Mat4.setValue(m, 3, 3, 1); matrices.set(id.value(i), m); diff --git a/src/mol-repr/structure/visual/util/element.ts b/src/mol-repr/structure/visual/util/element.ts index d19d99f2cb774aa9821946739d354109c81826a6..e166b56bfaf14fd3828011268f1c519c25073b9a 100644 --- a/src/mol-repr/structure/visual/util/element.ts +++ b/src/mol-repr/structure/visual/util/element.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2023 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author David Sehnal <david.sehnal@gmail.com> @@ -80,15 +80,15 @@ export function createElementSphereMesh(ctx: VisualContext, unit: Unit, structur for (let i = 0; i < elementCount; i++) { if (ignore && ignore(elements[i])) continue; - l.element = elements[i]; pos(elements[i], v); v3add(center, center, v); count += 1; - builderState.currentGroup = i; + l.element = elements[i]; const size = themeSize(l); if (size > maxSize) maxSize = size; + builderState.currentGroup = i; addSphere(builderState, v, size * sizeFactor, detail); } @@ -132,17 +132,27 @@ export function createElementSphereImpostor(ctx: VisualContext, unit: Unit, stru let maxSize = 0; let count = 0; - for (let i = 0; i < elementCount; i++) { - if (ignore?.(elements[i])) continue; + if (ignore || theme.size.granularity !== 'uniform') { + for (let i = 0; i < elementCount; i++) { + if (ignore && ignore(elements[i])) continue; - pos(elements[i], v); - builder.add(v[0], v[1], v[2], i); - v3add(center, center, v); - count += 1; + pos(elements[i], v); + builder.add(v[0], v[1], v[2], i); + v3add(center, center, v); + count += 1; - l.element = elements[i]; - const size = themeSize(l); - if (size > maxSize) maxSize = size; + l.element = elements[i]; + const size = themeSize(l); + if (size > maxSize) maxSize = size; + } + } else { + for (let i = 0; i < elementCount; i++) { + pos(elements[i], v); + builder.add(v[0], v[1], v[2], i); + v3add(center, center, v); + } + count = elementCount; + maxSize = themeSize(l); } const oldBoundingSphere = spheres ? Sphere3D.clone(spheres.boundingSphere) : undefined;