Skip to content
Snippets Groups Projects
Commit e332f7cb authored by Alexander Rose's avatar Alexander Rose
Browse files

added repr.setPickable(boolean)

parent ff00b16e
Branches
Tags
No related merge requests found
...@@ -104,6 +104,7 @@ export namespace Geometry { ...@@ -104,6 +104,7 @@ export namespace Geometry {
export function createRenderableState(props: PD.Values<Geometry.Params>): RenderableState { export function createRenderableState(props: PD.Values<Geometry.Params>): RenderableState {
return { return {
visible: true, visible: true,
pickable: true,
depthMask: props.depthMask depthMask: props.depthMask
} }
} }
......
...@@ -85,6 +85,7 @@ function createPoints() { ...@@ -85,6 +85,7 @@ function createPoints() {
} }
const state: RenderableState = { const state: RenderableState = {
visible: true, visible: true,
pickable: true,
depthMask: true, depthMask: true,
} }
......
...@@ -12,6 +12,7 @@ import { Vec3 } from 'mol-math/linear-algebra'; ...@@ -12,6 +12,7 @@ import { Vec3 } from 'mol-math/linear-algebra';
export type RenderableState = { export type RenderableState = {
visible: boolean visible: boolean
pickable: boolean
depthMask: boolean depthMask: boolean
} }
......
...@@ -103,7 +103,7 @@ namespace Renderer { ...@@ -103,7 +103,7 @@ namespace Renderer {
let currentProgramId = -1 let currentProgramId = -1
const renderObject = (r: Renderable<RenderableValues & BaseValues>, variant: RenderVariant) => { const renderObject = (r: Renderable<RenderableValues & BaseValues>, variant: RenderVariant) => {
const program = r.getProgram(variant) const program = r.getProgram(variant)
if (r.state.visible) { if (r.state.visible && (variant === 'draw' || r.state.pickable)) {
if (currentProgramId !== program.id) { if (currentProgramId !== program.id) {
program.use() program.use()
program.setUniforms(globalUniforms) program.setUniforms(globalUniforms)
......
...@@ -232,6 +232,7 @@ function getGaussianDensityRenderObject(webgl: WebGLContext, drawCount: number, ...@@ -232,6 +232,7 @@ function getGaussianDensityRenderObject(webgl: WebGLContext, drawCount: number,
} }
const state: RenderableState = { const state: RenderableState = {
visible: true, visible: true,
pickable: false,
depthMask: false depthMask: false
} }
......
...@@ -88,6 +88,7 @@ interface Representation<D, P extends PD.Params = {}> { ...@@ -88,6 +88,7 @@ interface Representation<D, P extends PD.Params = {}> {
getLoci: (pickingId: PickingId) => Loci getLoci: (pickingId: PickingId) => Loci
mark: (loci: Loci, action: MarkerAction) => boolean mark: (loci: Loci, action: MarkerAction) => boolean
setVisibility: (value: boolean) => void setVisibility: (value: boolean) => void
setPickable: (value: boolean) => void
destroy: () => void destroy: () => void
} }
namespace Representation { namespace Representation {
...@@ -98,6 +99,7 @@ namespace Representation { ...@@ -98,6 +99,7 @@ namespace Representation {
getLoci: () => EmptyLoci, getLoci: () => EmptyLoci,
mark: () => false, mark: () => false,
setVisibility: () => {}, setVisibility: () => {},
setPickable: () => {},
destroy: () => {} destroy: () => {}
} }
...@@ -175,6 +177,11 @@ namespace Representation { ...@@ -175,6 +177,11 @@ namespace Representation {
reprList[i].setVisibility(value) reprList[i].setVisibility(value)
} }
}, },
setPickable: (value: boolean) => {
for (let i = 0, il = reprList.length; i < il; ++i) {
reprList[i].setPickable(value)
}
},
destroy() { destroy() {
for (let i = 0, il = reprList.length; i < il; ++i) { for (let i = 0, il = reprList.length; i < il; ++i) {
reprList[i].destroy() reprList[i].destroy()
...@@ -197,5 +204,6 @@ export interface Visual<D, P extends PD.Params> { ...@@ -197,5 +204,6 @@ export interface Visual<D, P extends PD.Params> {
getLoci: (pickingId: PickingId) => Loci getLoci: (pickingId: PickingId) => Loci
mark: (loci: Loci, action: MarkerAction) => boolean mark: (loci: Loci, action: MarkerAction) => boolean
setVisibility: (value: boolean) => void setVisibility: (value: boolean) => void
setPickable: (value: boolean) => void
destroy: () => void destroy: () => void
} }
\ No newline at end of file
...@@ -103,6 +103,9 @@ export function ShapeRepresentation<P extends ShapeParams>(): ShapeRepresentatio ...@@ -103,6 +103,9 @@ export function ShapeRepresentation<P extends ShapeParams>(): ShapeRepresentatio
setVisibility(value: boolean) { setVisibility(value: boolean) {
renderObjects.forEach(ro => ro.state.visible = value) renderObjects.forEach(ro => ro.state.visible = value)
}, },
setPickable(value: boolean) {
renderObjects.forEach(ro => ro.state.pickable = value)
},
destroy() { destroy() {
// TODO // TODO
renderObjects.length = 0 renderObjects.length = 0
......
...@@ -54,6 +54,10 @@ export function ComplexRepresentation<P extends StructureParams>(label: string, ...@@ -54,6 +54,10 @@ export function ComplexRepresentation<P extends StructureParams>(label: string,
if (visual) visual.setVisibility(value) if (visual) visual.setVisibility(value)
} }
function setPickable(value: boolean) {
if (visual) visual.setPickable(value)
}
function destroy() { function destroy() {
if (visual) visual.destroy() if (visual) visual.destroy()
} }
...@@ -70,6 +74,7 @@ export function ComplexRepresentation<P extends StructureParams>(label: string, ...@@ -70,6 +74,7 @@ export function ComplexRepresentation<P extends StructureParams>(label: string,
getLoci, getLoci,
mark, mark,
setVisibility, setVisibility,
setPickable,
destroy destroy
} }
} }
\ No newline at end of file
...@@ -165,6 +165,9 @@ export function ComplexVisual<P extends ComplexParams>(builder: ComplexVisualGeo ...@@ -165,6 +165,9 @@ export function ComplexVisual<P extends ComplexParams>(builder: ComplexVisualGeo
setVisibility(value: boolean) { setVisibility(value: boolean) {
if (renderObject) renderObject.state.visible = value if (renderObject) renderObject.state.visible = value
}, },
setPickable(value: boolean) {
if (renderObject) renderObject.state.pickable = value
},
destroy() { destroy() {
// TODO // TODO
renderObject = undefined renderObject = undefined
......
...@@ -147,6 +147,12 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, getPar ...@@ -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() { function destroy() {
visuals.forEach(({ visual }) => visual.destroy()) visuals.forEach(({ visual }) => visual.destroy())
visuals.clear() visuals.clear()
...@@ -168,6 +174,7 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, getPar ...@@ -168,6 +174,7 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, getPar
getLoci, getLoci,
mark, mark,
setVisibility, setVisibility,
setPickable,
destroy destroy
} }
} }
\ No newline at end of file
...@@ -195,6 +195,9 @@ export function UnitsVisual<P extends UnitsParams>(builder: UnitsVisualGeometryB ...@@ -195,6 +195,9 @@ export function UnitsVisual<P extends UnitsParams>(builder: UnitsVisualGeometryB
setVisibility(value: boolean) { setVisibility(value: boolean) {
if (renderObject) renderObject.state.visible = value if (renderObject) renderObject.state.visible = value
}, },
setPickable(value: boolean) {
if (renderObject) renderObject.state.pickable = value
},
destroy() { destroy() {
// TODO // TODO
renderObject = undefined renderObject = undefined
......
...@@ -39,7 +39,7 @@ interface VolumeVisualGeometryBuilder<P extends VolumeParams, G extends Geometry ...@@ -39,7 +39,7 @@ interface VolumeVisualGeometryBuilder<P extends VolumeParams, G extends Geometry
updateValues(values: RenderableValues, newProps: PD.Values<P>): void 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 { defaultProps, createGeometry, getLoci, mark, setUpdateState } = builder
const { createRenderObject, updateValues } = builder const { createRenderObject, updateValues } = builder
const updateState = VisualUpdateState.create() const updateState = VisualUpdateState.create()
...@@ -120,6 +120,9 @@ export function VolumeVisual<P extends VolumeParams>(builder: VolumeVisualGeomet ...@@ -120,6 +120,9 @@ export function VolumeVisual<P extends VolumeParams>(builder: VolumeVisualGeomet
setVisibility(value: boolean) { setVisibility(value: boolean) {
if (renderObject) renderObject.state.visible = value if (renderObject) renderObject.state.visible = value
}, },
setPickable(value: boolean) {
if (renderObject) renderObject.state.pickable = value
},
destroy() { destroy() {
// TODO // TODO
renderObject = undefined renderObject = undefined
...@@ -194,6 +197,10 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, getP ...@@ -194,6 +197,10 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, getP
if (visual) visual.setVisibility(value) if (visual) visual.setVisibility(value)
} }
function setPickable(value: boolean) {
if (visual) visual.setPickable(value)
}
return { return {
label, label,
get renderObjects() { get renderObjects() {
...@@ -206,6 +213,7 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, getP ...@@ -206,6 +213,7 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, getP
getLoci, getLoci,
mark, mark,
setVisibility, setVisibility,
setPickable,
destroy destroy
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment