You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

APS Viewer扩展开发:userFunction中能否调用getBulkProperties方法?

APS Viewer扩展:userFunction中属性查询与优化方案

核心问题解答

  • userFunction内无法调用model.getBulkProperties()/getBulkProperties2():userFunction运行在PropertyDatabase的隔离执行环境中,只能使用该类暴露的方法(比如getAttrDefs、getProperties等),无法直接访问Model实例的方法。

属性过滤的高效方式

不需要完全依赖attrDef手动过滤,有两种更高效的思路:

  1. 调用executeUserFunction时提前限定属性范围
    在调用viewer.model.getPropertyDb().executeUserFunction()时,通过传入props参数指定需要获取的属性名称数组,PropertyDatabase只会返回你需要的属性数据,大幅减少处理的数据量。示例代码:
    viewer.model.getPropertyDb().executeUserFunction(
        function (pdb) {
            // 处理获取到的目标属性
        },
        ['设备ID', '所属区域'] // 指定要拉取的属性名称
    );
    
  2. 在userFunction内利用PropertyDatabase方法快速筛选
    若需要动态按属性组过滤,可在userFunction内部调用pdb.getAttrDefs()获取所有属性定义,再通过属性的category字段快速筛选目标组。示例代码:
    viewer.model.getPropertyDb().executeUserFunction(function (pdb) {
        const targetGroup = '电气组件';
        const relevantAttrDefs = pdb.getAttrDefs().filter(def => def.category === targetGroup);
        // 基于筛选后的属性定义获取对应元素属性
    });
    

额外优化建议

  • 缩小查询的dbId范围:先通过viewer.search()或Viewer的选择工具定位目标组元素,再针对这些dbId执行属性查询,避免全量遍历。
  • 拆分异步任务:如果处理超大数据量,可将复杂逻辑拆分为多个小的userFunction调用,结合异步执行进一步降低主线程负载。

内容的提问来源于stack exchange,提问作者Andrés Martínez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:06:00