Bladeren bron

added repr.setPickable(boolean)

Alexander Rose 6 jaren geleden
bovenliggende
commit
e332f7cb99

+ 1 - 0
src/mol-geo/geometry/geometry.ts

@@ -104,6 +104,7 @@ export namespace Geometry {
 export function createRenderableState(props: PD.Values<Geometry.Params>): RenderableState {
     return {
         visible: true,
+        pickable: true,
         depthMask: props.depthMask
     }
 }

+ 1 - 0
src/mol-gl/_spec/renderer.spec.ts

@@ -85,6 +85,7 @@ function createPoints() {
     }
     const state: RenderableState = {
         visible: true,
+        pickable: true,
         depthMask: true,
     }
 

+ 1 - 0
src/mol-gl/renderable.ts

@@ -12,6 +12,7 @@ import { Vec3 } from 'mol-math/linear-algebra';
 
 export type RenderableState = {
     visible: boolean
+    pickable: boolean
     depthMask: boolean
 }
 

+ 1 - 1
src/mol-gl/renderer.ts

@@ -103,7 +103,7 @@ namespace Renderer {
         let currentProgramId = -1
         const renderObject = (r: Renderable<RenderableValues & BaseValues>, variant: RenderVariant) => {
             const program = r.getProgram(variant)
-            if (r.state.visible) {
+            if (r.state.visible && (variant === 'draw' || r.state.pickable)) {
                 if (currentProgramId !== program.id) {
                     program.use()
                     program.setUniforms(globalUniforms)

+ 1 - 0
src/mol-math/geometry/gaussian-density/gpu.ts

@@ -232,6 +232,7 @@ function getGaussianDensityRenderObject(webgl: WebGLContext, drawCount: number,
     }
     const state: RenderableState = {
         visible: true,
+        pickable: false,
         depthMask: false
     }
 

+ 8 - 0
src/mol-repr/representation.ts

@@ -88,6 +88,7 @@ interface Representation<D, P extends PD.Params = {}> {
     getLoci: (pickingId: PickingId) => Loci
     mark: (loci: Loci, action: MarkerAction) => boolean
     setVisibility: (value: boolean) => void
+    setPickable: (value: boolean) => void
     destroy: () => void
 }
 namespace Representation {
@@ -98,6 +99,7 @@ namespace Representation {
         getLoci: () => EmptyLoci,
         mark: () => false,
         setVisibility: () => {},
+        setPickable: () => {},
         destroy: () => {}
     }
 
@@ -175,6 +177,11 @@ namespace Representation {
                     reprList[i].setVisibility(value)
                 }
             },
+            setPickable: (value: boolean) => {
+                for (let i = 0, il = reprList.length; i < il; ++i) {
+                    reprList[i].setPickable(value)
+                }
+            },
             destroy() {
                 for (let i = 0, il = reprList.length; i < il; ++i) {
                     reprList[i].destroy()
@@ -197,5 +204,6 @@ export interface Visual<D, P extends PD.Params> {
     getLoci: (pickingId: PickingId) => Loci
     mark: (loci: Loci, action: MarkerAction) => boolean
     setVisibility: (value: boolean) => void
+    setPickable: (value: boolean) => void
     destroy: () => void
 }

+ 3 - 0
src/mol-repr/shape/representation.ts

@@ -103,6 +103,9 @@ export function ShapeRepresentation<P extends ShapeParams>(): ShapeRepresentatio
         setVisibility(value: boolean) {
             renderObjects.forEach(ro => ro.state.visible = value)
         },
+        setPickable(value: boolean) {
+            renderObjects.forEach(ro => ro.state.pickable = value)
+        },
         destroy() {
             // TODO
             renderObjects.length = 0

+ 5 - 0
src/mol-repr/structure/complex-representation.ts

@@ -54,6 +54,10 @@ export function ComplexRepresentation<P extends StructureParams>(label: string,
         if (visual) visual.setVisibility(value)
     }
 
+    function setPickable(value: boolean) {
+        if (visual) visual.setPickable(value)
+    }
+
     function destroy() {
         if (visual) visual.destroy()
     }
@@ -70,6 +74,7 @@ export function ComplexRepresentation<P extends StructureParams>(label: string,
         getLoci,
         mark,
         setVisibility,
+        setPickable,
         destroy
     }
 }

+ 3 - 0
src/mol-repr/structure/complex-visual.ts

@@ -165,6 +165,9 @@ export function ComplexVisual<P extends ComplexParams>(builder: ComplexVisualGeo
         setVisibility(value: boolean) {
             if (renderObject) renderObject.state.visible = value
         },
+        setPickable(value: boolean) {
+            if (renderObject) renderObject.state.pickable = value
+        },
         destroy() {
             // TODO
             renderObject = undefined

+ 7 - 0
src/mol-repr/structure/units-representation.ts

@@ -147,6 +147,12 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, getPar
         })
     }
 
+    function setPickable(value: boolean) {
+        visuals.forEach(({ visual }) => {
+            visual.setPickable(value)
+        })
+    }
+
     function destroy() {
         visuals.forEach(({ visual }) => visual.destroy())
         visuals.clear()
@@ -168,6 +174,7 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, getPar
         getLoci,
         mark,
         setVisibility,
+        setPickable,
         destroy
     }
 }

+ 3 - 0
src/mol-repr/structure/units-visual.ts

@@ -195,6 +195,9 @@ export function UnitsVisual<P extends UnitsParams>(builder: UnitsVisualGeometryB
         setVisibility(value: boolean) {
             if (renderObject) renderObject.state.visible = value
         },
+        setPickable(value: boolean) {
+            if (renderObject) renderObject.state.pickable = value
+        },
         destroy() {
             // TODO
             renderObject = undefined

+ 9 - 1
src/mol-repr/volume/representation.ts

@@ -39,7 +39,7 @@ interface VolumeVisualGeometryBuilder<P extends VolumeParams, G extends Geometry
     updateValues(values: RenderableValues, newProps: PD.Values<P>): void
 }
 
-export function VolumeVisual<P extends VolumeParams>(builder: VolumeVisualGeometryBuilder<P, Geometry>) {
+export function VolumeVisual<P extends VolumeParams>(builder: VolumeVisualGeometryBuilder<P, Geometry>): VolumeVisual<P> {
     const { defaultProps, createGeometry, getLoci, mark, setUpdateState } = builder
     const { createRenderObject, updateValues } = builder
     const updateState = VisualUpdateState.create()
@@ -120,6 +120,9 @@ export function VolumeVisual<P extends VolumeParams>(builder: VolumeVisualGeomet
         setVisibility(value: boolean) {
             if (renderObject) renderObject.state.visible = value
         },
+        setPickable(value: boolean) {
+            if (renderObject) renderObject.state.pickable = value
+        },
         destroy() {
             // TODO
             renderObject = undefined
@@ -194,6 +197,10 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, getP
         if (visual) visual.setVisibility(value)
     }
 
+    function setPickable(value: boolean) {
+        if (visual) visual.setPickable(value)
+    }
+
     return {
         label,
         get renderObjects() {
@@ -206,6 +213,7 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, getP
         getLoci,
         mark,
         setVisibility,
+        setPickable,
         destroy
     }
 }