new Panorama()
全景图类,用于在三维场景中创建可交互漫游的全景图系统。支持多张全景图以图结构组织,通过位置坐标定义全景节点之间的空间关系,用户可在不同全景节点间切换浏览,支持淡入淡出(Fade)和拉伸过渡(Stretch)两种切换动画。适用于室内漫游、街景浏览、虚拟看房、景区导览等场景。
Example
// 创建多张全景图构成的漫游链路
const datas = [
{uri: './pano/room1.jpg', rotationY: 0, position: [-30, 0, 0], link: [1]},
{uri: './pano/room2.jpg', rotationY: 0, position: [-20, 0, 0], link: [0, 2]},
{uri: './pano/room3.jpg', rotationY: 0, position: [-10, 0, 0], link: [1, 3]},
{uri: './pano/room4.jpg', rotationY: 0, position: [0, 0, 0], link: [2]}
];
const panorama = new THING.EXTEND.Panorama({ data: datas, firstIndex: 0 });
// 切换到索引 2 的全景图
panorama.changePano({
link: { from: 0, to: 2 },
time: 500,
animationType: THING.EXTEND.PanoramaAnimationType.Fade,
onComplete: function() {
console.log('全景切换完成');
}
});
Extends
Members
-
app :THING.App
-
获取app对象
- Inherited From:
Example
let object = new THING.BaseObject(); let app = object.app; let ret = app == THING.App.current; // @expect(ret == true) -
brothers :THING.Selector
-
获取兄弟节点(同级节点)
- Inherited From:
Example
let box1 = new THING.Box(); let box2 = new THING.Box({parent: box1}); let box3 = new THING.Box({parent: box1}); let brothers = box3.brothers; // @expect(brothers.length == 1); -
children :THING.Selector
-
获取孩子
- Inherited From:
Example
let object = new THING.BaseObject(); let child= new THING.BaseObject({parent: object}); let children = object.children; let ret = children.length == 1; // @expect(ret == true) -
readonly components :Map.<String, THING.BaseComponent>
-
获取所有组件
- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'component1'); obj.addComponent(new THING.BaseComponent(), 'component2'); // @expect(obj.components.size == 2) -
destroyable :boolean
-
设置/获取 对象是否可以被销毁
- Inherited From:
Example
let object = new THING.BaseObject(); object.destroyable = true; // @expect(object.destroyable == true) -
dtType :string
-
设置/获取 孪生体类型
- Inherited From:
Example
let object = new THING.BaseObject(); object.dtType = 'Equipment'; // @expect(object.dtType == 'Equipment') -
events :Array.<ObjectListenerInfo>
-
获取当前对象注册的所有事件监听器的详细列表。该属性返回一个 ObjectListenerInfo 类型的数组,每一项包含一个事件监听器的全部信息。ObjectListenerInfo 格式参考(常用字段如下):- name: 事件名称(一般为小写,如 "click", "update", "mouseenter" 等)- callback: 回调函数,事件触发时调用- context: 回调函数的上下文对象- once: 是否为一次性监听(只会触发一次,之后移除)- filter: 事件过滤函数(可选)- id: 事件监听唯一标识(可选)- other: 可能包含的其他参数或元数据
- Inherited From:
Example
let object = new THING.BaseObject(); object.on('click', function() { console.log('clicked'); }); // 获取所有事件监听器 let allEvents = object.events; // @expect(Array.isArray(allEvents)); // @expect(allEvents.length >= 0); // allEvents 结果类似: // [{ // name: 'click', // callback: ƒ, // context: object, // once: false, // filter: undefined, // id: 1 // }, ...] -
id :string
-
设置/获取 物体id
- Inherited From:
Example
let object = new THING.BaseObject(); object.id = 'DEVICE_007'; // @expect(object.id == 'DEVICE_007') -
name :string
-
设置/获取 物体名称
- Inherited From:
Example
let object = new THING.BaseObject(); // @expect(object.name == ''); object.name = 'car'; // @expect(object.name == 'car'); -
parent :THING.BaseObject
-
设置/获取 父物体
- Inherited From:
Example
let parent = new THING.BaseObject(); let child = new THING.BaseObject({parent: parent}); let ret = child.parent == parent; // @expect(ret == true); -
parents :THING.Selector
-
获取所有的祖先(父物体,父物体的父物体等,直到查询到根节点--app.root)
- Inherited From:
Example
let box1 = new THING.Box(); let box2 = new THING.Box({parent: box1}); let parents = box2.parents; // @expect(parents.length == 2); -
queryable :boolean
-
设置/获取 对象是否可以被查询
- Inherited From:
Example
let object = new THING.BaseObject(); object.name = 'Hidden'; let ret = app.query('Hidden'); // @expect(ret[0].name = 'Hidden') object.queryable = false; ret = app.query('Hidden'); // @expect(ret.length = 0) -
relationships :Array.<THING.Relationship>
-
设置/获取 关系
- Inherited From:
Example
let object = new THING.Object3D(); let source = new THING.Object3D(); let target = new THING.Object3D(); let relationship = new THING.Relationship({ type: 'control', source: source, target: target }); object.addRelationship(relationship); let ret = object.relationships[0].type == 'control'; // @expect(ret == true) -
tags :Set.<string>
-
设置/获取 物体标签
- Inherited From:
Example
// Get tags let tags = object.tags; console.log(tags); // Set tags by array object.tags = ['one','two','three']; // Set tags by set object.tags = new Set(['one','two','three']); -
type :string
-
获取类型
- Inherited From:
Example
let object = new THING.BaseObject(); let type = object.type; // @expect(type == 'BaseObject') -
userData :object
-
设置/获取 物体的自定义属性
- Inherited From:
Example
let object = new THING.BaseObject(); object.userData['Notebook'] = { name: 'FlyingCar', price: 100 }; let name = object.userData['Notebook'].name; // @expect(name == 'FlyingCar') let price = object.userData['Notebook'].price // @expect(price == 100) -
uuid :string
-
设置/获取 物体的唯一标识
- Inherited From:
Example
let object = new THING.BaseObject({uuid: 10000}); // @expect(object.uuid == 10000) object.uuid = THING.Math.generateUUID(); // @expect(object.id != 10000)
Methods
-
add(object, options) → {boolean}
-
添加一个BaseObject作为自己的孩子
Parameters:
Name Type Description objectTHING.BaseObject 待添加的BaseObject optionsobject 参数 主要是子类定义 Returns:
boolean - 返回一个布尔值,表示是否添加成功- Inherited From:
Example
let parent = new THING.BaseObject(); let child = new THING.BaseObject(); parent.add(child); let ret = child.isChildOf(parent); // @expect(ret == true); -
addComponent(component, name, args?) → {boolean}
-
添加组件
Parameters:
Name Type Description componentTHING.BaseComponent | object 组件对象类名或者组件对象实例 namestring 组件名称 args?object 初始化具体组件的参数对象 如果第一个参数是一个类名而不是一个实例,添加时会根据初始化参数和类名创建一个组件实例 Returns:
boolean - 是否成功 如果给obj添加了一个name为myComponent的组件,添加成功后,可通过obj.myComponent获取该组件对象- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'myComponent'); // @expect(obj.myComponent != null) -
destroy() → {boolean}
-
销毁物体
Returns:
boolean - 返回一个布尔值,表示是否销毁成功- Inherited From:
Example
let object = new THING.BaseObject(); // @expect(object.destroyed == false); object.destroy(); // @expect(object.destroyed == true) -
getAllComponents() → {Array.<THING.BaseComponent>}
-
获取所有组件
Returns:
Array.<THING.BaseComponent>- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'component1'); obj.addComponent(new THING.BaseComponent(), 'component2'); let components = obj.getAllComponents(); // @expect(components.length == 2) -
getAttribute(key, separator) → {*}
-
根据name获取属性值
Parameters:
Name Type Default Description keystring 属性名称,支持嵌套,例如获取object.a.b.c 可以使用object.getAttribute('a/b/c') separatorstring / 分隔符,默认是'/' Returns:
* - 返回指定属性的值- Inherited From:
Example
let object = new THING.BaseObject(); object.userData['power'] = 100; let power = object.getAttribute('userData/power'); // @expect(power == 100) -
getComponentByName(name) → {THING.BaseComponent}
-
根据名称获取组件对象
Parameters:
Name Type Description namestring 组件名称 Returns:
THING.BaseComponent- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'myComponent'); let component = obj.getComponentByName('myComponent'); // @expect(component != null) -
getComponentByType(type) → {THING.BaseComponent}
-
根据类型获取组件对象 返回符合条件的第一个组件
Parameters:
Name Type Description type* 组件类型 Returns:
THING.BaseComponent- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'myComponent'); let component = obj.getComponentByType(THING.BaseComponent); // @expect(component != null) -
getComponentsByType(type) → {Array.<THING.BaseComponent>}
-
根据类型获取组件对象的集合
Parameters:
Name Type Description type* 组件类型 Returns:
Array.<THING.BaseComponent>- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'component1'); obj.addComponent(new THING.BaseComponent(), 'component2'); let components = obj.getComponentsByType(THING.BaseComponent); // @expect(components.length == 2) -
getEvents(type) → {Array.<ObjectListenerInfo>}
-
获取指定类型的事件。
Parameters:
Name Type Description typestring 事件类型,为null表示获取所有事件。 Returns:
Array.<ObjectListenerInfo> - 返回一个数组,包含所有指定类型的事件- Inherited From:
Example
let object = new THING.BaseObject(); let events = object.getEvents(); // @expect(events.length > 0); -
hasAttribute(name, separator) → {boolean}
-
检查是否含有属性名为name的属性
Parameters:
Name Type Default Description namestring 属性名称,支持嵌套,例如查询object.a.b.c 可以使用object.hasAttribute('a/b/c') separatorstring / 分隔符,默认是'/' Returns:
boolean - 返回一个布尔值,表示是否存在指定的属性- Inherited From:
Example
let object = new THING.BaseObject(); object.userData['power'] = 100; let ret = object.hasAttribute('userData/power'); // @expect(ret == true) -
hasComponent(name) → {boolean}
-
判断是否含有特定名称的组件
Parameters:
Name Type Description namestring 组件名称 Returns:
boolean- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'myComponent'); let ret = obj.hasComponent('myComponent') // @expect(ret == true) -
async invoke(type, condition, data, tagName) → {*}
-
触发并等待事件完成
Parameters:
Name Type Description typestring 事件类型。 conditionstring | object 事件条件 或 事件数据。 dataobject | string 事件数据 或 事件标签。 tagNamestring 事件标签名称。 Returns:
* - 返回一个Promise对象,包含指定类型的事件- Inherited From:
-
off(type, condition, tag)
-
注销事件
Parameters:
Name Type Description typestring 事件类型 conditionstring 注册事件的条件 tagstring 事件的tag - Inherited From:
Example
let object = new THING.BaseObject(); let markOff = 0; object.on('testOff', function(ev) { markOff = 1; }); object.trigger('testOff'); // @expect(markOff == 1); markOff = 0; object.off('testOff'); object.trigger('testOff'); // @expect(markOff == 0); -
on(type, condition, callback, tag, priority, options)
-
注册事件
Parameters:
Name Type Description typestring 事件类型 conditionstring 注册事件前先进行查询,对符合条件的对象进行注册 callbackEventCallback 事件回调函数 tagstring 事件的tag prioritynumber 优先级 默认0 optionsObjectEventOptions 事件参数 - Inherited From:
Example
let object = new THING.BaseObject(); let mark = 0; object.on('click', function(ev){ mark = 1; }, 'MyClick'); object.trigger('click'); // @expect(mark == 1) let mark2 = 0; object.on('click', '.Box', function(ev){ mark2 = 1; }, 'MyClick'); // @expect(mark2 == 0) -
once(type, condition, callback, tag, priority, options)
-
注册一次性的事件,此事件响应只会触发一次,触发后会被自动注销
Parameters:
Name Type Description typestring 事件类型 conditionstring 注册事件前先进行查询,对符合条件的对象进行注册 callbackEventCallback 事件回调函数 tagstring 事件的tag prioritynumber 优先级 默认0 optionsObjectEventOptions 事件参数 - Inherited From:
Example
let object = new THING.BaseObject(); let markOnce = 0; object.once('testOnce', function(ev) { markOnce = 1; }); object.trigger('testOnce'); // @expect(markOnce == 1); markOnce = 0; object.trigger('testOnce'); // @expect(markOnce == 0); -
pauseEvent(type, condition, tag)
-
暂停事件
Parameters:
Name Type Description typestring 事件类型 conditionstring 注册事件的条件 tagstring 事件的tag - Inherited From:
Example
let object = new THING.BaseObject(); let markPause = 0; object.on('testPause', function(ev) { markPause = 1; }); object.trigger('testPause'); // @expect(markPause == 1); markPause = 0; object.pauseEvent('testPause'); object.trigger('testPause'); // @expect(markPause == 0); app.on('test', ".Box", (e) => { console.log(e.object) }, 'MyTag'); app.pauseEvent('test', '.Box', 'MyTag'); -
query(condition) → {THING.Selector}
-
根据条件查询孩子 返回所有满足条件的对象集合
Parameters:
Name Type Description conditionObjectQueryOptions | string 查询条件 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child= new THING.BaseObject({parent: object}); child.userData = {power: 1000}; let children = object.children.query('[userData/power>100]'); let ret = children.length == 1; // @expect(ret == true) -
queryAll(condition) → {THING.Selector}
-
根据条件查询孩子 返回所有满足条件的对象集合(忽略 queryable 属性)
Parameters:
Name Type Description conditionObjectQueryOptions | string 查询条件 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child= new THING.BaseObject({parent: object}); child.userData = {power: 1000}; let children = object.children.queryAll('[userData/power>100]'); let ret = children.length == 1; // @expect(ret == true) -
queryByDTType(condition, options) → {THING.Selector}
-
根据孪生体类型查询孩子
Parameters:
Name Type Description conditionstring 查询条件 optionsObjectQueryOptions 查询参数 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child1= new THING.BaseObject({parent: object}); child1.dtType = 'Equipment'; let child2= new THING.BaseObject({parent: object}); let result = object.queryByDTType('Equipment'); let ret = result[0].dtType == 'Equipment'; //@expect(ret == true) -
queryById(condition, options) → {THING.Selector}
-
根据id查询孩子
Parameters:
Name Type Description conditionstring 查询条件 optionsObjectQueryOptions 查询参数 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child1= new THING.BaseObject({parent: object}); child1.id = '10000'; let child2= new THING.BaseObject({parent: object}); let result = object.queryById('10000'); let ret = result[0].id == '10000'; //@expect(ret == true) -
queryByName(condition, options) → {THING.Selector}
-
根据名称查询孩子
Parameters:
Name Type Description conditionstring 查询条件 optionsObjectQueryOptions 查询参数 主要包括是否递归查询和是否包含自身 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child= new THING.BaseObject({parent: object, name: 'liming'}); let result = object.queryByName('liming'); let ret = result[0].name == 'liming'; // @expect(ret == true) -
queryByRegExp(condition, options) → {THING.Selector}
-
根据正则表达式查询孩子
Parameters:
Name Type Description conditionstring 正则表达式 optionsObjectQueryOptions 查询参数 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child1= new THING.BaseObject({parent: object, name: 'car1'}); let child2= new THING.BaseObject({parent: object, name: 'car2'}); let result = object.queryByRegExp(/car/); let ret = result.length == 2; //@expect(ret == true) -
queryByTags(condition, options) → {THING.Selector}
-
根据tag查询孩子
Parameters:
Name Type Description conditionstring 查询条件 optionsObjectQueryOptions 查询参数 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child1= new THING.Object3D({parent: object, name: 'car1'}); child1.tags.add('testCar'); let child2= new THING.BaseObject({parent: object, name: 'car2'}); let result = object.queryByTags('testCar'); let ret = result.length == 1; //@expect(ret == true) -
queryByType(condition, options) → {THING.Selector}
-
根据类型查询孩子
Parameters:
Name Type Description conditionstring 查询条件 optionsObjectQueryOptions 查询参数 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child1= new THING.Box({parent: object, id: '10000'}); let child2= new THING.BaseObject({parent: object}); let result = object.queryByType('Box'); let ret = result[0].id == '10000'; //@expect(ret == true) -
queryByUUID(condition, options) → {THING.Selector}
-
根据uuid查询孩子
Parameters:
Name Type Description conditionstring 查询条件 optionsObjectQueryOptions 查询参数 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child1= new THING.BaseObject({parent: object, uuid: '1000'}); let child2= new THING.BaseObject({parent: object}); let result = object.queryByUUID('1000'); let ret = result[0].uuid == '1000'; //@expect(ret == true) -
queryByUserData(condition, options) → {THING.Selector}
-
根据userData(用户数据)查询孩子
Parameters:
Name Type Description conditionstring 查询条件 optionsObjectQueryOptions 查询参数 Returns:
THING.Selector - 查询结果- Inherited From:
Example
let object = new THING.BaseObject(); let child1= new THING.Box({parent: object}); child1.userData['power'] = 100; let child2= new THING.BaseObject({parent: object}); let result = object.queryByUserData('power=100'); let ret = result[0].userData.power == 100; //@expect(ret == true) -
remove(object, options) → {boolean}
-
从自己的孩子中移除BaseObject
Parameters:
Name Type Description objectTHING.BaseObject 待移除物体 optionsobject 选项 Returns:
boolean - 返回一个布尔值,表示是否移除成功- Inherited From:
Example
let parent = new THING.BaseObject(); let child = new THING.BaseObject(); parent.add(child); let ret = child.isChildOf(parent); // @expect(ret == true); parent.remove(child); ret = child.isChildOf(parent); // @expect(ret == false); -
removeAllComponents()
-
移除所有组件
- Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'component1'); obj.addComponent(new THING.BaseComponent(), 'component2'); obj.removeAllComponents(); // @expect(obj.components.size == 0) -
removeComponent(name)
-
根据名称移除组件
Parameters:
Name Type Description namestring The name. 组件名称 - Inherited From:
Example
let obj = new THING.BaseObject();; obj.addComponent(new THING.BaseComponent(), 'myComponent'); obj.removeComponent('myComponent'); // @expect(obj.components.size == 0) -
resumeEvent(type, condition, tag)
-
恢复事件
Parameters:
Name Type Description typestring 事件类型 conditionstring 注册事件的条件 tagstring 事件的tag - Inherited From:
Example
let object = new THING.BaseObject(); let markResume = 0; object.on('testResume', function(ev) { markResume = 1; }); object.trigger('testResume'); // @expect(markResume == 1); markResume = 0; object.pauseEvent('testResume'); object.trigger('testResume'); // @expect(markResume == 0); object.resumeEvent('testResume'); object.trigger('testResume'); // @expect(markResume == 1); app.on('test', ".Box", (e) => { console.log(e.object) }, 'MyTag'); app.pauseEvent('test', '.Box', 'MyTag'); app.resumeEvent('test', '.Box', 'MyTag'); -
setAttribute(key, value, separator)
-
设置属性名称为key的属性值
Parameters:
Name Type Default Description keystring 属性名称,支持嵌套,例如设置object.a.b.c=1 可以使用object.setAttribute('a/b/c',1) value* 属性值 separatorstring / 分隔符,默认是'/' - Inherited From:
Example
let object = new THING.BaseObject(); object.setAttribute('userData/power', 200); let power = object.getAttribute('userData/power'); // @expect(power == 200) -
setAttributes(attributes, overwriteopt, separator)
-
设置属性
Parameters:
Name Type Attributes Default Description attributesobject 属性对象 overwriteboolean <optional>
true 是否覆盖 separatorstring / 分隔符,默认是'/' - Inherited From:
Example
let object = new THING.BaseObject(); object.setAttributes({ "userData/name": 'Mr.Door', "userData/age": 18 }) let name = object.getAttribute('userData/name'); // @expect(name == 'Mr.Door') let age = object.getAttribute('userData/age'); // @expect(age == 18) -
traverse(callback)
-
递归遍历自己和自己的孩子 这个方法会遍历到所有的后代节点(孩子,孩子的孩子等)
Parameters:
Name Type Description callbackfunction The callback function. 执行遍历时执行的方法 - Inherited From:
Example
let parent = new THING.BaseObject(); let child1 = new THING.BaseObject({parent: parent}); let child2 = new THING.BaseObject({parent: parent}); let mark = 0; parent.traverse((child) => { mark++; }); // @expect(mark == 3) -
traverseComponentByType(type, callback)
-
根据类型遍历查找组件
Parameters:
Name Type Description type* 组件类型 callbackTraverseComponentByTypeCallback 回调函数 - Inherited From:
Example
object.addComponent(new MyComponent(), 'myComponent'); object.traverseComponentByType(MyComponent, (component, name) => { console.log(component, name); }); -
trigger(type, condition, data, tagName) → {*}
-
抛出事件
Parameters:
Name Type Description typestring 事件类型。 conditionstring | object 事件条件 或 事件数据。 dataobject | string 事件数据 或 事件标签。 tagNamestring 事件标签名称。 Returns:
* - 返回一个对象,包含指定类型的事件- Inherited From:
Example
let object = new THING.BaseObject(); let markTrigger = {}; object.on('myEvent', function(ev) { markTrigger = ev; }); object.trigger('myEvent', { result: true }); let ret = markTrigger.result; // @expect(ret == true); new THING.Box(); app.on('test', (e) => { console.log('无条件+tag1', e) }, 'MyTag1'); app.on('test', (e) => { console.log('无条件+tag2', e) }, 'MyTag2'); app.on('test', ".Box", (e) => { console.log('条件+tag1', e) }, 'MyTag1'); app.on('test', ".Box", (e) => { console.log('条件+tag2', e) }, 'MyTag2'); // 事件类型 + 事件条件,触发事件。 app.trigger('test', '.Box'); // 事件类型 + 事件数据,触发事件 app.trigger('test', { result: true }); // 事件类型 + 事件条件 + 事件标签,触发事件 app.trigger('test', '.Box', 'MyTag2'); // 事件类型 + 事件条件 + 事件参数,触发事件 app.trigger('test', '.Box', { result: true }); // 事件类型 + 事件条件 + 事件数据 + 事件标签,触发事件 app.trigger('test', '.Box', { result: true },'MyTag2'); // 注意事项: // 1. 事件标签不能单独使用,否则事件标签和事件条件无法区分。 app.trigger('test', null, 'MyTag2'); // 2. 事件数据兼容了数组的情况,如果传了数组将无法从参数中获取object。 app.trigger('test', '.Box', [{ result: 'r1' },{ result: 'r2' }], 'MyTag2')