From 331db15b5d16e38a7ef371574fd0a90c33169db7 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Thu, 10 Jan 2019 09:56:33 -0800 Subject: [PATCH] added cameraClipDistance to canvas3d --- src/mol-canvas3d/canvas3d.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index ba9315151..087a4fd41 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -34,6 +34,7 @@ export const Canvas3DParams = { // maxFps: PD.Numeric(30), cameraMode: PD.Select('perspective', [['perspective', 'Perspective'], ['orthographic', 'Orthographic']]), backgroundColor: PD.Color(Color(0x000000)), + cameraClipDistance: PD.Numeric(0, { min: 0.0, max: 50.0, step: 0.1 }, { description: 'The distance between camera and scene at which to clip regardless of near clipping plane.' }), clip: PD.Interval([1, 100], { min: 1, max: 100, step: 1 }), fog: PD.Interval([50, 100], { min: 1, max: 100, step: 1 }), pickingAlphaThreshold: PD.Numeric(0.5, { min: 0.0, max: 1.0, step: 0.01 }, { description: 'The minimum opacity value needed for an object to be pickable.' }), @@ -161,13 +162,24 @@ namespace Canvas3D { const nearFactor = (50 - p.clip[0]) / 50 const farFactor = -(50 - p.clip[1]) / 50 - const near = cDist - (bRadius * nearFactor) - const far = cDist + (bRadius * farFactor) + let near = cDist - (bRadius * nearFactor) + let far = cDist + (bRadius * farFactor) const fogNearFactor = (50 - p.fog[0]) / 50 const fogFarFactor = -(50 - p.fog[1]) / 50 - const fogNear = cDist - (bRadius * fogNearFactor) - const fogFar = cDist + (bRadius * fogFarFactor) + let fogNear = cDist - (bRadius * fogNearFactor) + let fogFar = cDist + (bRadius * fogFarFactor) + + if (camera.state.mode === 'perspective') { + near = Math.max(0.1, p.cameraClipDistance, near) + far = Math.max(1, far) + fogNear = Math.max(0.1, fogNear) + fogFar = Math.max(1, fogFar) + } else if (camera.state.mode === 'orthographic') { + if (p.cameraClipDistance > 0) { + near = Math.max(p.cameraClipDistance, near) + } + } if (near !== currentNear || far !== currentFar || fogNear !== currentFogNear || fogFar !== currentFogFar) { camera.setState({ near, far, fogNear, fogFar }) @@ -371,6 +383,7 @@ namespace Canvas3D { renderer.setClearColor(props.backgroundColor) } + if (props.cameraClipDistance !== undefined) p.cameraClipDistance = props.cameraClipDistance if (props.clip !== undefined) p.clip = [props.clip[0], props.clip[1]] if (props.fog !== undefined) p.fog = [props.fog[0], props.fog[1]] @@ -386,6 +399,7 @@ namespace Canvas3D { return { cameraMode: camera.state.mode, backgroundColor: renderer.props.clearColor, + cameraClipDistance: p.cameraClipDistance, clip: p.clip, fog: p.fog, pickingAlphaThreshold: renderer.props.pickingAlphaThreshold, -- GitLab