UNPKG

@thingjs/xplugin-core

Version:

xplugin核心组件包,完成插件生命周期配置实现

1,515 lines 807 kB
/** * <p>THINGJSX二开API命名空间</p> */ declare namespace THINGX { /** * <p>事件</p> */ namespace Event { /** * @property target - <p>监听对象</p> * @property event - <p>监听事件</p> * @property [condition] - <p>物体类型选择条件</p> * @property [suffix] - <p>可变事件后缀</p> * @property callback - <p>监听回调函数</p> * @property [priority] - <p>监听优先级</p> * @property [tag] - <p>监听标签</p> */ type ListenConfig = { target: THING.BaseObject; event: THINGX.Event.Type; condition?: string; suffix?: string; callback: (...params: any[]) => any; priority?: number; tag?: string; }; /** * @property target - <p>监听对象</p> * @property event - <p>监听事件</p> * @property [condition] - <p>物体类型选择条件</p> * @property [suffix] - <p>可变事件后缀</p> * @property data - <p>事件信息,传递回调参数</p> * @property [compatibility = true] - <p>是否兼容遗产事件触发</p> * @property [tag] - <p>监听标签</p> */ type TriggerConfig = { target: THING.BaseObject; event: THINGX.Event.Type; condition?: string; suffix?: string; data: any; compatibility?: boolean; tag?: string; }; /** * @property target - <p>监听对象</p> * @property event - <p>监听事件</p> * @property [condition] - <p>物体类型选择条件</p> * @property [suffix] - <p>可变事件后缀</p> * @property [compatibility = true] - <p>是否兼容遗产事件触发</p> * @property [tag] - <p>监听标签</p> */ type ResumeConfig = { target: THING.BaseObject; event: THINGX.Event.Type; condition?: string; suffix?: string; compatibility?: boolean; tag?: string; }; /** * @property target - <p>监听对象</p> * @property event - <p>监听事件</p> * @property [condition] - <p>物体类型选择条件</p> * @property [suffix] - <p>可变事件后缀</p> * @property [compatibility = true] - <p>是否兼容遗产事件触发</p> * @property [tag] - <p>监听标签</p> */ type PauseConfig = { target: THING.BaseObject; event: THINGX.Event.Type; condition?: string; suffix?: string; compatibility?: boolean; tag?: string; }; /** * @property target - <p>监听对象</p> * @property event - <p>监听事件</p> * @property [condition] - <p>物体类型选择条件</p> * @property [suffix] - <p>可变事件后缀</p> * @property [tag] - <p>监听标签</p> * @property [compatibility = true] - <p>是否兼容遗产事件触发</p> * @property [callback] - <p>监听回调函数</p> */ type OffConfig = { target: THING.BaseObject; event: THINGX.Event.Type; condition?: string; suffix?: string; tag?: string; compatibility?: boolean; callback?: (...params: any[]) => any; }; /** * <p>监听事件</p> * @param config - <p>监听事件配置</p> * @returns <p>boolean 是否监听成功</p> */ function on(config: THINGX.Event.ListenConfig): any; /** * <p>监听事件, 只触发一次</p> * @param config - <p>监听事件配置</p> * @returns <p>boolean 是否监听成功</p> */ function one(config: THINGX.Event.ListenConfig): any; /** * <p>触发事件</p> * @param config - <p>监听事件配置</p> * @returns <p>boolean 是否触发成功</p> */ function trigger(config: THINGX.Event.TriggerConfig): any; /** * <p>取消监听事件</p> * @param config - <p>监听事件配置</p> */ function off(config: THINGX.Event.OffConfig): void; /** * <p>暂停注册事件</p> * @param config - <p>监听事件配置</p> */ function pause(config: THINGX.Event.PauseConfig): void; /** * <p>恢复注册事件</p> * @param config - <p>监听事件配置</p> */ function resume(config: THINGX.Event.ResumeConfig): void; /** * <p>新建事件</p> * @param val - <p>事件名称</p> * @param [legacyVal] - <p>遗产事件名称</p> * @param [withSuffix = false] - <p>是否有后缀</p> */ function create(val: string, legacyVal?: string, withSuffix?: boolean): any; namespace Tag { /** * <p>显示孪生体面板</p> */ var ShowDigitalTwinPanel: any; /** * <p>隐藏孪生体面板</p> */ var HideDigitalTwinPanel: any; /** * <p>创建显示孪生体提示</p> */ var CreateDigitalTwinTip: any; /** * <p>销毁孪生体提示</p> */ var DestroyDigitalTwinTip: any; /** * <p>显示孪生体默认效果</p> */ var ShowDigitalTwinDefaultEffect: any; /** * <p>隐藏孪生体默认效果</p> */ var HideDigitalTwinDefaultEffect: any; /** * <p>设置选中默认效果</p> */ var SetSelectDefaultEffect: any; /** * <p>取消设置选中默认效果</p> */ var SetUnselectDefaultEffect: any; /** * <p>停止飞行</p> */ var StopFly: any; /** * <p>设置兄弟房间透明</p> */ var SetBrotherRoomsTransparency: any; /** * <p>设置兄弟房间不透明</p> */ var SetBrotherRoomsNotTransparency: any; /** * <p>设置楼层透明</p> */ var SetFloorTransparency: any; /** * <p>设置楼层不透明</p> */ var SetFloorNotTransparency: any; /** * <p>设置兄弟孪生体透明</p> */ var SetBrotherTwinsTransparency: any; /** * <p>设置兄弟孪生体不透明</p> */ var SetBrotherTwinsNotTransparency: any; /** * <p>显示建筑告警</p> */ var ShowAlarmForBuilding: any; /** * <p>为当前层级设置告警参数</p> */ var SetAlarmParamsForCurrentLevel: any; /** * <p>创建图层</p> */ var CreateLayer: any; /** * <p>更新监控效果</p> */ var UpdateMonitorEffect: any; /** * <p>进入建筑后,只有一层楼则直接进入楼层</p> */ var EnterFloorDirectAfterEnterBuildingIfOneFloorInBuilding: any; /** * <p>退出楼层后,只有一层楼则直接进入园区</p> */ var EnterCampusDirectAfterLeaveFloorIfOneFloorInBuilding: any; /** * <p>进入楼层后,只有一间房则直接进入房间</p> */ var EnterRoomDirectAfterEnterFloorIfOneRoomInFloor: any; /** * <p>退出房间后,只有一层楼则直接进入建筑</p> */ var EnterBuildingDirectAfterLeaveRoomIfOneRoomInFloor: any; } /** * <p>事件类型</p> */ namespace Type { } } /** * <p>告警模块</p> */ namespace Alarm { /** * <p>告警查询配置</p> * @property [acknowledged] - <p>处理状态</p> * @property alarmLevel - <p>告警级别</p> * @property [classNames = [1, 2, 3, 4]] - <p>孪生体业务分类,默认为空数组代表所有</p> * @property dcIds - <p>场景的数据库ID数组(<em>DBID</em>)</p> * @property [enableGlobal = false/true] - <p>开启全局查询,当前层级是地图的话默认true,园区默认false。当为true时,需要设置dcIds</p> * @property fromCiId - <p>查询的起始层级的数据库ID(<em>DBID</em>)</p> * @property keyword - <p>搜索关键词,会匹配孪生体的名称,告警详情</p> * @property orAttrs - <p>孪生体属性条件筛选 默认空数组代表没有过滤条件</p> * @property [sortType = time-desc] - <p>告警排序方式 默认按时间倒序 time-asc 告警时间正序/time-desc 告警时间倒序/level-asc 告警级别正序/level-desc 告警级别倒序</p> */ type QueryConfig = { acknowledged?: string; alarmLevel: number[]; classNames?: string[]; dcIds: string[]; enableGlobal?: boolean; fromCiId: string; keyword: string; orAttrs: object[]; sortType?: string; }; /** * <p>告警等级配置</p> * @property color - <p>告警颜色,十六进制</p> * @property name - <p>告警级别名称</p> * @property sound - <p>告警声音配置</p> * @property sound.name - <p>告警声音名称</p> * @property sound.url - <p>告警声音资源url</p> */ type LevelItemConfig = { color: string; name: string; sound: { name: string; url: string; }; }; /** * <p>激活告警系统</p> * @param purpose - <p>激活目的</p> */ function activate(purpose: string): void; /** * <p>取消激活告警系统</p> * @param purpose - <p>取消激活目的</p> */ function deactivate(purpose: string): void; /** * <p>告警系统是否激活</p> */ function isActivated(): boolean; /** * <p>获取已存在的激活告警系统的目的</p> * @returns <ul> * <li>激活告警系统的目的</li> * </ul> */ function getPurpose(): string[]; /** * <p>激活3D告警效果</p> */ function activateEffect(): void; /** * <p>取消激活3D告警效果</p> */ function deactivateEffect(): void; /** * <p>3D告警效果是否被激活</p> */ function isEffectActivated(): boolean; /** * <p>激活告警声音效果</p> */ function activateSound(): void; /** * <p>取消激活告警声音效果</p> */ function deactivateSound(): void; /** * <p>告警声音效果是否被激活</p> */ function isSoundActivated(): boolean; /** * <p>告警系统是否初始化完成</p> */ function isInitialized(): boolean; /** * <p>获取告警级别配置</p> * @returns <ul> * <li>告警级别配置</li> * </ul> */ function getLevelConfig(): Map<number, THINGX.Alarm.LevelItemConfig>; /** * <p>获取告警查询配置</p> */ function getQueryConfig(): AlarmQueryConfig; /** * <p>设置告警查询配置</p> * @example * // 设置查询告警级别为 1,2,3 级的告警 * THINGX.Alarm.setQueryConfig({ * alarmLevel: [1,2,3] * }); * // 设置查询孪生体业务分类为 '温湿度感应器' 的告警数据 * THINGX.Alarm.setQueryConfig({ * classNames: ['温湿度感应器'] * }); * // 根据孪生体属性筛选告警 * THINGX.Alarm.setQueryConfig({ * orAttrs:[{ "key": '业务分类', "value":"空调", "optType": 1 }] * }); * @param config - <p>告警查询配置</p> * @param [isRemoteData = true] - <p>是否立即请求告警</p> */ function setQueryConfig(config: THINGX.Alarm.QueryConfig, isRemoteData?: boolean): void; /** * <p>获取所有告警数据</p> */ function getAllData(): any; /** * <p>获取全局告警数据最高告警级别 数值约小级别越高, 默认1为最高级,对应“严重”告警级别,依次向下排</p> */ function getHighestLevel(): number | null; /** * <p>获取孪生体上最高告警级别数据</p> * @param digitalTwin - <p>孪生体对象</p> * @param isTraverse - <p>是否遍历该孪生体的孩子</p> */ function getHighestLevelDataWithTwin(digitalTwin: THING.BaseObject, isTraverse: boolean): any | null; /** * <p>开始请求后台接口更新所有告警信息,activate后会自动调用,尽量使用activate来控制告警系统</p> */ function startRequestData(): void; /** * <p>告警查询配置</p> * @property [acknowledged] - <p>处理状态</p> * @property alarmLevel - <p>告警级别</p> * @property [classNames = [1, 2, 3, 4]] - <p>孪生体业务分类,默认为空数组代表所有</p> * @property dcIds - <p>场景的数据库ID数组(<em>DBID</em>)</p> * @property [enableGlobal = false/true] - <p>开启全局查询,当前层级是地图的话默认true,园区默认false。当为true时,需要设置dcIds</p> * @property fromCiId - <p>查询的起始层级的数据库ID(<em>DBID</em>)</p> * @property keyword - <p>搜索关键词,会匹配孪生体的名称,告警详情</p> * @property orAttrs - <p>孪生体属性条件筛选 默认空数组代表没有过滤条件</p> * @property [sortType = time-desc] - <p>告警排序方式 默认按时间倒序 time-asc 告警时间正序/time-desc 告警时间倒序/level-asc 告警级别正序/level-desc 告警级别倒序</p> */ type QueryConfig = { acknowledged?: string; alarmLevel: number[]; classNames?: string[]; dcIds: string[]; enableGlobal?: boolean; fromCiId: string; keyword: string; orAttrs: object[]; sortType?: string; }; /** * <p>告警等级配置</p> * @property color - <p>告警颜色,十六进制</p> * @property name - <p>告警级别名称</p> * @property sound - <p>告警声音配置</p> * @property sound.name - <p>告警声音名称</p> * @property sound.url - <p>告警声音资源url</p> */ type LevelItemConfig = { color: string; name: string; sound: { name: string; url: string; }; }; /** * <p>激活告警系统</p> * @param purpose - <p>激活目的</p> */ function activate(purpose: string): void; /** * <p>取消激活告警系统</p> * @param purpose - <p>取消激活目的</p> */ function deactivate(purpose: string): void; /** * <p>告警系统是否激活</p> */ function isActivated(): boolean; /** * <p>获取已存在的激活告警系统的目的</p> * @returns <ul> * <li>激活告警系统的目的</li> * </ul> */ function getPurpose(): string[]; /** * <p>激活3D告警效果</p> */ function activateEffect(): void; /** * <p>取消激活3D告警效果</p> */ function deactivateEffect(): void; /** * <p>3D告警效果是否被激活</p> */ function isEffectActivated(): boolean; /** * <p>激活告警声音效果</p> */ function activateSound(): void; /** * <p>取消激活告警声音效果</p> */ function deactivateSound(): void; /** * <p>告警声音效果是否被激活</p> */ function isSoundActivated(): boolean; /** * <p>告警系统是否初始化完成</p> */ function isInitialized(): boolean; /** * <p>获取告警级别配置</p> * @returns <ul> * <li>告警级别配置</li> * </ul> */ function getLevelConfig(): Map<number, THINGX.Alarm.LevelItemConfig>; /** * <p>获取告警查询配置</p> */ function getQueryConfig(): AlarmQueryConfig; /** * <p>设置告警查询配置</p> * @example * // 设置查询告警级别为 1,2,3 级的告警 * THINGX.Alarm.setQueryConfig({ * alarmLevel: [1,2,3] * }); * // 设置查询孪生体业务分类为 '温湿度感应器' 的告警数据 * THINGX.Alarm.setQueryConfig({ * classNames: ['温湿度感应器'] * }); * // 根据孪生体属性筛选告警 * THINGX.Alarm.setQueryConfig({ * orAttrs:[{ "key": '业务分类', "value":"空调", "optType": 1 }] * }); * @param config - <p>告警查询配置</p> * @param [isRemoteData = true] - <p>是否立即请求告警</p> */ function setQueryConfig(config: THINGX.Alarm.QueryConfig, isRemoteData?: boolean): void; /** * <p>获取所有告警数据</p> */ function getAllData(): any; /** * <p>获取全局告警数据最高告警级别 数值约小级别越高, 默认1为最高级,对应“严重”告警级别,依次向下排</p> */ function getHighestLevel(): number | null; /** * <p>获取孪生体上最高告警级别数据</p> * @param digitalTwin - <p>孪生体对象</p> * @param isTraverse - <p>是否遍历该孪生体的孩子</p> */ function getHighestLevelDataWithTwin(digitalTwin: THING.BaseObject, isTraverse: boolean): any | null; /** * <p>开始请求后台接口更新所有告警信息,activate后会自动调用,尽量使用activate来控制告警系统</p> */ function startRequestData(): void; } /** * <p>App模块</p> */ namespace App { /** * <p>当前app</p> */ var App.current: THING.App | undefined; /** * <p>当前层级孪生体对象</p> */ var App.currentLevel: THING.BaseObject | undefined; /** * <p>当前app</p> */ var App.current: THING.App | undefined; /** * <p>当前选择的第一个孪生体对象</p> */ var App.currentSelected: THING.BaseObject | undefined; /** * <p>当前场景信息</p> */ var App.sceneInfo: any; /** * <p>当前场景CICode</p> */ var App.sceneCICode: string; /** * <p>通过ThingJS语法查询当前app下孪生体集合</p> * @param expression - <p>ThingJS语法表达式</p> * @returns <ul> * <li>查询到的孪生体</li> * </ul> */ function App.queryWithThingJSExpression(expression: string): THING.BaseObject[]; /** * <p>当前ThingJS-X版本号</p> */ var App.version: string; /** * <p>当前使用的标记库版本号</p> */ var App.vendorMarkerVersion: string; /** * <p>当前使用的ThingJS的版本号</p> */ var App.vendorThingJSVersion: string; /** * <p>当前使用的地图的版本号</p> */ var App.vendorGeoVersion: string; /** * <p>当前app</p> */ var App.current: THING.App | undefined; /** * <p>当前层级孪生体对象</p> */ var App.currentLevel: THING.BaseObject | undefined; /** * <p>当前app</p> */ var App.current: THING.App | undefined; /** * <p>当前选择的第一个孪生体对象</p> */ var App.currentSelected: THING.BaseObject | undefined; /** * <p>当前场景信息</p> */ var App.sceneInfo: any; /** * <p>当前场景CICode</p> */ var App.sceneCICode: string; /** * <p>通过ThingJS语法查询当前app下孪生体集合</p> * @param expression - <p>ThingJS语法表达式</p> * @returns <ul> * <li>查询到的孪生体</li> * </ul> */ function App.queryWithThingJSExpression(expression: string): THING.BaseObject[]; /** * <p>当前ThingJS-X版本号</p> */ var App.version: string; /** * <p>当前使用的标记库版本号</p> */ var App.vendorMarkerVersion: string; /** * <p>当前使用的ThingJS的版本号</p> */ var App.vendorThingJSVersion: string; /** * <p>当前使用的地图的版本号</p> */ var App.vendorGeoVersion: string; } /** * <p>业务模块</p> */ namespace Business { /** * <p>显示业务模块</p> */ function show(): void; /** * <p>隐藏业务模块</p> */ function hide(): void; /** * <p>获取指定层级下指定名称业务</p> * @param [level = THINGX.App.currentLevel] - <p>指定层级</p> * @param [name=] - <p>业务名称,为空则获取指定层级下所有业务</p> * @returns <ul> * <li>业务实例</li> * </ul> */ function get(level?: THING.BaseObject | THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS, name=?: string): object[]; /** * <p>激活业务</p> * @param name - <p>业务名称</p> */ function activate(name: string): void; /** * <p>取消激活当前业务</p> */ function deactivate(): void; /** * <p>获取当前激活的业务信息</p> */ function getActivated(): any; /** * <p>重新读取可视化配置 并根据当前层级重新创建业务</p> * @returns <ul> * <li>是否刷新成功</li> * </ul> */ function refresh(): Promise<boolean>; /** * <p>显示业务面板- 建议通过activate激活业务</p> * @param name - <p>业务名称</p> */ function showPanel(name: string): void; /** * <p>隐藏业务面板 - 建议通过deactivate取消激活业务</p> * @param name - <p>业务名称</p> */ function hidePanel(name: string): void; /** * <p>获取业务配置</p> * @param [level = THINGX.App.currentLevel] - <p>孪生体对象/孪生体分类</p> * @param [name=] - <p>业务名称,非空的话返回指定配置,否则返回所有配置</p> */ function getConfig(level?: THING.BaseObject | THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS, name=?: string): any | null; /** * <p>获取当前业务面板配置</p> */ function getPanelConfig(): any | null; /** * <p>获取当前激活的业务名称</p> * @param [isFullName = false] - <p>是否获取业务全称</p> * @returns <ul> * <li>当前激活的业务名称/全称</li> * </ul> */ function getCurrentName(isFullName?: boolean): string; /** * <p>显示业务模块</p> */ function show(): void; /** * <p>隐藏业务模块</p> */ function hide(): void; /** * <p>获取指定层级下指定名称业务</p> * @param [level = THINGX.App.currentLevel] - <p>指定层级</p> * @param [name=] - <p>业务名称,为空则获取指定层级下所有业务</p> * @returns <ul> * <li>业务实例</li> * </ul> */ function get(level?: THING.BaseObject | THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS, name=?: string): object[]; /** * <p>激活业务</p> * @param name - <p>业务名称</p> */ function activate(name: string): void; /** * <p>取消激活当前业务</p> */ function deactivate(): void; /** * <p>获取当前激活的业务信息</p> */ function getActivated(): any; /** * <p>重新读取可视化配置 并根据当前层级重新创建业务</p> * @returns <ul> * <li>是否刷新成功</li> * </ul> */ function refresh(): Promise<boolean>; /** * <p>显示业务面板- 建议通过activate激活业务</p> * @param name - <p>业务名称</p> */ function showPanel(name: string): void; /** * <p>隐藏业务面板 - 建议通过deactivate取消激活业务</p> * @param name - <p>业务名称</p> */ function hidePanel(name: string): void; /** * <p>获取业务配置</p> * @param [level = THINGX.App.currentLevel] - <p>孪生体对象/孪生体分类</p> * @param [name=] - <p>业务名称,非空的话返回指定配置,否则返回所有配置</p> */ function getConfig(level?: THING.BaseObject | THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS, name=?: string): any | null; /** * <p>获取当前业务面板配置</p> */ function getPanelConfig(): any | null; /** * <p>获取当前激活的业务名称</p> * @param [isFullName = false] - <p>是否获取业务全称</p> * @returns <ul> * <li>当前激活的业务名称/全称</li> * </ul> */ function getCurrentName(isFullName?: boolean): string; } /** * <p>摄像机模块</p> */ namespace Camera { /** * @property position - <p>摄相机位置</p> * @property target - <p>摄像机看点</p> */ type Pose = { position: number[]; target: number[]; }; /** * <p>飞到最佳视角查看孪生体</p> * @example * // 单个孪生体飞行 * const currentLevel = THINGX.App.currentLevel; * cosnt pose = THINGX.Camera.getPoseWithDigitalTwin(currentLevel, { * x: 30, y: 60, z: 1, tx: 0, ty: 0, tr: 0 * }); * THINGX.Camera.flyTo(currentLevel, { * complete: (ev) => { * console.log('飞行完毕') * }, * pose: pose, * time: 2000, * }); * * // 孪生体集合飞行 * let dir = THING.Math.scaleVector(THING.App.current.camera.direction, -1); // 默认方向向量 * dir[0] += 1; * const pose = THINGX.Camera.getPoseWithDigitalTwinSet(THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS.BUILDING, { * useDir: dir, * radiusScale: 1.5, * }); * THINGX.Camera.flyTo(THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS.BUILDING, { * complete: (ev) => { * console.log('飞行完毕') * }, * pose: pose, * time: 2000, * }); * @param digitalTwin - <p>孪生体/孪生体集合/ThingJS查询表达式</p> * @param [config = {}] - <p>飞行指定配置</p> * @param [config.keepLevel = false] - <p>是否保持当前层级</p> * @param [config.complete] - <p>摄像机飞行完成回调函数</p> * @param [config.time] - <p>摄像机飞行时间,不传的话会根据摄像机姿势和孪生体对象计算一个最佳的飞行时间</p> * @param [config.pose] - <p>摄像机姿势,不传的话会计算最佳的摄像机姿势</p> */ function flyTo(digitalTwin: THING.BaseObject | THING.BaseObject[] | string, config?: { keepLevel?: boolean; complete?: (...params: any[]) => any; time?: number; pose?: THINGX.Camera.Pose; }): void; /** * <p>通过孪生体获取摄像机姿势</p> * @example * const currentLevel = THINGX.App.currentLevel; * THINGX.Camera.getPoseWithDigitalTwin(currentLevel, { * x: 30, y: 60, z: 1, tx: 0, ty: 0, tr: 0 * }); * @param digitalTwin - <p>孪生体</p> * @param [config = {}] - <p>飞到对象的参数,当digitalTwin为单个孪生体且opts.keepDir不为true时生效</p> * @param [config.x = 30] - <p>position yaw 摄像机位置沿x轴旋转角度</p> * @param [config.y = 45] - <p>position pitch 摄像机位置沿y轴旋转角度</p> * @param [config.z = 2] - <p>position radius factor 摄像机位置距离孪生体包围盒半径倍数,1是刚好看到飞到物体的整个包围盒</p> * @param [config.tx = 0] - <p>target yaw 摄像机看点沿x轴旋转角度</p> * @param [config.ty = 0] - <p>target pitch 摄像机看点沿y轴旋转角度</p> * @param [config.tr = 0] - <p>target radius factor 摄像机看点距离孪生体包围中心距离</p> * @param opts - <p>计算设置</p> * @param [opts.isRecursive = false] - <p>是否遍历子对象</p> * @param [opts.isForceReCalc = true] - <p>是否强制重新计算</p> */ function getPoseWithDigitalTwin(digitalTwin: THING.BaseObject, config?: { x?: number; y?: number; z?: number; tx?: number; ty?: number; tr?: number; }, opts: { isRecursive?: boolean; isForceReCalc?: boolean; }): THINGX.Camera.Pose | null; /** * <p>通过孪生体集合获取摄像机姿势</p> * @example * let dir = THING.Math.scaleVector(THING.App.current.camera.direction, -1); // 默认方向向量 * dir[0] += 1; * let pose = THINGX.Camera.getPoseWithDigitalTwinSet(THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS.BUILDING, { * useDir: dir, * radiusScale: 1.5, * }); * @param digitalTwin - <p>孪生体集合/ThingJS查询表达式</p> * @param [opts.isRecursive = false] - <p>是否遍历子对象</p> * @param [opts.radiusScale = 1] - <p>距离包围盒半径倍数,digitalTwin为孪生体集合时生效</p> * @param [opts.useDir = THING.App.current.camera.direction*-1] - <p>摄像机朝向,digitalTwin为孪生体集合时生效</p> */ function getPoseWithDigitalTwinSet(digitalTwin: THING.BaseObject[] | string, opts: { isRecursive?: boolean; radiusScale?: number; useDir?: number[]; }): THINGX.Camera.Pose | null; /** * <p>获取摄像机姿势 建议使用getPoseWithDigitalTwin和getPoseWithDigitalTwinSet获取摄像机姿势</p> * @param digitalTwin - <p>孪生体/孪生体集合/ThingJS查询表达式</p> * @param [flyToConfig = {}] - <p>飞到对象的参数,当digitalTwin为单个孪生体且opts.keepDir不为true时生效</p> * @param [flyToConfig.x = 30] - <p>position yaw 摄像机位置沿x轴旋转角度</p> * @param [flyToConfig.y = 45] - <p>position pitch 摄像机位置沿y轴旋转角度</p> * @param [flyToConfig.z = 2] - <p>position radius factor 摄像机位置距离孪生体包围盒半径倍数,1是刚好看到飞到物体的整个包围盒</p> * @param [flyToConfig.tx = 0] - <p>target yaw 摄像机看点沿x轴旋转角度</p> * @param [flyToConfig.ty = 0] - <p>target pitch 摄像机看点沿y轴旋转角度</p> * @param [flyToConfig.tr = 0] - <p>target radius factor 摄像机看点距离孪生体包围盒半径倍数</p> * @param [opts = {}] - <p>飞到最佳视角计算配置</p> * @param [opts.isForceReCalc = false] - <p>是否强制重新计算,当digitalTwin为单个孪生体生效</p> * @param [opts.isRecursive = false] - <p>是否遍历子对象</p> * @param [opts.radiusScale = 1] - <p>距离包围盒半径倍数,digitalTwin为孪生体集合时生效</p> * @param [opts.keepDir = false] - <p>保持当前朝向</p> * @param [opts.useDir = THING.App.current.camera.direction*-1] - <p>朝向vector3,digitalTwin为孪生体集合时生效</p> */ function getPose(digitalTwin: THING.BaseObject | THING.BaseObject[] | string, flyToConfig?: { x?: number; y?: number; z?: number; tx?: number; ty?: number; tr?: number; }, opts?: { isForceReCalc?: boolean; isRecursive?: boolean; radiusScale?: number; keepDir?: boolean; useDir?: number[]; }): THINGX.Camera.Pose | null; /** * <p>获取视点配置</p> */ function getConfig(): any; /** * @property position - <p>摄相机位置</p> * @property target - <p>摄像机看点</p> */ type Pose = { position: number[]; target: number[]; }; /** * <p>飞到最佳视角查看孪生体</p> * @example * // 单个孪生体飞行 * const currentLevel = THINGX.App.currentLevel; * cosnt pose = THINGX.Camera.getPoseWithDigitalTwin(currentLevel, { * x: 30, y: 60, z: 1, tx: 0, ty: 0, tr: 0 * }); * THINGX.Camera.flyTo(currentLevel, { * complete: (ev) => { * console.log('飞行完毕') * }, * pose: pose, * time: 2000, * }); * * // 孪生体集合飞行 * let dir = THING.Math.scaleVector(THING.App.current.camera.direction, -1); // 默认方向向量 * dir[0] += 1; * const pose = THINGX.Camera.getPoseWithDigitalTwinSet(THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS.BUILDING, { * useDir: dir, * radiusScale: 1.5, * }); * THINGX.Camera.flyTo(THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS.BUILDING, { * complete: (ev) => { * console.log('飞行完毕') * }, * pose: pose, * time: 2000, * }); * @param digitalTwin - <p>孪生体/孪生体集合/ThingJS查询表达式</p> * @param [config = {}] - <p>飞行指定配置</p> * @param [config.keepLevel = false] - <p>是否保持当前层级</p> * @param [config.complete] - <p>摄像机飞行完成回调函数</p> * @param [config.time] - <p>摄像机飞行时间,不传的话会根据摄像机姿势和孪生体对象计算一个最佳的飞行时间</p> * @param [config.pose] - <p>摄像机姿势,不传的话会计算最佳的摄像机姿势</p> */ function flyTo(digitalTwin: THING.BaseObject | THING.BaseObject[] | string, config?: { keepLevel?: boolean; complete?: (...params: any[]) => any; time?: number; pose?: THINGX.Camera.Pose; }): void; /** * <p>通过孪生体获取摄像机姿势</p> * @example * const currentLevel = THINGX.App.currentLevel; * THINGX.Camera.getPoseWithDigitalTwin(currentLevel, { * x: 30, y: 60, z: 1, tx: 0, ty: 0, tr: 0 * }); * @param digitalTwin - <p>孪生体</p> * @param [config = {}] - <p>飞到对象的参数,当digitalTwin为单个孪生体且opts.keepDir不为true时生效</p> * @param [config.x = 30] - <p>position yaw 摄像机位置沿x轴旋转角度</p> * @param [config.y = 45] - <p>position pitch 摄像机位置沿y轴旋转角度</p> * @param [config.z = 2] - <p>position radius factor 摄像机位置距离孪生体包围盒半径倍数,1是刚好看到飞到物体的整个包围盒</p> * @param [config.tx = 0] - <p>target yaw 摄像机看点沿x轴旋转角度</p> * @param [config.ty = 0] - <p>target pitch 摄像机看点沿y轴旋转角度</p> * @param [config.tr = 0] - <p>target radius factor 摄像机看点距离孪生体包围中心距离</p> * @param opts - <p>计算设置</p> * @param [opts.isRecursive = false] - <p>是否遍历子对象</p> * @param [opts.isForceReCalc = true] - <p>是否强制重新计算</p> */ function getPoseWithDigitalTwin(digitalTwin: THING.BaseObject, config?: { x?: number; y?: number; z?: number; tx?: number; ty?: number; tr?: number; }, opts: { isRecursive?: boolean; isForceReCalc?: boolean; }): THINGX.Camera.Pose | null; /** * <p>通过孪生体集合获取摄像机姿势</p> * @example * let dir = THING.Math.scaleVector(THING.App.current.camera.direction, -1); // 默认方向向量 * dir[0] += 1; * let pose = THINGX.Camera.getPoseWithDigitalTwinSet(THINGX.CONST.DEFAULT_DIGITAL_TWIN_CLASS.BUILDING, { * useDir: dir, * radiusScale: 1.5, * }); * @param digitalTwin - <p>孪生体集合/ThingJS查询表达式</p> * @param [opts.isRecursive = false] - <p>是否遍历子对象</p> * @param [opts.radiusScale = 1] - <p>距离包围盒半径倍数,digitalTwin为孪生体集合时生效</p> * @param [opts.useDir = THING.App.current.camera.direction*-1] - <p>摄像机朝向,digitalTwin为孪生体集合时生效</p> */ function getPoseWithDigitalTwinSet(digitalTwin: THING.BaseObject[] | string, opts: { isRecursive?: boolean; radiusScale?: number; useDir?: number[]; }): THINGX.Camera.Pose | null; /** * <p>获取摄像机姿势 建议使用getPoseWithDigitalTwin和getPoseWithDigitalTwinSet获取摄像机姿势</p> * @param digitalTwin - <p>孪生体/孪生体集合/ThingJS查询表达式</p> * @param [flyToConfig = {}] - <p>飞到对象的参数,当digitalTwin为单个孪生体且opts.keepDir不为true时生效</p> * @param [flyToConfig.x = 30] - <p>position yaw 摄像机位置沿x轴旋转角度</p> * @param [flyToConfig.y = 45] - <p>position pitch 摄像机位置沿y轴旋转角度</p> * @param [flyToConfig.z = 2] - <p>position radius factor 摄像机位置距离孪生体包围盒半径倍数,1是刚好看到飞到物体的整个包围盒</p> * @param [flyToConfig.tx = 0] - <p>target yaw 摄像机看点沿x轴旋转角度</p> * @param [flyToConfig.ty = 0] - <p>target pitch 摄像机看点沿y轴旋转角度</p> * @param [flyToConfig.tr = 0] - <p>target radius factor 摄像机看点距离孪生体包围盒半径倍数</p> * @param [opts = {}] - <p>飞到最佳视角计算配置</p> * @param [opts.isForceReCalc = false] - <p>是否强制重新计算,当digitalTwin为单个孪生体生效</p> * @param [opts.isRecursive = false] - <p>是否遍历子对象</p> * @param [opts.radiusScale = 1] - <p>距离包围盒半径倍数,digitalTwin为孪生体集合时生效</p> * @param [opts.keepDir = false] - <p>保持当前朝向</p> * @param [opts.useDir = THING.App.current.camera.direction*-1] - <p>朝向vector3,digitalTwin为孪生体集合时生效</p> */ function getPose(digitalTwin: THING.BaseObject | THING.BaseObject[] | string, flyToConfig?: { x?: number; y?: number; z?: number; tx?: number; ty?: number; tr?: number; }, opts?: { isForceReCalc?: boolean; isRecursive?: boolean; radiusScale?: number; keepDir?: boolean; useDir?: number[]; }): THINGX.Camera.Pose | null; /** * <p>获取视点配置</p> */ function getConfig(): any; } namespace CONST { /** * <p>默认孪生体分类</p> */ enum DEFAULT_DIGITAL_TWIN_CLASS { /** * <p>园区</p> */ CAMPUS = ".Campus", /** * <p>建筑</p> */ BUILDING = ".Building", /** * <p>楼层</p> */ FLOOR = ".Floor", /** * <p>房间</p> */ ROOM = ".Room", /** * <p>地图</p> */ GEO_CAMPUS = ".GeoCampus" } /** * <p>插件类型</p> */ enum PLUGIN_TYPE { /** * <p>操作原子插件</p> */ ACTION = "action", /** * <p>图表</p> */ CHART = "chart", /** * <p>核心插件</p> */ CORE = "core", /** * <p>扩展插件</p> */ EXPAND = "expand", /** * <p>效果模版</p> */ THEME = "theme" } /** * <p>加载javascript脚本类型</p> */ enum JS_LOAD_TYPE { /** * <p>通过script标签加载</p> */ TAG = "tag", /** * <p>以动态执行加载的脚本内容方式加载</p> */ EXEC = "exec" } /** * <p>javascript资源类型</p> */ enum JS_SRC_TYPE { /** * <p>url路径方式</p> */ URL = "url", /** * <p>源脚本方式</p> */ CONTENT = "content" } /** * <p>默认孪生体分类</p> */ enum DEFAULT_DIGITAL_TWIN_CLASS { /** * <p>园区</p> */ CAMPUS = ".Campus", /** * <p>建筑</p> */ BUILDING = ".Building", /** * <p>楼层</p> */ FLOOR = ".Floor", /** * <p>房间</p> */ ROOM = ".Room", /** * <p>地图</p> */ GEO_CAMPUS = ".GeoCampus" } /** * <p>插件类型</p> */ enum PLUGIN_TYPE { /** * <p>操作原子插件</p> */ ACTION = "action", /** * <p>图表</p> */ CHART = "chart", /** * <p>核心插件</p> */ CORE = "core", /** * <p>扩展插件</p> */ EXPAND = "expand", /** * <p>效果模版</p> */ THEME = "theme" } /** * <p>加载javascript脚本类型</p> */ enum JS_LOAD_TYPE { /** * <p>通过script标签加载</p> */ TAG = "tag", /** * <p>以动态执行加载的脚本内容方式加载</p> */ EXEC = "exec" } /** * <p>javascript资源类型</p> */ enum JS_SRC_TYPE { /** * <p>url路径方式</p> */ URL = "url", /** * <p>源脚本方式</p> */ CONTENT = "content" } } /** * <p>数据辅助模块</p> */ namespace DataHelper { /** * <p>数组模块</p> */ namespace Array { /** * <p>在数组末尾追加元素</p> * @param array - <p>目标数组</p> * @param val - <p>待增加的元素</p> * @param [isForce = false] - <p>是否强制增加,强制则不判断数组中是否已经存在</p> * @returns <ul> * <li>增加元素或已存在元素的索引</li> * </ul> */ function push(array: any[], val: any, isForce?: boolean): number; /** * <p>根据索引数组删除数组元素</p> * @param array - <p>数组</p> * @param indexArray - <p>序列数组</p> */ function removeWithIndexArray(array: any[], indexArray: number[]): any[]; /** * <p>在数组中去除重复项,稳定的(保留第一个)</p> * @param array - <p>原始数组</p> * @returns <ul> * <li>删除了重复项的数组</li> * </ul> */ function unique(array: any[]): any[]; /** * <p>根据keys值,构造新数组只包含keys中包含的key</p> * @param array - <p>源数组</p> * @param keys - <p>要取的键值数组</p> * @param [isAllowNull = false] - <p>是否允许值为空,默认不允许</p> * @returns <p>[{key1:XX,key2:XX},{key1:XX,key2:XX}]</p> */ function getWithKeys(array: any[], keys: string[], isAllowNull?: boolean): any[]; /** * <p>删除数组中array1中存在与数值array2中相同的元素</p> * @param array1 - <p>原始数组</p> * @param array2 - <p>校样数组</p> * @returns <p>返回新数组</p> */ function subtract(array1: any[], array2: any[]): any[]; /** * <p>在数组末尾追加元素</p> * @param array - <p>目标数组</p> * @param val - <p>待增加的元素</p> * @param [isForce = false] - <p>是否强制增加,强制则不判断数组中是否已经存在</p> * @returns <ul> * <li>增加元素或已存在元素的索引</li> * </ul> */ function push(array: any[], val: any, isForce?: boolean): number; /** * <p>根据索引数组删除数组元素</p> * @param array - <p>数组</p> * @param indexArray - <p>序列数组</p> */ function removeWithIndexArray(array: any[], indexArray: number[]): any[]; /** * <p>在数组中去除重复项,稳定的(保留第一个)</p> * @param array - <p>原始数组</p> * @returns <ul> * <li>删除了重复项的数组</li> * </ul> */ function unique(array: any[]): any[]; /** * <p>根据keys值,构造新数组只包含keys中包含的key</p> * @param array - <p>源数组</p> * @param keys - <p>要取的键值数组</p> * @param [isAllowNull = false] - <p>是否允许值为空,默认不允许</p> * @returns <p>[{key1:XX,key2:XX},{key1:XX,key2:XX}]</p> */ function getWithKeys(array: any[], keys: string[], isAllowNull?: boolean): any[]; /** * <p>删除数组中array1中存在与数值array2中相同的元素</p> * @param array1 - <p>原始数组</p> * @param array2 - <p>校样数组</p> * @returns <p>返回新数组</p> */ function subtract(array1: any[], array2: any[]): any[]; } /** * <p>对象模块</p> */ namespace Object { /** * <p>合并两个对象</p> * @param srcObj - <p>源对象</p> * @param destObj - <p>目标对象</p> * @param [isDeep = true] - <p>是否深拷贝</p> * @param [isNew = false] - <p>是否返回新对象,否则影响源对象</p> * @returns <ul> * <li>合并后的对象</li> * </ul> */ function merge(srcObj: any, destObj: any, isDeep?: boolean, isNew?: boolean): any; /** * <p>拷贝对象</p> * @example * const myclone = THINGX.Utils.clone(obj); * @param obj - <p>需要被拷贝的对象</p> * @param [isDeep = true] - <p>是否深拷贝</p> * @param [endCheck = () => {return false;}] - <p>停止拷贝的条件函数</p> */ function clone(obj: any, isDeep?: boolean, endCheck?: (...params: any[]) => any): any; /** * <p>获取对象第一个key</p> * @param obj - <p>对象</p> */ function getFirstKey(obj: any): any; /** * <p>获取对象第一个值</p> * @param obj - <p>对象</p> */ function getFirstValue(obj: any): any; /** * <p>对象是否为空</p> * @param obj - <p>对象</p> */ function isEmpty(obj: any): boolean; /** * <p>从obj1中删除obj2中已有的元素</p> * @param obj1 - <p>对象1</p> * @param obj2 - <p>对象2</p> * @param [isCheckVal = false] - <p>是否对比元素值一样</p> * @returns <ul> * <li>新对象,obj1的子集</li> * </ul> */ function subtract(obj1: any, obj2: any, isCheckVal?: boolean): any; /** * <p>合并两个对象</p> * @param srcObj - <p>源对象</p> * @param destObj - <p>目标对象</p> * @param [isDeep = true] - <p>是否深拷贝</p> * @param [isNew = false] - <p>是否返回新对象,否则影响源对象</p> * @returns <ul> * <li>合并后的对象</li> * </ul> */ function merge(srcObj: any, destObj: any, isDeep?: boolean, isNew?: boolean): any; /** * <p>拷贝对象</p> * @example * const myclone = THINGX.Utils.clone(obj); * @param obj - <p>需要被拷贝的对象</p> * @param [isDeep = true] - <p>是否深拷贝</p> * @param [endCheck = () => {return false;}] - <p>停止拷贝的条件函数</p> */ function clone(obj: any, isDeep?: boolean, endCheck?: (...params: any[]) => any): any; /** * <p>获取对象第一个key</p> * @param obj - <p>对象</p> */ function getFirstKey(obj: any): any; /** * <p>获取对象第一个值</p> * @param obj - <p>对象</p> */ function getFirstValue(obj: any): any; /** * <p>对象是否为空</p> * @param obj - <p>对象</p> */ function isEmpty(obj: any): boolean; /** * <p>从obj1中删除obj2中已有的元素</p> * @param obj1 - <p>对象1</p> * @param obj2 - <p>对象2</p> * @param [isCheckVal = false] - <p>是否对比元素值一样</p> * @returns <ul> * <li>新对象,obj1的子集</li> * </ul> */ function subtract(obj1: any, obj2: any, isCheckVal?: boolean): any; } /** * <p>字符串模块</p> */ namespace String { } /** * <p>字符串模块</p> */ namespace Time { /** * <p>延时某段时间,只执行最后一次 * 类似于requestAnimationFrame</p> * @param fn - <p>执行函数</p> */ function delay(fn: any, _a: any): void; /** * <p>延时某段时间,只执行最后一次 * 类似于requestAnimationFrame</p> * @param fn - <p>执行函数</p> */ function delay(fn: any, _a: any): void; } /** * <p>vector3向量模块</p> */ namespace Vector { /** * <p>两个向量加</p> * @param vec1 - <p>向量1</p> * @param vec2 - <p>向量2</p> */ function add(vec1: number[], vec2: number[]): number[]; /** * <p>向量与数值相乘</p> * @param vec - <p>向量</p> * @param num - <p>数值</p> */ function multiplyNumber(vec: number[], num: number): number[]; /** * <p>两个向量相减, vec1 - vec2</p> * @param vec1 - <p>向量1</p> * @param vec2 - <p>向量2</p> */ function subtract(vec1: number[], vec2: number[]): number[]; /** * <p>向量标准化</p> * @param vec - <p>向量</p> */ function normalize(vec: number[]): number[]; /** * <p>获取向量长度</p> * @param vec - <p>向量</p> */ function length(vec: number[]): number; /** * <p>获取两个向量之间的距离</p> * @param vec1 - <p>向量1</p> * @param vec2 - <p>向量2</p> */ function distance(vec1: number[], vec2: number[]): number; /** * <p>两个向量加</p> * @param vec1 - <p>向量1</p> * @param vec2 - <p>向量2</p> */ function add(vec1: number[], vec2: number[]): number[]; /** * <p>向量与数值相乘</p> * @param vec - <p>向量</p> * @param num - <p>数值</p> */ function multiplyNumber(vec: number[], num: number): number[]; /** * <p>两个向量相减, vec1 - vec2</p> * @param vec1 - <p>向量1</p> * @param vec2 - <p>向量2</p> */ function subtract(vec1: number[], vec2: number[]): number[]; /** * <p>向量标准化</p> * @param vec - <p>向量</p> */ function normalize(vec: number[]): number[]; /** * <p>获取向量长度</p> * @param vec - <p>向量</p> */ function length(vec: number[]): number; /** * <p>获取两个向量之间的距离</p> * @param vec1 - <p>向量1</p> * @param vec2 - <p>向量2</p> */ function distance(vec1: number[], vec2: number[]): number; } /** * <p>数组模块</p> */ namespace Array { /** * <p>在数组末尾追加元素</p> * @param array - <p>目标数组</p> * @param val - <p>待增加的元素</p> * @param [isForce = false] - <p>是否强制增加,强制则不判断数组中是否已经存在</p> * @returns <ul> * <li>增加元素或已存在元素的索引</li> * </ul> */ function push(array: any[], val: any, isForce?: boolean): number; /** * <p>根据索引数组删除数组元素</p> * @param array - <p>数组</p> * @param indexArray - <p>序列数组</p> */ function removeWithIndexArray(array: any[], indexArray: number[]): any[]; /** * <p>在数组中去除重复项,稳定的(保留第一个)</p> * @param array - <p>原始数组</p> * @returns <ul> * <li>删除了重复项的数组</li> * </ul> */ function unique(array: any[]): any[]; /** * <p>根据keys值,构造新数组只包含keys中包含的key</p> * @param array - <p>源数组</p> * @param keys - <p>要取的键值数组</p> * @param [isAllowNull = false] - <p>是否允许值为空,默认不允许</p> * @returns <p>[{key1:XX,key2:XX},{key1:XX,key2:XX}]</p> */ function getWithKeys(array: any[], keys: string[], isAllowNull?: boolean): any[]; /** * <p>删除数组中array1中存在与数值array2中相同的元素</p> * @param array1 - <p>原始数组</p> * @param array2 - <p>校样数组</p> * @returns <p>返回新数组</p> */ function subtract(array1: any[], array2: any[]): any[]; /** * <p>在数组末尾追加元素</p> * @param array - <p>目标数组</p> * @param val - <p>待增加的元素</p> * @param [isForce = false] - <p>是否强制增加,强制则不判断数组中是否已经存在</p> * @returns <ul> * <li>增加元素或已存在元素的索引</li> * </ul> */ function push(array: any[], val: any, isForce?: boolean): number; /** * <p>根据索引数组删除数组元素</p> * @param array - <p>数组</p> * @param indexArray - <p>序列数组</p> */ function removeWithIndexArray(array: any[], indexArray: number[]): any[]; /** * <p>在数组中去除重复项,稳定的(保留第一个)</p> * @param array - <p>原始数组</p> * @returns <ul> * <li>删除了重