# 筛选条件
# 筛选条件的概念说明
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中的以下内容: