Ver Fonte

Examples: Improve molecule demos. (#24153)

* Examples: Improve molecule demos.

* Examples: Clean up.

* Examples: More clean up.
Michael Herzog há 3 anos atrás
pai
commit
0a99c633db
2 ficheiros alterados com 38 adições e 160 exclusões
  1. 25 105
      examples/css3d_molecules.html
  2. 13 55
      examples/webgl_loader_pdb.html

+ 25 - 105
examples/css3d_molecules.html

@@ -10,44 +10,6 @@
 				background-color: #050505;
 				background: radial-gradient(ellipse at center,  rgba(43,45,48,1) 0%,rgba(0,0,0,1) 100%);
 			}
-
-			#topmenu {
-				position: absolute;
-				top: 50px;
-				width: 100%;
-				padding: 10px;
-				box-sizing: border-box;
-				text-align: center;
-			}
-
-			#menu {
-				position: absolute;
-				bottom: 20px;
-				width: 100%;
-				padding: 10px;
-				box-sizing: border-box;
-				text-align: center;
-			}
-
-			button {
-				color: rgb(255,255,255);
-				background: rgb(255,255,255,0.1);
-				border: 0px;
-				padding: 5px 10px;
-				margin: 2px;
-				font-size: 14px;
-				cursor: pointer;
-			}
-
-				button:hover {
-					background-color: rgba(0,255,255,0.5);
-				}
-
-				button:active {
-					color: #000000;
-					background-color: rgba(0,255,255,1);
-				}
-
 			.bond {
 				width: 5px;
 				height: 10px;
@@ -59,10 +21,6 @@
 	<body>
 		<div id="container"></div>
 		<div id="info"><a href="https://threejs.org" target="_blank" rel="noopener">three.js</a> css3d - molecules</div>
-		<div id="topmenu">
-			<button id="b_a">Atoms</button><button id="b_b">Bonds</button><button id="b_ab">Atoms + Bonds</button>
-		</div>
-		<div id="menu"></div>
 
 		<!-- Import maps polyfill -->
 		<!-- Remove this when import maps will be widely supported -->
@@ -83,6 +41,7 @@
 			import { TrackballControls } from './jsm/controls/TrackballControls.js';
 			import { PDBLoader } from './jsm/loaders/PDBLoader.js';
 			import { CSS3DRenderer, CSS3DObject, CSS3DSprite } from './jsm/renderers/CSS3DRenderer.js';
+			import { GUI } from './jsm/libs/lil-gui.module.min.js';
 
 			let camera, scene, renderer;
 			let controls;
@@ -95,7 +54,11 @@
 			const tmpVec4 = new THREE.Vector3();
 			const offset = new THREE.Vector3();
 
-			let visualizationType = 2;
+			const VIZ_TYPE = {
+				'Atoms': 0,
+				'Bonds': 1,
+				'Atoms + Bonds': 2
+			};
 
 			const MOLECULES = {
 				'Ethanol': 'ethanol.pdb',
@@ -118,12 +81,15 @@
 				'Graphite': 'graphite.pdb'
 			};
 
+			const params = {
+				vizType: 2,
+				molecule: 'caffeine.pdb'
+			};
+
 			const loader = new PDBLoader();
 			const colorSpriteMap = {};
 			const baseSprite = document.createElement( 'img' );
 
-			const menu = document.getElementById( 'menu' );
-
 			init();
 			animate();
 
@@ -152,8 +118,7 @@
 
 				baseSprite.onload = function () {
 
-					loadMolecule( 'models/pdb/caffeine.pdb' );
-					createMenu();
+					loadMolecule( params.molecule );
 
 				};
 
@@ -163,56 +128,21 @@
 
 				window.addEventListener( 'resize', onWindowResize );
 
-			}
-
-			//
-
-			function generateButtonCallback( url ) {
-
-				return function () {
+				//
 
-					loadMolecule( url );
+				const gui = new GUI();
 
-				};
+				gui.add( params, 'vizType', VIZ_TYPE ).onChange( changeVizType );
+				gui.add( params, 'molecule', MOLECULES ).onChange( loadMolecule );
+				gui.open();
 
 			}
 
-			function createMenu() {
-
-				for ( const m in MOLECULES ) {
-
-					const button = document.createElement( 'button' );
-					button.innerHTML = m;
-					menu.appendChild( button );
+			function changeVizType( value ) {
 
-					const url = 'models/pdb/' + MOLECULES[ m ];
-
-					button.addEventListener( 'click', generateButtonCallback( url ) );
-
-				}
-
-				const b_a = document.getElementById( 'b_a' );
-				const b_b = document.getElementById( 'b_b' );
-				const b_ab = document.getElementById( 'b_ab' );
-
-				b_a.addEventListener( 'click', function () {
-
-					visualizationType = 0;
-					showAtoms();
-
-				} );
-				b_b.addEventListener( 'click', function () {
-
-					visualizationType = 1;
-					showBonds();
-
-				} );
-				b_ab.addEventListener( 'click', function () {
-
-					visualizationType = 2;
-					showAtomsBonds();
-
-				} );
+				if ( value === 0 ) showAtoms();
+				else if ( value === 1 ) showBonds();
+				else showAtomsBonds();
 
 			}
 
@@ -322,7 +252,9 @@
 
 			//
 
-			function loadMolecule( url ) {
+			function loadMolecule( model ) {
+
+				const url = 'models/pdb/' + model;
 
 				for ( let i = 0; i < objects.length; i ++ ) {
 
@@ -471,19 +403,7 @@
 
 					//console.log( "CSS3DObjects:", objects.length );
 
-					switch ( visualizationType ) {
-
-						case 0:
-							showAtoms();
-							break;
-						case 1:
-							showBonds();
-							break;
-						case 2:
-							showAtomsBonds();
-							break;
-
-					}
+					changeVizType( params.vizType );
 
 				} );
 

+ 13 - 55
examples/webgl_loader_pdb.html

@@ -6,30 +6,6 @@
 		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
 		<link type="text/css" rel="stylesheet" href="main.css">
 		<style>
-			#menu {
-				position: absolute;
-				bottom: 20px;
-				width: 100%;
-				text-align: center;
-				padding: 0;
-				margin: 0;
-			}
-
-			button {
-				color: rgb(255,255,255);
-				background: transparent;
-				border: 0px;
-				padding: 5px 10px;
-				cursor: pointer;
-			}
-			button:hover {
-				background-color: rgba(0,255,255,0.5);
-			}
-			button:active {
-				color: #000000;
-				background-color: rgba(0,255,255,1);
-			}
-
 			.label {
 				text-shadow: -1px 1px 1px rgb(0,0,0);
 				margin-left: 25px;
@@ -40,7 +16,6 @@
 	<body>
 		<div id="container"></div>
 		<div id="info"><a href="https://threejs.org" target="_blank" rel="noopener">three.js webgl</a> - molecules</div>
-		<div id="menu"></div>
 
 		<!-- Import maps polyfill -->
 		<!-- Remove this when import maps will be widely supported -->
@@ -61,6 +36,7 @@
 			import { TrackballControls } from './jsm/controls/TrackballControls.js';
 			import { PDBLoader } from './jsm/loaders/PDBLoader.js';
 			import { CSS2DRenderer, CSS2DObject } from './jsm/renderers/CSS2DRenderer.js';
+			import { GUI } from './jsm/libs/lil-gui.module.min.js';
 
 			let camera, scene, renderer, labelRenderer;
 			let controls;
@@ -87,11 +63,13 @@
 				'Graphite': 'graphite.pdb'
 			};
 
+			const params = {
+				molecule: 'caffeine.pdb'
+			};
+
 			const loader = new PDBLoader();
 			const offset = new THREE.Vector3();
 
-			const menu = document.getElementById( 'menu' );
-
 			init();
 			animate();
 
@@ -137,46 +115,26 @@
 
 				//
 
-				loadMolecule( 'models/pdb/caffeine.pdb' );
-				createMenu();
+				loadMolecule( params.molecule );
 
 				//
 
 				window.addEventListener( 'resize', onWindowResize );
 
-			}
-
-			//
-
-			function generateButtonCallback( url ) {
-
-				return function () {
-
-					loadMolecule( url );
-
-				};
-
-			}
-
-			function createMenu() {
-
-				for ( const m in MOLECULES ) {
-
-					const button = document.createElement( 'button' );
-					button.innerHTML = m;
-					menu.appendChild( button );
-
-					const url = 'models/pdb/' + MOLECULES[ m ];
+				//
 
-					button.addEventListener( 'click', generateButtonCallback( url ) );
+				const gui = new GUI();
 
-				}
+				gui.add( params, 'molecule', MOLECULES ).onChange( loadMolecule );
+				gui.open();
 
 			}
 
 			//
 
-			function loadMolecule( url ) {
+			function loadMolecule( model ) {
+
+				const url = 'models/pdb/' + model;
 
 				while ( root.children.length > 0 ) {