UNPKG

@thingjs/xplugin-cli

Version:

UINO ThingJS-X 零代码平台插件二次开发脚手架,用于生成插件模板开发代码

217 lines (184 loc) 11 kB
import LayerPlugin from "@thingjs/xplugin-core/dist/plugin/layer/LayerPlugin"; // import IndexVue from './index.vue' // let LayerMarkCache = null; 变量的声明方式推荐写入类中,不推荐该使用方法 export default class extends LayerPlugin { //图层孪生体标记缓存器,用于优化孪生体标记的二次加载 //类的私有变量的声明方式(推荐使用) #LayerMarkCache = new Map(); constructor() { // super(IndexVue); //由于显示孪生体插件无图例等UI界面,无需进行 IndexVue界面的载入,使用无参的构造方法 super(); } /** * 场景图层插件安装完成 * -系统加载进行载入安装执行一次(3D场景载入前执行) */ onInstall() { const { digitalTwinsSelector } = this.config; //@deprecated 弃用禁用的API,即将从产品目录移除,非常非常不推荐使用 //uinv.layerManager.convertQueryCondition(digitalTwinsSelector) /** * 注册反向离开层级 * * * THING.App.current.on * -注册事件,可参考: https://docs.thingjs.com/cn/apidocs/THING.App.html#on * * THINGX.EventType.LeaveLevelBackward * -反向离开层级,可参考: http://123.124.196.193:2023/api/index.html#/10%E4%BA%8B%E4%BB%B6%E6%A8%A1%E5%9D%97%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3(THINGX.EventType)?id=event-%e7%b3%bb%e7%bb%9f%e5%b1%82%e7%ba%a7%e4%ba%8b%e4%bb%b6-thingeventtypexlevel * -更多事件类型,参考 THINGX.EventType 命名空间 * * THINGX.Plugin.getDigitalTwinsWithConfigData * -通过元控件配置数据获取孪生体 * -推荐使用该方法,可参考: http://123.124.196.193:2023/api/index.html#/21%E6%8F%92%E4%BB%B6%E6%A8%A1%E5%9D%97%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3(THINGX.Plugin)?id=method-thingxplugingetdigitaltwinswithconfigdata * * THINGX.Marker.getConfig * -获取孪生体标记配置数据 * -推荐使用该方法,可参考: http://123.124.196.193:2023/api/index.html#/18%E6%A0%87%E8%AE%B0%E6%A8%A1%E5%9D%97%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3(THINGX.Marker)?id=method-thingxmarkergetconfig * * THINGX.Marker.hide * -隐藏孪生体标记 * -注意标记的隐藏和显示无法创建或移除标记,创建移除标记需要参考标记方法add、remove * -隐藏标记推荐使用该方法,可参考: http://123.124.196.193:2023/api/index.html#/18%E6%A0%87%E8%AE%B0%E6%A8%A1%E5%9D%97%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3(THINGX.Marker)?id=method-thingxmarkerhide * Future Attention * * onDeactivate * -中无法处理 THING.App.current.level.current (由于存在场景幕布,也不推荐在图层onDeactivate函数中使用 current) * */ THING.App.current.on(THINGX.EventType.LeaveLevelBackward, (ev) => { const { previous } = ev; //通过元控件配置数据获取孪生体 const DigitalTwins = THINGX.Plugin.getDigitalTwinsWithConfigData(digitalTwinsSelector, previous); //计算当前层级需要处理的孪生体数据 const currenttype = previous.type; const filterDigitalTwins = DigitalTwins.filter(element => { return element.parent.type === currenttype || element.type === currenttype }); //通过计算筛选后的孪生体进行标记的隐藏 //存在系统标记操控原因,将该逻辑代码置于宏任务中 setTimeout(() => { filterDigitalTwins.forEach(element => { //获取孪生体标记配置数据 const digitalTwinsMarks = THINGX.Marker.getConfig(element); Object.keys(digitalTwinsMarks).forEach(markLabel => { //筛选生效的标记名称进行隐藏 const selectorMarks = this.config.digitalTwinsSelector.filter(m => { return m.value === markLabel }); selectorMarks.forEach(selectorMark => { //if (this.#LayerMarkCache.get(element.id)) { THINGX.Marker.hide(element, selectorMark.value); // } }); }); }); }); }); } /** * 场景图层插件初始化执行 * -插件实例化执行载入:: 场景或业务加载初始化调用 * -插件刷新执行载入:: 图层刷新按钮调用、API调用 * -层级切换执行载入:: 场景切换层级调用 */ onInited() { const { digitalTwinsSelector } = this.config; //通过条件选择器配置值,获取孪生体 const DigitalTwins = THINGX.Plugin.getDigitalTwinsWithConfigData(digitalTwinsSelector, THING.App.current.level.current); /** * 计算当前层级下一层级符合条件的孪生体数据,进行孪生体数据的隐藏 * * Future Attention * -由于孪生体显示隐藏存在继承性,开发阶段可进行插件数据筛选优化操作 * -如果不进行数据筛选处理,造成孪生体数据无效设置显示隐藏状态 * */ const currenttype = this.app.level.current.type; const filterDigitalTwins = DigitalTwins.filter(element => { return element.parent.type === currenttype || element.type === currenttype }); THINGX.DigitalTwin.hide(filterDigitalTwins); } /** * 场景图层插件激活函数 * -插件按钮执行调用 * -层级切换执行调用 */ onActivate() { const { digitalTwinsSelector } = this.config; //通过条件选择器配置值,获取孪生体 const DigitalTwins = THINGX.Plugin.getDigitalTwinsWithConfigData(digitalTwinsSelector, THING.App.current.level.current); /** * 计算当前层级符合条件被隐藏的孪生体进行显示 * * * THINGX.Marker.show * -显示孪生体标记 * -注意标记的隐藏和显示无法创建或移除标记,创建移除标记需要参考标记方法add、remove * -隐藏标记推荐使用该方法,可参考: http://123.124.196.193:2023/api/index.html#/18%E6%A0%87%E8%AE%B0%E6%A8%A1%E5%9D%97%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3(THINGX.Marker)?id=method-thingxmarkershow */ const currenttype = this.app.level.current.type; const filterDigitalTwins = DigitalTwins.filter(element => { return element.parent.type === currenttype || element.type === currenttype }); // THINGX.DigitalTwin.show(this.app.level.current);//是否处理自身外立面等 THINGX.DigitalTwin.show(filterDigitalTwins); /*** * 通过计算筛选后的孪生体进行标记的显示 * 标记操作API ,可参考API标记模块: http://123.124.196.193:2023/api/index.html#/18%E6%A0%87%E8%AE%B0%E6%A8%A1%E5%9D%97%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3(THINGX.Marker) * * THINGX.Marker.show * * THINGX.Marker.hide * * THINGX.Marker.add * * THINGX.Marker.remove * * #LayerMarkCache * -图层标记名称缓存管理器 * -用于优化二次性能加载 * */ filterDigitalTwins.forEach(element => { const digitalTwinsMarks = THINGX.Marker.getConfig(element); Object.keys(digitalTwinsMarks).forEach(markLabel => { //获取孪生体标记配置数据 const selectorMarks = this.config.digitalTwinsSelector.filter(m => { return m.value === markLabel }); selectorMarks.forEach(selectorMark => { //筛选生效的标记名称进行显示 //添加 markcache 进行简单性能优化,提升二次载入性能 if (this.#LayerMarkCache.get(element.id)) { //缓存管理存在即可进行显示 THINGX.Marker.show(element, selectorMark.value); } else { //不存在进行孪生体标记的添加创建,添加后将创建的孪生体标记是否继承父类显示设置为否,标记的显隐藏由程序逻辑进行控制 let mark = THINGX.Marker.add(element, selectorMark.value); mark[0].inheritVisible = false; this.#LayerMarkCache.set(element.id, selectorMark.value); } }); }); }); } /** * 场景图层插件取消激活函数 * -插件按钮执行调用 * -层级切换(前)执行调用 * -不推荐在该函数内执行获取当前层级孪生体等操作 */ onDeactivate() { const { digitalTwinsSelector } = this.config; //通过条件选择器配置值,获取孪生体 const DigitalTwins = THINGX.Plugin.getDigitalTwinsWithConfigData(digitalTwinsSelector, THING.App.current.level.current); //计算需要恢复隐藏的孪生体数据进行隐藏,由于存在场景幕布,孪生体标记的隐藏置于反向离开层级完成事件内处理 const currenttype = this.app.level.current.type; const filterDigitalTwins = DigitalTwins.filter(element => { return element.parent.type === currenttype });//|| element.type === previoustype // THINGX.DigitalTwin.hide(this.app.level.current); THINGX.DigitalTwin.hide(filterDigitalTwins); } /** * 场景图层插件卸载完成 * -场景配置面板删除图层调用 * -图层的删除会将执行全部 图层场景插件实例的卸载方法 * -该函数能够保证代码的健壮及功能完整性(推荐使用) */ onUninstall() { const { digitalTwinsSelector } = this.config; //通过条件选择器配置值,获取孪生体 //恢复被操作的孪生体数据(该示例仅完成当前层级的孪生体恢复,具体需依据具体需求进行调整) const DigitalTwins = THINGX.Plugin.getDigitalTwinsWithConfigData(digitalTwinsSelector, THING.App.current.level.current); THINGX.DigitalTwin.show(DigitalTwins); //移除图层孪生体标记缓存管理器 //释放相关内存空间(保证代码的稳定性) for (var [key, value] of this.#LayerMarkCache) { const d = this.app.query(`[id=${key}]`); THINGX.Marker.remove(d[0], value); //this.#LayerMarkCache.remove(d[0].id); } this.#LayerMarkCache = undefined; } };