C#开发BIMFACE系列19 服务端API之获取模型数据4:获取多个构件的共同属性

在前几篇博客中介绍了一个三维文件/模型包含多个构建,每个构建又是由多种材质组成,每个构建都有很多属性。不同的构建也有可能包含相同的属性。
上图中可以看到构建1与构建2拥有相同的属性2,构建2与构建n拥有相同的属性1。
本文主要介绍如何获取多个构建的共同属性。
请求地址:GET https://api.bimface.com/data/v2/files/{fileId}/commonElementProperties
说明:若传入的elementId不止一个,则返回这些elementId共同的属性,共同的定义为:属性key与value都相等。
支持查询模型属性重写后多个构件的共同属性,需要设置请求参数includeOverrides的值为true。
参数:
请求 path(示例):https://api.bimface.com/data/v2/files/1211223382064960/commonElementProperties?elementIds=string
若需查询重写后的构件的共同属性,请求示例为
https://api.bimface.com/data/v2/files/1211223382064960/commonElementProperties?elementIds=string&includeOverrides=true
elementIds 后面的 string 是多个构建Id,多个elementId之间用英文状态下的半角逗号分隔。
例如:elementId1,elementId2,elementId3,elementId4
请求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"
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" : "313052", "familyGuid" : "000222", "guid" : "79d547c1-5dbf-4e6a-811d-951cf37b29da-0004c6dc", "name" : "norm - 150mm", "properties" : [ { "group" : "dimension", "items" : [ { "code" : "perimeter", "extension" : "object", "key" : "perimeter", "orderNumber" : 0, "unit" : "mm", "value" : 17200, "valueType" : 2 } ] } ] }, "message" : "" }
C#实现方法:
1 /// <summary> 2 /// 获取单个模型的多个构件的共同属性 3 /// </summary> 4 /// <param name="accessToken">令牌</param> 5 /// <param name="fileId">【必填】代表该单模型的文件ID</param> 6 /// <param name="elementIds">【必填】代表该单模型的构件ID列表</param> 7 /// <param name="includeOverrides">【非必填】是否查询修改的属性</param> 8 /// <returns></returns> 9 public virtual SingleModelMultipleElementsCommonProperties GetSingleModelMultipleElementsCommonProperties(string accessToken, long fileId, string[] elementIds, bool? includeOverrides = null) 10 { 11 if (elementIds == null && elementIds.Length == 0) 12 { 13 throw new ArgumentException("参数 elementIds 不能为null 且必须包含元素!"); 14 } 15 16 // GET https://api.bimface.com/data/v2/files/{fileId}/commonElementProperties?elementIds={string} 17 string url = string.Format(BimfaceConstants.API_HOST + "/data/v2/files/{0}/commonElementProperties?elementIds={1}", fileId, elementIds.ToStringWith(",")); 18 if (includeOverrides != null) 19 { 20 url = url + "&includeOverrides=" + includeOverrides; 21 } 22 23 BimFaceHttpHeaders headers = new BimFaceHttpHeaders(); 24 headers.AddOAuth2Header(accessToken); 25 26 try 27 { 28 SingleModelMultipleElementsCommonProperties response; 29 30 HttpManager httpManager = new HttpManager(headers); 31 HttpResult httpResult = httpManager.Get(url); 32 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 33 { 34 response = httpResult.Text.DeserializeJsonToObject<SingleModelMultipleElementsCommonProperties>(); 35 } 36 else 37 { 38 response = new SingleModelMultipleElementsCommonProperties 39 { 40 Message = httpResult.RefText 41 }; 42 } 43 44 return response; 45 } 46 catch (Exception ex) 47 { 48 throw new Exception("[获取多个构件的共同属性]发生异常!", ex); 49 } 50 }
其中调用到的 httpManager.Get() 方法,请参考《C# HTTP系列》
响应结果对应的实体类 SingleModelMultipleElementsCommonProperties ,封装如下:
/// <summary> /// 获取多个构件的共同属性返回的结果类 /// </summary> public class SingleModelMultipleElementsCommonProperties : SingleModelSingleElementProperty { }
SingleModelMultipleElementsCommonProperties 类与 《C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性》 返回的结构类 SingleModelSingleElementProperty 完全相同。
衍生出的一个重载方法:
/// <summary> /// 获取单个模型的多个构件的共同属性 /// </summary> /// <param name="accessToken">令牌</param> /// <param name="fileId">【必填】代表该单模型的文件ID</param> /// <param name="elementIds">【必填】代表该单模型的构件ID列表</param> /// <param name="includeOverrides">【非必填】是否查询修改的属性</param> /// <returns></returns> public virtual SingleModelMultipleElementsCommonProperties GetSingleModelMultipleElementsCommonProperties(string accessToken, long fileId, List<string> elementIds, bool? includeOverrides = null) { return GetSingleModelMultipleElementsCommonProperties(accessToken, fileId, elementIds.ToArray(), includeOverrides); }
在BIMFACE的控制台中可以看到我们上传的文件列表,共计2个文件。模型状态均为转换成功。
以“01_BIMFACE示例文件-Revit模型.rvt”为例来测试。
测试中查询了 300067,282979,283330 这3个构建的共同属性。完整的属性列表如下:
success elementId:300067,282979,283330 SingleModelSingleElementEntity: [boundingBox=, elementId=, familyGuid=, Guid=, name=, Properties=[group=基本属性, items=[code=, extension=, key=specialty, orderNumber=,unit=,value=,valueType=] [code=, extension=, key=familyId, 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=OmniClass 标题, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=OmniClass 编号, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=URL, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=代码名称, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=制造商, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=图像, orderNumber=,unit=,value=,valueType=4] [code=, extension=, key=型号, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=成本, orderNumber=,unit=,value=,valueType=2] [code=, extension=, key=标记, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=注释, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=注释记号, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=类型图像, orderNumber=,unit=,value=,valueType=4] [code=, extension=, key=类型标记, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=类型注释, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=说明, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=部件代码, orderNumber=,unit=,value=,valueType=3] [code=, extension=, key=部件说明, orderNumber=,unit=,value=,valueType=3] ] [group=阶段化, items=[code=, extension=, key=创建的阶段, orderNumber=,unit=,value=新构造,valueType=4] [code=, extension=, key=拆除的阶段, orderNumber=,unit=,value=无,valueType=4] ] [group=限制条件, items=[code=, extension=, key=偏移量, orderNumber=,unit=mm,value=0,valueType=2] ] ]
测试代码如下:
// 获取多个构件的共同属性 protected void btnGetSingleModelMultipleElementsCommonProperties_Click(object sender, EventArgs e) { FileConvertApi api = new FileConvertApi(); string[] elementIds = txtMultipleElementIds.Text.Split(","); var response = api.GetSingleModelMultipleElementsCommonProperties(txtAccessToken.Text, txtFileID.Text.ToLong(), elementIds, chkIncludeOverrides.Checked); txtResult.Text = response.Code.ToString2() + Environment.NewLine + "elementId:" + txtMultipleElementIds.Text + Environment.NewLine + response.Message.ToString2() + Environment.NewLine + response.Data.ToString(); }

成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、AI、DeepSeek、MiniMax、通义千问
2、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
3、jQuery、Vue.js、Bootstrap、ElementUI
4、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM、GaussDB、OpenGauss
5、架构:DDD、ABP、SpringBoot、jFinal
6、环境:跨平台、Windows、Linux
7、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
8、分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?