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 axisstring 轴名称 ('x', 'y', 'z') Returns:
boolean - 是否锁定 -
lockAllAxes()
-
锁定所有轴
-
lockAxis(axis, locked)
-
锁定指定轴,使其无法移动
Parameters:
Name Type Default Description axisstring 要锁定的轴 ('x', 'y', 'z', 'xy', 'yz', 'xz', 'xyz') lockedboolean true 是否锁定 -
onAdd(object)
-
当添加组件时。
Parameters:
Name Type Description objectTHING.BaseObject 对象。 - Overrides:
-
onRemove()
-
当移除组件时。
- Overrides:
-
setObjects(objs, ignoreCenter)
-
设置多个需添加组件的对象。
Parameters:
Name Type Default Description objsArray.<Object> 需要添加组件的对象。 ignoreCenterboolean false 是否忽略中心位置,默认为false,表示不忽略中心位置,需计算中心点。 -
unlockAllAxes()
-
解锁所有轴
-
unlockAxis(axis)
-
解锁指定轴
Parameters:
Name Type Description axisstring 要解锁的轴 ('x', 'y', 'z', 'xy', 'yz', 'xz', 'xyz')