C#開發BIMFACE系列19 服務端API之獲取模型數據4:獲取多個構件的共同屬性

在前幾篇博客中介紹了一個三維文件/模型包含多個構建,每一個構建又是由多種材質組成,每一個構建都有不少屬性。不一樣的構建也有可能包含相同的屬性。html

上圖中能夠看到構建1與構建2擁有相同的屬性2,構建2與構建n擁有相同的屬性1。api

本文主要介紹如何獲取多個構建的共同屬性。ide

請求地址:GET https://api.bimface.com/data/v2/files/{fileId}/commonElementProperties
測試

說明:若傳入的elementId不止一個,則返回這些elementId共同的屬性,共同的定義爲:屬性key與value都相等。ui

          支持查詢模型屬性重寫後多個構件的共同屬性,須要設置請求參數includeOverrides的值爲true。url

參數:spa

請求 path(示例):https://api.bimface.com/data/v2/files/1211223382064960/commonElementProperties?elementIds=stringcode

  若需查詢重寫後的構件的共同屬性,請求示例爲
  https://api.bimface.com/data/v2/files/1211223382064960/commonElementProperties?elementIds=string&includeOverrides=true orm

elementIds 後面的 string 是多個構建Id,多個elementId之間用英文狀態下的半角逗號分隔。 htm

例如: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(); }

 

 

原文出處:https://www.cnblogs.com/SavionZhang/p/11474013.html

相關文章
相關標籤/搜索