在《C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性》中介绍了获取单个文件/模型的单个构建的属性,本篇介绍如何一次性获取多个构建的属性。

请求地址:POST https://api.bimface.com/data/v2/files/{fileId}/elements

说明:支持查询模型属性重写后多个构件的属性,需要设置请求参数includeOverrides的值为true

参数:

其中 ElementPropertyFilterRequest 类如下:

/// <summary>
/// 批量获取构件属性的请求参数
/// </summary>
[Serializable]
public class ElementPropertyFilterRequest
{
/// <summary>
/// 【必填】构建ID数组。例如: [ "313154", "313047" ]
/// </summary>
[JsonProperty("elementIds")]
public string[] ElementIds { get; set; } /// <summary>
/// 【非必填】过来条件
/// </summary>
[JsonProperty("filter", NullValueHandling = NullValueHandling.Ignore)]
public GroupAndKeysPair[] Filters { get; set; }
}
[Serializable]
public class GroupAndKeysPair
{
/// <summary>
/// 分组名称。例如:default、shape、size
/// </summary>
[JsonProperty("group")]
public string Group { get; set; } /// <summary>
/// 关键字数组。例如: [ "length", "width", "a" ]
/// </summary>
[JsonProperty("keys", NullValueHandling = NullValueHandling.Ignore)]
public string[] Keys { get; set; }
}

请求 path(示例):https://api.bimface.com/data/v2/files/1211223382064960/elements

若需查询重写后的构件属性,请求示例为

https://api.bimface.com/data/v2/files/1211223382064960/elements?includeOverrides=true

请求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"

请求 body(示例):

{
"elementIds" : [ "", "" ],
"filter" : [ {
"group" : "default"
}, {
"group" : "shape"
}, {
"group" : "size",
"keys" : [ "length", "width", "a" ]
} ]
}

HTTP响应示例(200):

{
"code" : "success",
"data" : [ {
"boundingBox" : {
"max" : {
"x" : -4938.068482562385,
"y" : -3201.59397858169,
"z" : 0.0
},
"min" : {
"x" : -4938.068482562385,
"y" : -3201.59397858169,
"z" : 0.0
}
},
"elementId" : "",
"familyGuid" : "",
"guid" : "79d547c1-5dbf-4e6a-811d-951cf37b29da-0004c6dc",
"name" : "norm - 150mm",
"properties" : [ {
"group" : "dimension",
"items" : [ {
"code" : "perimeter",
"extension" : "object",
"key" : "perimeter",
"orderNumber" : ,
"unit" : "mm",
"value" : ,
"valueType" :
} ]
} ]
} ],
"message" : ""
}

该返回结果中的data部分是一个数组,对应多个构建的属性。与《C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性》中返回的结果相同。

C#实现方法:

 /// <summary>
/// 批量获取单个模型的多个构件属性
/// </summary>
/// <param name="accessToken">令牌</param>
/// <param name="fileId">【必填】代表该单模型的文件ID</param>
/// <param name="request">【必填】请求过滤参数</param>
/// <param name="includeOverrides">【非必填】是否查询修改的属性</param>
/// <returns></returns>
public virtual SingleModelMultipleElementsProperties GetSingleModelMultipleElementsProperties(string accessToken, long fileId, ElementPropertyFilterRequest request, bool? includeOverrides = null)
{
if (request == null)
{
throw new ArgumentException("参数 request 不能为null !");
} // POST https://api.bimface.com/data/v2/files/{fileId}/elements
string url = string.Format(BimfaceConstants.API_HOST + "/data/v2/files/{0}/elements", fileId);
if (includeOverrides != null)
{
url = url + "?includeOverrides=" + includeOverrides;
} string data = request.SerializeToJson(); BimFaceHttpHeaders headers = new BimFaceHttpHeaders();
headers.AddOAuth2Header(accessToken); try
{
SingleModelMultipleElementsProperties response; HttpManager httpManager = new HttpManager(headers);
HttpResult httpResult = httpManager.Post(url, data);
if (httpResult.Status == HttpResult.STATUS_SUCCESS)
{
response = httpResult.Text.DeserializeJsonToObject<SingleModelMultipleElementsProperties>();
}
else
{
response = new SingleModelMultipleElementsProperties
{
Message = httpResult.RefText
};
} return response;
}
catch (Exception ex)
{
throw new Exception("[批量获取构件属性]发生异常!", ex);
}
}

其中调用到的 httpManager.Post() 方法,请参考《C# HTTP系列》

其中返回结果类  SingleModelMultipleElementsProperties 定义如下:

/// <summary>
/// 批量获取单个模型的多个构件属性返回的结果类
/// </summary>
[Serializable]
public class SingleModelMultipleElementsProperties : GeneralResponse<List<SingleModelSingleElementEntity>>
{ }
测试

在BIMFACE的控制台中可以看到我们上传的文件列表,共计2个文件。模型状态均为转换成功。

以“01_BIMFACE示例文件-Revit模型.rvt”为例来测试。

其中使用了 300067,282979 这2个构建ID。查询的构建属性完整结果如下:

success
elementId:, SingleModelSingleElementEntity:
[boundingBox=[max=[x=5838.783, y=4387.716, z=],
min=[x=5788.783, y=4237.716, z=]
],
elementId=,
familyGuid=2d99307a-66cd--b173-5c88d252416e-,
Guid=89c90034-40ae-423a--8f5624db86c1-,
name= x mm,
Properties=[group=基本属性,
items= [code=, extension=, key=specialty, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=floor, orderNumber=,unit=,value=F2,valueType=]
[code=, extension=, key=categoryId, orderNumber=,unit=,value=-,valueType=]
[code=, extension=, key=categoryName, orderNumber=,unit=,value=幕墙竖梃,valueType=]
[code=, extension=, key=family, orderNumber=,unit=,value=矩形竖梃,valueType=]
[code=, extension=, key=familyId, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=familyType, orderNumber=,unit=,value= x mm,valueType=]
[code=, extension=, key=familyTypeId, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=systemType, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=building, orderNumber=,unit=,value=,valueType=]
]
[group=尺寸标注,
items=[code=, extension=, key=边 上的宽度, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=边 上的宽度, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=长度, orderNumber=,unit=mm,value=,valueType=]
]
[group=材质和装饰,
items=[code=, extension=, key=材质, orderNumber=,unit=,value=金属 - 铝,valueType=]
]
[group=构造,
items=[code=, extension=, key=位置, orderNumber=,unit=,value=垂直于面,valueType=]
[code=, extension=, key=厚度, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=角竖梃, orderNumber=,unit=,value=False,valueType=]
[code=, extension=, key=轮廓, orderNumber=,unit=,value=默认,valueType=]
]
[group=标识数据,
items=[code=, extension=, key=OmniClass 标题, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=OmniClass 编号, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=URL, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=代码名称, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=制造商, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=图像, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=型号, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=成本, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=标记, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=注释, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=注释记号, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=类型图像, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=类型标记, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=类型注释, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=说明, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=部件代码, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=部件说明, orderNumber=,unit=,value=,valueType=]
]
[group=阶段化,
items=[code=, extension=, key=创建的阶段, orderNumber=,unit=,value=新构造,valueType=]
[code=, extension=, key=拆除的阶段, orderNumber=,unit=,value=无,valueType=]
]
[group=限制条件,
items=[code=, extension=, key=偏移量, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=角度, orderNumber=,unit=°,value=0.00,valueType=]
]
] SingleModelSingleElementEntity:
[boundingBox=[max=[x=-2066.217, y=-7714.284, z=],
min=[x=-2116.217, y=-7864.284, z=]
],
elementId=,
familyGuid=2d99307a-66cd--b173-5c88d252416e-,
Guid=0438595c-b6fe-4e10-9b43-4c629826282c-,
name= x mm,
Properties=[group=基本属性,
items=[code=, extension=, key=specialty, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=floor, orderNumber=,unit=,value=地坪,valueType=]
[code=, extension=, key=categoryId, orderNumber=,unit=,value=-,valueType=]
[code=, extension=, key=categoryName, orderNumber=,unit=,value=幕墙竖梃,valueType=]
[code=, extension=, key=family, orderNumber=,unit=,value=矩形竖梃,valueType=]
[code=, extension=, key=familyId, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=familyType, orderNumber=,unit=,value= x mm,valueType=]
[code=, extension=, key=familyTypeId, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=systemType, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=building, orderNumber=,unit=,value=,valueType=]
]
[group=尺寸标注,
items=[code=, extension=, key=边 上的宽度, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=边 上的宽度, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=长度, orderNumber=,unit=mm,value=,valueType=]
]
[group=材质和装饰,
items=[code=, extension=, key=材质, orderNumber=,unit=,value=金属 - 铝,valueType=]
]
[group=构造,
items=[code=, extension=, key=位置, orderNumber=,unit=,value=垂直于面,valueType=]
[code=, extension=, key=厚度, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=角竖梃, orderNumber=,unit=,value=False,valueType=]
[code=, extension=, key=轮廓, orderNumber=,unit=,value=默认,valueType=]
]
[group=标识数据,
items=[code=, extension=, key=OmniClass 标题, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=OmniClass 编号, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=URL, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=代码名称, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=制造商, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=图像, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=型号, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=成本, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=标记, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=注释, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=注释记号, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=类型图像, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=类型标记, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=类型注释, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=说明, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=部件代码, orderNumber=,unit=,value=,valueType=]
[code=, extension=, key=部件说明, orderNumber=,unit=,value=,valueType=]
]
[group=阶段化,
items=[code=, extension=, key=创建的阶段, orderNumber=,unit=,value=新构造,valueType=]
[code=, extension=, key=拆除的阶段, orderNumber=,unit=,value=无,valueType=]
]
[group=限制条件,
items=[code=, extension=, key=偏移量, orderNumber=,unit=mm,value=,valueType=]
[code=, extension=, key=角度, orderNumber=,unit=°,value=0.00,valueType=]
]
]

测试代码如下:

 // 批量获取构件属性
protected void btnGetSingleModelMultipleElementsProperties_Click(object sender, EventArgs e)
{
string[] elementIds = txtMultipleElementIds.Text.Split(","); ElementPropertyFilterRequest request = new ElementPropertyFilterRequest();
request.ElementIds = elementIds; FileConvertApi api = new FileConvertApi();
var response = api.GetSingleModelMultipleElementsProperties(txtAccessToken.Text, txtFileID.Text.ToLong(), request, chkIncludeOverrides.Checked); StringBuilder sb = new StringBuilder();
List<SingleModelSingleElementEntity> lstProperties = response.Data;
foreach (var property in lstProperties)
{
sb.AppendLine(property.ToString());
}
txtResult.Text = response.Code.ToString2()
+ Environment.NewLine
+ "elementId:" + txtMultipleElementIds.Text
+ Environment.NewLine
+ response.Message.ToString2()
+ Environment.NewLine
+ sb;
}
 

C#开发BIMFACE系列20 服务端API之获取模型数据5:批量获取构件属性的更多相关文章

  1. C#开发BIMFACE系列45 服务端API之创建离线数据包

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] BIMFACE的常规应用方式有公有云与私有化部署两种方式,并且浏览模型或者图纸需要使用ViewToken,ViewToke ...

  2. C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...

  3. C#开发BIMFACE系列40 服务端API之模型集成

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型.现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一 ...

  4. C#开发BIMFACE系列41 服务端API之模型对比

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在建筑施工图审查系统中,设计单位提交设计完成的模型/图纸,审查专家审查模型/图纸.审查过程中如果发现不符合规范的地方,则流 ...

  5. C#开发BIMFACE系列42 服务端API之图纸对比

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在我的前一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>中详细介绍了BIMFACE服务端接口 ...

  6. C#开发BIMFACE系列43 服务端API之图纸拆分

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在上一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>的最后留了一个问题,在常规业务场景下,一 ...

  7. C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在前两篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>.<C#开发BIMFACE系列43 ...

  8. C#开发BIMFACE系列6 服务端API之获取文件信息

    在<C#开发BIMFACE系列4 服务端API之源上传文件>.<C#开发BIMFACE系列5 服务端API之文件直传>两篇文章中详细介绍了如何将本地文件上传到BIMFACE服务 ...

  9. C#开发BIMFACE系列4 服务端API之源上传文件

    在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...

随机推荐

  1. Android TitleBar推荐

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/206 Android TitleBar推荐 这段时间在帮别 ...

  2. Struts2.0

    流程详解:   配置详解:   constant  (常用常量配置) 使用Struts2 框架 ,先要导入Struts2 需要的jar 包 , 通过配置中央控制器 以及web.xml 来实现  Str ...

  3. 第04组 Beta冲刺(2/4)

    队名:斗地组 组长博客:地址 作业博客:Beta冲刺(2/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.分配展示任务 2.收集各个组员的进度 3.写博客 展示GitHub当日代码/文档 ...

  4. opencv在VS2017上的环境搭建

    最近开始做一个图像识别的小项目,需要安装opencv,VS里报的错迷的一批,网上教程好多,找了好长时间,终于找的两个解决了问题,在这儿记录一下. 安装很简单,在opencv官网(https://ope ...

  5. 01-linux介绍

    一.Linux简介 Linux内核最初只是由芬兰人林纳斯.托瓦兹在大学时出于爱好写出来的,是一套免费使用和自由传播的类Unix操作系统,是基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU ...

  6. Centos7 下 PHP 添加缺少的组件 sockets 和 openssl

    环境是 centos7 + nginx 1.14 + php 7.2.18,由于新增邮件发送功能,使用的是 socket 通讯的方式,需要开启 php 的 sockes 和 openssl 扩展 安装 ...

  7. 剑指offer笔记面试题13----机器人的运动范围

    题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它每次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子.例如,当k为18时,机器人能够进入方格( ...

  8. JS基础语法---作用域链

    从函数嵌套来分析: (层数一般5层内) var num=10; function f1() { var num=20; function f2() { var num=30; function f3( ...

  9. SAP系统邮件功能配置

    相信SAP顾问或多或少都会接到用户要求SAP系统能够定时发送邮件的功能,定时将用户需要的信息已邮件的方式发送给固定的人员. 下面就来讲一下SAP发送邮件应该如何配置: 1.RZ10做配置: is/SM ...

  10. TP5 ajax请求报500错误

    场景:几个站点从阿里云迁移到腾讯云,然后 TP5项目 ajax请求报500错误 数据返回成功,但是http状态码是500,不走success,一直走error 如下图: 原因分析: 服务器centos ...