# 筛选条件

# 筛选条件的概念说明

BIMFACE支持对构件进行隐藏、隔离、着色等操作,操作对象可以按照构件ID的数组、构件筛选条件、全部构件三种方式传参。 其中,按构件筛选条件方式是通过构件的objectData信息筛选出构件集合,从而实现相关操作。

# 筛选条件的内容

rvt、rfa等三维模型的objectData信息一般包含categoryId、family、familyType、levelName及specialty等字段,objectData信息示例如下:

{
  "categoryId": "-2000035",
  "family": "基本屋顶",
  "familyType": "常规ROOF - 400mm",
  "levelName": "ROOF",
  "specialty": ""
}

skp、nwd等三维模型的objectData信息字段不固定,从L0开始依次往下,objectData信息示例如下:

{
  "L0": "1",
  "L1": "2",
  "L2": "150",
  "L3": "151",
  "L4": "194"
}

# 筛选条件的组合形式

筛选条件支持两种组合形式:

  • 交集:既满足条件A,又满足条件B;
  • 并集:满足条件A,或者满足条件B。

交集的筛选条件格式是一个包含多个字段的JSON对象。 如果想要对 categoryId = -2001340,且 levelName = "F01" 的构件(交集)进行着色,则筛选条件输入如下:

[
  {
    "categoryId": -2001340,
    "levelName": "F01"
  }
]

并集的筛选条件格式是一个包含多个JSON对象的数组。 如果想要对 categoryId = -2001340,且 levelName = "F01" 的构件(交集),或者 levelName = "F02" 的构件(并集)进行着色,则筛选条件输入如下:

[
  {
    "categoryId":-2001340,
    "levelName":"F01"
  },
  {
    "levelName":"F02"
  }
]

# 筛选条件的获取方式

# 1.通过构件ID获取

筛选条件可以通过BimModel类下的getObjectDataById的方式获取,通过该方法获取到objectData信息后可以按需进行组合,获取方法示例如下:

// 根据构件ID获取构件信息
viewer3D.getModel(modelId).getObjectDataById('267327');
# 2.通过构件树获取

筛选条件也可以通过构件树节点点击监听事件获取,点击到指定层级的构件树节点(根节点和叶子节点暂不支持),可以返回筛选条件信息,获取方法示例如下:

// 构造WebApplication
let webApplication = new Glodon.Bimface.Application.WebApplication3D(webAppConfig);
// 添加构件树节点点击监听事件
webApplication.addEventListener(Glodon.Bimface.Application.WebApplication3DEvent.ModelTreeNodeClicked, getCondition);
// 定义获取筛选条件的方法
function getCondition(data) {
  if(data.condition){
    // 定义筛选条件
    let condition = data.condition; 
    let objectData = condition.objectData;
    //定义颜色
    let color = new Glodon.Web.Graphics.Color("#32D3A6", 1);
    //根据条件对构件线框着色
    viewer3D.getModel(modelId).overrideComponentsFrameColor(condition, color);
  }
};

# 筛选条件的使用方法说明

BIMFACE早期的构件操作相关的接口,按照构件ID的数组、构件筛选条件、全部构件三种方式提供了三个接口,以BimModel类下的构件着色方法为例,提供了以下三个接口:

  • overrideComponentsColorById(ids, color)
  • overrideComponentsColorByObjectData(conditions, color)
  • overrideAllComponentsColor(color)

根据筛选条件给构件着色的使用示例如下:

// 定义筛选条件
let objectData = [
  {
    "categoryId": -2001340,
    "levelName": "F01"
  }
];
// 定义颜色
let color = new Glodon.Web.Graphics.Color("#32D3A6", 1);
// 根据筛选条件给构件着色
viewer3D.getModel(modelId).overrideComponentsColorByObjectData(objectData, color);

BIMFACE后续新增的接口,通过对象的形式将构件ID的数组、构件筛选条件、全部构件三种参数进行了合并,以BimModel类下的构件线框着色方法为例,提供了以下接口:

  • overrideComponentsFrameColor(condition, color)

根据条件对构件线框着色的使用示例如下:

//定义条件对象
let condition = {
  "objectData": [
    {
    "L2": "150",
    },
    {
    "L2": "169",
    }
  ]
};
//定义颜色
let color = new Glodon.Web.Graphics.Color("#32D3A6", 1);
//根据条件对构件线框着色
viewer3D.getModel(modelId).overrideComponentsFrameColor(condition, color);

更多关于筛选条件的用法,可参考示例Demo中的以下内容: