C#开发BIMFACE系列23 服务端API之获取模型数据8:获取模型链接信息

  • 2019 年 10 月 5 日
  • 筆記

系列目录 【已更新最新开发文章,点击查看详细】

在Revit等BIM设计工具中可以给模型的某个部位添加链接信息。即类似于在Office Word、Excel 中给一段文字添加本地文件链接或者网址链接等类似功能。例如下面的一个RVT模型种包含了2个链接。

下面详细介绍如何获取单个模型包含的所有链接信息。

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

说明:获取一个模型种包含的所有链接信息

参数:

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

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

HTTP响应示例(200):

{    "code" : "success",    "data" : [ {      "guid" : "ffb665b7-067f-4cd6-b080-214e96db0f73-00058185",      "id" : 0,      "name" : "file_link.rvt : 12 : loc <not shared>",      "transform" : ""    } ],    "message" : ""  }

返回的结果封装成 SingleModelLink 类

/// <summary>  ///  获取单个模型的链接信息返回的结果类  /// </summary>  [Serializable]  public class SingleModelLink : GeneralResponse<List<Link>>  {    }
[Serializable]  public class Link  {      [JsonProperty("guid")]      public string Guid { get; set; }        [JsonProperty("id")]      public long? Id { get; set; }        /// <summary>      ///  样例 : "file_link.rvt : 12      /// </summary>      [JsonProperty("name")]      public string Name { get; set; }        [JsonProperty("transform")]      public string Transform { get; set; }        /// <summary>返回表示当前对象的字符串。</summary>      /// <returns>表示当前对象的字符串。</returns>      public override string ToString()      {          return String.Format("[Link guid={0}, id={1}, name={2},transform={3}]",                               Guid, Id, Name, Transform);      }  }

C#实现方法:

 1 /// <summary>   2 ///  获取单个模型的楼层信息   3 /// </summary>   4 /// <param name="accessToken">【必填】令牌</param>   5 /// <param name="fileId">【必填】代表该单模型的文件ID</param>   6 /// <returns></returns>   7 public virtual SingleModelLink GetSingleModelLink(string accessToken, long fileId)   8 {   9     // GET https://api.bimface.com/data/v2/files/{fileId}/links  10     string url = string.Format(BimfaceConstants.API_HOST + "/data/v2/files/{0}/links", fileId);  11  12     BimFaceHttpHeaders headers = new BimFaceHttpHeaders();  13     headers.AddOAuth2Header(accessToken);  14  15     try  16     {  17         SingleModelLink response;  18  19         HttpManager httpManager = new HttpManager(headers);  20         HttpResult httpResult = httpManager.Get(url);  21         if (httpResult.Status == HttpResult.STATUS_SUCCESS)  22         {  23             response = httpResult.Text.DeserializeJsonToObject<SingleModelLink>();  24         }  25         else  26         {  27             response = new SingleModelLink  28             {  29                 Message = httpResult.RefText  30             };  31         }  32  33         return response;  34     }  35     catch (Exception ex)  36     {  37         throw new Exception("[获取模型链接信息]发生异常!", ex);  38     }  39 }

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

测试

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

以模型 “A4.rvt” 为例测试上述的方法

查询到了2条链接信息,与文章开始处的源文件中的链接信息对应。

并不是所有的模型中都包含链接信息,如果不包含,则返回 null

测试代码如下:

 1 // 获取单模型链接信息   2 protected void btnGetSingleModelLink_Click(object sender, EventArgs e)   3 {   4     long fileId = txtFileID.Text.Trim().ToLong();   5     FileConvertApi api = new FileConvertApi();   6     SingleModelLink response = api.GetSingleModelLink(txtAccessToken.Text, fileId);   7   8     StringBuilder sb = new StringBuilder();   9     if (response.Data != null)  10     {  11         List<Link> lstLink = response.Data;  12         foreach (var link in lstLink)  13         {  14             sb.AppendLine(link.ToString());  15         }  16     }  17  18     txtResult.Text = response.Code.ToString2()  19                    + Environment.NewLine  20                    + response.Message.ToString2()  21                    + Environment.NewLine  22                    + sb;  23 }

系列目录 【已更新最新开发文章,点击查看详细】