Ver Fonte

remove clipSphere option & param cleanup

- clip objects are better
- includeParent option not useful for gaussian-surface visuals
Alexander Rose há 3 anos atrás
pai
commit
aa2222c086

+ 3 - 2
CHANGELOG.md

@@ -12,8 +12,9 @@ Note that since we don't clearly distinguish between a public and private interf
 - Add dynamicBonds to ``Structure`` props (force re-calc on model change)
     - Expose as optional param in root structure transform helper
 - Add ``invertCantorPairing`` helper function
-- Add ``Mesh`` processing helpers: ``.trimByPositionTest`` and ``.smoothEdges``
-- Add ``clipSphere`` param to molecular-surface-mesh visual
+- Add ``Mesh`` processing helper ``.smoothEdges``
+- Smooth border of molecular-surface with ``includeParent`` enabled
+- Hide ``includeParent`` option from gaussian-surface visuals (not particularly useful)
 
 ## [v2.2.0] - 2021-07-31
 

+ 0 - 31
src/mol-geo/geometry/mesh/mesh.ts

@@ -606,37 +606,6 @@ export namespace Mesh {
         return mesh;
     }
 
-    export function trimByPositionTest(mesh: Mesh, test: (p: Vec3) => boolean) {
-        const { vertexBuffer, indexBuffer, triangleCount } = mesh;
-        const vb = vertexBuffer.ref.value;
-        const ib = indexBuffer.ref.value;
-
-        // new
-        const index = ChunkedArray.create(Uint32Array, 3, 1024, triangleCount);
-
-        const v = Vec3();
-
-        let newTriangleCount = 0;
-        for (let i = 0; i < triangleCount; ++i) {
-            const a = ib[i * 3];
-            const b = ib[i * 3 + 1];
-            const c = ib[i * 3 + 2];
-
-            if (!test(Vec3.fromArray(v, vb, a * 3))) continue;
-            if (!test(Vec3.fromArray(v, vb, b * 3))) continue;
-            if (!test(Vec3.fromArray(v, vb, c * 3))) continue;
-
-            ChunkedArray.add3(index, a, b, c);
-            newTriangleCount += 1;
-        }
-
-        const newIb = ChunkedArray.compact(index);
-        mesh.triangleCount = newTriangleCount;
-        ValueCell.update(indexBuffer, newIb) as ValueCell<Uint32Array>;
-
-        return mesh;
-    }
-
     //
 
     export const Params = {

+ 2 - 0
src/mol-repr/structure/visual/gaussian-density-volume.ts

@@ -44,6 +44,7 @@ export const GaussianDensityVolumeParams = {
     ...ComplexDirectVolumeParams,
     ...GaussianDensityParams,
     ignoreHydrogens: PD.Boolean(false),
+    includeParent: PD.Boolean(false, { isHidden: true }),
 };
 export type GaussianDensityVolumeParams = typeof GaussianDensityVolumeParams
 
@@ -99,6 +100,7 @@ export const UnitsGaussianDensityVolumeParams = {
     ...UnitsDirectVolumeParams,
     ...GaussianDensityParams,
     ignoreHydrogens: PD.Boolean(false),
+    includeParent: PD.Boolean(false, { isHidden: true }),
 };
 export type UnitsGaussianDensityVolumeParams = typeof UnitsGaussianDensityVolumeParams
 

+ 1 - 0
src/mol-repr/structure/visual/gaussian-surface-mesh.ts

@@ -30,6 +30,7 @@ const SharedParams = {
     ...ColorSmoothingParams,
     ignoreHydrogens: PD.Boolean(false),
     tryUseGpu: PD.Boolean(true),
+    includeParent: PD.Boolean(false, { isHidden: true }),
 };
 type SharedParams = typeof SharedParams
 

+ 1 - 0
src/mol-repr/structure/visual/gaussian-surface-wireframe.ts

@@ -42,6 +42,7 @@ export const GaussianWireframeParams = {
     sizeFactor: PD.Numeric(3, { min: 0, max: 10, step: 0.1 }),
     lineSizeAttenuation: PD.Boolean(false),
     ignoreHydrogens: PD.Boolean(false),
+    includeParent: PD.Boolean(false, { isHidden: true }),
 };
 export type GaussianWireframeParams = typeof GaussianWireframeParams
 

+ 1 - 21
src/mol-repr/structure/visual/molecular-surface-mesh.ts

@@ -21,20 +21,12 @@ import { MeshValues } from '../../../mol-gl/renderable/mesh';
 import { Texture } from '../../../mol-gl/webgl/texture';
 import { WebGLContext } from '../../../mol-gl/webgl/context';
 import { applyMeshColorSmoothing, ColorSmoothingParams, getColorSmoothingProps } from './util/color';
-import { Mat4, Vec3 } from '../../../mol-math/linear-algebra';
 
 export const MolecularSurfaceMeshParams = {
     ...UnitsMeshParams,
     ...MolecularSurfaceCalculationParams,
     ...CommonSurfaceParams,
     ...ColorSmoothingParams,
-    clipSphere: PD.MappedStatic('off', {
-        on: PD.Group({
-            center: PD.Vec3(Vec3()),
-            radius: PD.Numeric(1, { min: 0, max: 100, step: 0.1 })
-        }),
-        off: PD.Group({})
-    }),
 };
 export type MolecularSurfaceMeshParams = typeof MolecularSurfaceMeshParams
 export type MolecularSurfaceMeshProps = PD.Values<MolecularSurfaceMeshParams>
@@ -56,12 +48,7 @@ async function createMolecularSurfaceMesh(ctx: VisualContext, unit: Unit, struct
     };
     const surface = await computeMarchingCubesMesh(params, mesh).runAsChild(ctx.runtime);
 
-    if (props.clipSphere.name === 'on') {
-        const { center, radius } = props.clipSphere.params;
-        const c = Vec3.transformMat4(Vec3(), center, Mat4.invert(Mat4(), transform));
-        const r = radius / Mat4.getMaxScaleOnAxis(transform);
-        Mesh.trimByPositionTest(surface, p => Vec3.distance(p, c) < r);
-
+    if (props.includeParent) {
         const iterations = Math.ceil(2 / props.resolution);
         Mesh.smoothEdges(surface, iterations);
     }
@@ -97,13 +84,6 @@ export function MolecularSurfaceMeshVisual(materialId: number): UnitsVisual<Mole
                 if (newProps.smoothColors.params.resolutionFactor !== currentProps.smoothColors.params.resolutionFactor) state.updateColor = true;
                 if (newProps.smoothColors.params.sampleStride !== currentProps.smoothColors.params.sampleStride) state.updateColor = true;
             }
-
-            if (newProps.clipSphere.name !== currentProps.clipSphere.name) {
-                state.createGeometry = true;
-            } else if (newProps.clipSphere.name === 'on' && currentProps.clipSphere.name === 'on') {
-                if (!Vec3.exactEquals(newProps.clipSphere.params.center, currentProps.clipSphere.params.center)) state.createGeometry = true;
-                if (newProps.clipSphere.params.radius !== currentProps.clipSphere.params.radius) state.createGeometry = true;
-            }
         },
         processValues: (values: MeshValues, geometry: Mesh, props: PD.Values<MolecularSurfaceMeshParams>, theme: Theme, webgl?: WebGLContext) => {
             const { resolution, colorTexture } = geometry.meta as MolecularSurfaceMeta;