TransformControlComponent(param)

TransformControlComponent 物体变换组件

new TransformControlComponent(param)

提供物体变换的功能,变换模式包括平移、旋转和缩放三种,坐标系变换包括世界坐标系和本地坐标系两种。注意:不能跟拖拽组件(DragComponent)或物体拖拽组件(DragControlComponent)同时使用。可通过组件所依附的对象注册变换事件,object.on('TRANSFORM_CONTROL_UPDATE',()=>{ console.log('change') })

变换控制组件类构造函数,用于实现物体变换的功能。
Parameters:
Name Type Description
param object 参数列表
Example
var app = new THING.App();
	var gui = new dat.GUI();

	app.camera.position = [20,20,20];
	app.background = [0.5, 0.5, 0.5];
   
	for (let i = 0; i < 5; i++) {
		const name = 'box' + i;
		window[name] = new THING.Box(2,2,2);
		window[name].position = [-10 + i * 4, 0, 0]
	}

	const component = new THING.EXTEND.TransformControlComponent();
   
	// 创建一个空对象,通过setObjects给多个对象添加组件
	window.emptyObject = new THING.Object3D();
	emptyObject.addComponent(component,'transformControlComponent');
	emptyObject.transformControlComponent.setObjects([box0, box1, box3])

	// 监听物体变换组件更新事件
	emptyObject.on('TRANSFORM_CONTROL_UPDATE', () => {
		console.warn('update');
	});

	const transformation = [
		'translate',
		'angle',
		'scale'
	];
	const coordinate = [
		'worldCoordinate',
		'localCoordinate'
	];

	const dataObj = {
		Coordinate:coordinate[0],
		Transformation:transformation[0],
		Snap:0,
		KeepSize:false,
		Size:1
	};

	gui.add(dataObj, 'Coordinate',coordinate).onChange(function(){
		if(dataObj.Coordinate === 'worldCoordinate'){
			emptyObject.transformControlComponent.space = 'world';
		}else if(dataObj.Coordinate === 'localCoordinate'){
			emptyObject.transformControlComponent.space = 'local';
		}
	});

	gui.add(dataObj, 'Transformation',transformation).onChange(function(){
		if(dataObj.Transformation === 'translate'){
			emptyObject.transformControlComponent.mode = 'translate';
		}else if(dataObj.Transformation === 'angle'){
			emptyObject.transformControlComponent.mode = 'angle';
		}else if(dataObj.Transformation === 'scale'){
			emptyObject.transformControlComponent.mode = 'scale';
		}
	});

	gui.add(dataObj,'Snap',0, 45).step(0.1).onChange(function(e){
		emptyObject.transformControlComponent.snap = dataObj.Snap;
	});

	let factor = gui.addFolder('factor');
	factor.add(dataObj,'KeepSize').onChange(function(e){
		emptyObject.transformControlComponent.keepSize = dataObj.KeepSize;
	});

	factor.add(dataObj,'Size',0.1, 10).step(0.1).onChange(function(e){
		emptyObject.transformControlComponent.size = dataObj.Size;
	});

Extends

Members

active :boolean

激活或停用组件。
Overrides:

app :THING.App

获取应用程序。
Overrides:

keepSize :boolean

设置操作杆是否固定呈现出的大小,true开启、false关闭,默认开启。

mode :string

控制变换模式,包括平移translate、旋转angle和缩放scale,默认为平移。

object :THING.BaseObject

获取对象。
Overrides:

onActiveChange :OnActiveChangeComponentCallback

活动状态改变时的回调函数。
Overrides:

onAfterAdd :OnAfterAddComponentCallback

添加之后。
Overrides:

onAfterAddChild :OnAddChildComponentCallback

添加子对象之后的回调函数。
Overrides:

onAfterRemove :OnAfterRemoveComponentCallback

移除之后。
Overrides:

onAfterRemoveChild :OnRemoveChildComponentCallback

移除子对象之后的回调函数。
Overrides:

onBeforeAdd :OnBeforeAddComponentCallback

添加之前。
Overrides:

onBeforeAddChild :OnAddChildComponentCallback

添加子对象之前的回调函数。
Overrides:

onBeforeRemove :OnBeforeRemoveComponentCallback

移除之前。
Overrides:

onBeforeRemoveChild :OnRemoveChildComponentCallback

移除子对象之前的回调函数。
Overrides:

onCopy :OnCopyComponentCallback

复制时的回调函数。
Overrides:

onExport :OnExportComponentCallback

导出数据时。
Overrides:

onImport :OnImportComponentCallback

导入数据时。
Overrides:

onInit :OnInitComponentCallback

初始化时的回调函数。
Overrides:

onLoadResource :OnLoadResourceComponentCallback

加载资源时的回调函数。
Overrides:

onParentChange :OnParentChangeComponentCallback

改变父对象时的回调函数。
Overrides:

onRefresh :OnRefreshComponentCallback

刷新时的回调函数。
Overrides:

onResize :OnResizeComponentCallback

调整大小时的回调函数。
Overrides:

onUnloadResource :OnUnloadResourceComponentCallback

卸载资源时的回调函数。
Overrides:

onUpdate :OnUpdateComponentCallback

更新时的回调函数。
Overrides:

onVisibleChange :OnVisibleChangeComponentCallback

可见性改变时的回调函数。
Overrides:

size :number

操作杆固定大小情况下,再设置操作杆的大小。

snap :number

设置物体操作时平移、旋转和缩放变化的阈值。

space :string

控制坐标系的变换,包括世界坐标系world和本地坐标系local,默认为世界坐标系。

Methods

getLockedAxesState() → {object}

获取当前轴锁定状态
Returns:
object - 轴锁定状态

getObjects() → {Array.<Object>}

获取添加组件的对象。
Returns:
Array.<Object> - 添加组件的对象。

isAxisLocked(axis) → {boolean}

获取轴的锁定状态
Parameters:
Name Type Description
axis string 轴名称 ('x', 'y', 'z')
Returns:
boolean - 是否锁定

lockAllAxes()

锁定所有轴

lockAxis(axis, locked)

锁定指定轴,使其无法移动
Parameters:
Name Type Default Description
axis string 要锁定的轴 ('x', 'y', 'z', 'xy', 'yz', 'xz', 'xyz')
locked boolean true 是否锁定

onAdd(object)

当添加组件时。
Parameters:
Name Type Description
object THING.BaseObject 对象。
Overrides:

onRemove()

当移除组件时。
Overrides:

setObjects(objs, ignoreCenter)

设置多个需添加组件的对象。
Parameters:
Name Type Default Description
objs Array.<Object> 需要添加组件的对象。
ignoreCenter boolean false 是否忽略中心位置,默认为false,表示不忽略中心位置,需计算中心点。

unlockAllAxes()

解锁所有轴

unlockAxis(axis)

解锁指定轴
Parameters:
Name Type Description
axis string 要解锁的轴 ('x', 'y', 'z', 'xy', 'yz', 'xz', 'xyz')