Changing parameters

0

Made a change to an object when changing values in the options menu. To do this, redid the mechanism for creating geometry.

this.createGeometry = function ( geometryType, params ) {

			let geometry = null;
			let paramsArray;

			if ( !(params instanceof Object) ) {

				console.error( 'params must be an object. Now params are ' + typeof params );
				return;

			}

			switch ( geometryType ) {

				case 'BoxGeometry':

					geometry = new THREE.BoxGeometry();

					this.checkParams( params, geometry.parameters );

					paramsArray = Object.values( params );
//применяем оператор расширения, очень удобная штука, код получается очень лаконичным
					geometry = new THREE.BoxGeometry( ...paramsArray );

					break;

I check the transferred parameters, if there is no parameter or it is not set to a value, I am writing a warning to the console.

	this.checkParams = function( paramsToCheck, paramsTemplate ) {

			if ( !(paramsToCheck instanceof Object) ) {
	
				console.error( 'paramsToCheck must be an object. Now params are ' + typeof params );
				return;
	
			}
	
			if ( !(paramsTemplate instanceof Object) ) {
	
				console.error( 'paramsTamplate must be an object. Now params are ' + typeof params );
				return;
	
			}
	
			let data = {};
			Object.assign( data, paramsTemplate );
	
			for (const key in data) {
	
				if ( !paramsToCheck.hasOwnProperty(key) ) {
	
					console.warn( 'Parameter "' + key + '" is missing ' );
	
				}
				else {
	
					if ( paramsToCheck[ key ] === undefined && paramsToCheck[ key ] === '' ) {
	
						console.warn ( '"' + key + '" not set');
	
					}
	
				}
	
			}
	
		}

Function for changing parameters, on the event of the input field “onInput”. The createGeometry function (entity.geometry.type, params) is also used here;

this.updateSelectedObject = function( parameterName, parameterValue, entity ) {

			let geom = entity.geometry;
	
					let params = {};
                          // берем параметры выделенного объекта
					Object.assign( params, geom.parameters );
                           // присваиваем параметр из поля ввода одноименному параметру
					params[ parameterName ] = parameterValue;
                           // создаем новую геометрию
					let newGeom = this.createGeometry ( entity.geometry.type, params );
	
					entity.geometry.dispose();
                           // присваиваем новую геометрию выделенному объекту
					entity.geometry = newGeom;
	                   // обновляем отображение сетки
					let wireframe = entity.getObjectByName( 'wireframe' );
					let newWireframeGeometry = new THREE.WireframeGeometry( newGeom );
					wireframe.geometry = newWireframeGeometry;
                           // Обновляем отображение BoundingBox. Если в случае с объектом Object 3D нужно заменить geomtry, то тут нужно заменить box новым
	
					let boundingBox = entity.getObjectByName( 'BoundingBox' );
					entity.geometry.computeBoundingBox();
					let box = new THREE.Box3Helper( entity.geometry.boundingBox );
					boundingBox.box = box.box;
	
		}

Now you can add the creation of the remaining primitives, changing the parameters can be attached to any object.

0