C#开发BIMFACE系列30 服务端API之模子对比1:提议模子对比
写给大忙人看的进程和线程
系列目次
在现实项目中,因为需求变动常常须要对模子文件举行修正。为了便于用户相识模子在修正前后发作的变化,BIMFACE供应了模子在线对照功用,能够运用在线的模子对照接口,经由过程简朴的四个步骤完成模子在线对照。模子对照能够对两个文件/模子举行差别性剖析,肯定两个文件/模子之间构件的多少和属性差别,包含增添的构件、删除的构件和修正的构件。 模子对应能够用于举行文件/模子的版本对照。
迥殊申明:模子对照是在BIMFACE云端举行的,一般须要5~10分钟。当模子对照完成后,BIMFACE能关照对照效果。
前置条件
- 您须要将修正前和修正后的模子上传到云端并转换胜利今后才提议模子对照;
- 现在仅支撑.rvt单文件的模子对照。
基础步骤
- 经由过程服务端API提议模子对照(对照前后模子文件的fileId);
- 守候云端对照使命实行;
- 对照完成后,在网页端经由过程挪用JavaScript API完成差别模子的显现;
- 除了显现差别模子,还须要挪用服务端API猎取对照效果(包含新增、删除、修正的构件列表)。
对照流程
模子文件经由云端转换后,生成了BIMFACE定义的数据包。因而,要对照两个模子文件,现实上须要对照两个文件的数据包。以下图所示,文件B是文件A修正后的版本,对照完成以后,其效果包含两个部份:
- 多少差别;
- 变动构件及属性。
提议模子对照
对照操纵的第一步是挪用服务端API提议模子对照。
要求地点:POST https://api.bimface.com/v2/compare
申明:差别版本的模子文件上传并转换胜利后,即可提议模子对照。因为对照不能马上完成,BIMFace支撑在模子对照完成今后,经由过程Callback机制关照运用;别的,运用也能够经由过程接口查询对照状况。
参数:
要求 path(示例):https://api.bimface.com/v2/compare
要求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"
要求 body(示例):
{ "callback" : "https://api.glodon.com/viewing/callback?authCode=BJ90Jk0affae&signature=2ef131395fb6442eb99abd83d45c2412", "comparedEntityType" : "file", "config" : "object", "followingId" : 22145522, "name" : "compare0001", "previousId" : 12311221, "priority" : 2, "sourceId" : "123223223212" }
HTTP相应示例(200):
{ "code" : "success", "data" : { "compareId" : 1248756572307264, "createTime" : "2017-12-25 16:17:27", "name" : "compare0001", "priority" : 2, "reason" : "reason", "sourceId" : "123223223212", "status" : "succcess", "thumbnail" : [ "https://ae01.alicdn.com/kf/Hc2ece6fecb554b9f948f7e4e18e8273dQ.png" ] }, "message" : "" }
C#完成要领:
1 /// <summary> 2 /// 差别版本的模子文件上传并转换胜利后,即可提议模子对照。因为对照不能马上完成,BIMFace支撑在模子对照完成今后,经由过程Callback机制关照运用;别的,运用也能够经由过程接口查询对照状况 3 /// </summary> 4 /// <param name="accessToken">【必填】令牌</param> 5 /// <param name="followingId">修正后图纸(当前本班,本轮)模子文件ID</param> 6 /// <param name="previousId">修正前图纸(汗青版本,上一轮次)模子文件ID</param> 7 /// <returns></returns> 8 public virtual ModelCompareResponse Compare(string accessToken, long followingId, long previousId) 9 { 10 CompareRequest request = new CompareRequest(followingId, previousId); 11 12 return Compare(accessToken, request); 13 }
个中12行的Compare要领挪用了重载要领,完成以下:
1 /// <summary> 2 /// 差别版本的模子文件上传并转换胜利后,即可提议模子对照。因为对照不能马上完成,BIMFace支撑在模子对照完成今后,经由过程Callback机制关照运用;别的,运用也能够经由过程接口查询对照状况 3 /// </summary> 4 /// <param name="accessToken">【必填】令牌</param> 5 /// <param name="request">对照时的要求参数</param> 6 /// <returns></returns> 7 public virtual ModelCompareResponse Compare(string accessToken, CompareRequest request) 8 { 9 //POST https://api.bimface.com/v2/compare 10 string url = BimfaceConstants.API_HOST + "/v2/compare"; 11 string data = request.SerializeToJson(); 12 13 BimFaceHttpHeaders headers = new BimFaceHttpHeaders(); 14 headers.AddOAuth2Header(accessToken); 15 16 try 17 { 18 ModelCompareResponse response; 19 20 HttpManager httpManager = new HttpManager(headers); 21 HttpResult httpResult = httpManager.Post(url, data); 22 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 23 { 24 response = httpResult.Text.DeserializeJsonToObject<ModelCompareResponse>(); 25 } 26 else 27 { 28 response = new ModelCompareResponse 29 { 30 Message = httpResult.RefText 31 }; 32 } 33 34 return response; 35 } 36 catch (Exception ex) 37 { 38 throw new Exception("[提议模子对照]发作非常!", ex); 39 } 40 }
代码中运用的 HttpManager 类请参考我的博客文章《》。
CompareRequest 要求类以下:
1 /// <summary> 2 /// 模子对照要求参数类 3 /// </summary> 4 [Serializable] 5 public class CompareRequest 6 { 7 /// <summary> 8 /// 9 /// </summary> 10 /// <param name="followingId">变动后文件ID,假如为删除文件,则为null</param> 11 /// <param name="previousId">变动前文件ID,假如为新增文件,则为null</param> 12 /// <param name="name">自定义对照的称号</param> 13 public CompareRequest(long? followingId, long? previousId, string name = "") 14 { 15 ComparedEntityType = "file"; //要么赋值,必需是准确的值。假如赋值null,则报错 16 Config = null; 17 SourceId = null; 18 Priority = 2; 19 CallBack = "http://www.app.com/receive"; 20 21 FollowingId = followingId; 22 PreviousId = previousId; 23 if (name.IsNullOrWhiteSpace()) 24 { 25 Name = DateTime.Now.ToString("yyyyMMddHHmmss") + "对照:" + followingId.ToString2() + "-" + previousId.ToString2(); 26 } 27 } 28 29 /// <summary> 30 /// 对照的模子范例:file 31 /// </summary> 32 [JsonProperty("comparedEntityType", NullValueHandling = NullValueHandling.Ignore)] 33 public string ComparedEntityType { get; set; } 34 35 [JsonProperty("config", NullValueHandling = NullValueHandling.Ignore)] 36 public object Config { get; set; } 37 38 /// <summary> 39 /// 变动后文件ID,假如为删除文件,则为null 40 /// </summary> 41 [JsonProperty("followingId")] 42 public long? FollowingId { get; set; } 43 44 /// <summary> 45 /// 变动前文件ID,假如为新增文件,则为null 46 /// </summary> 47 [JsonProperty("previousId")] 48 public long? PreviousId { get; set; } 49 50 /// <summary> 51 /// 用户指定对照后的模子的名字 52 /// </summary> 53 [JsonProperty("name")] 54 public string Name { get; set; } 55 56 /// <summary> 57 /// 第三方运用本身的ID 58 /// </summary> 59 [JsonProperty("sourceId", NullValueHandling = NullValueHandling.Ignore)] 60 public string SourceId { get; set; } 61 62 /// <summary> 63 /// 对照优先级。取值 1、2、3。数字越大,优先级越低。默以为2 64 /// </summary> 65 [JsonProperty("priority")] 66 public int Priority { get; set; } 67 68 /// <summary> 69 /// Callback地点,待转换终了今后,BIMFace会回调该地点 70 /// </summary> 71 [JsonProperty("callback")] 72 public string CallBack { get; set; } 73 }
View Code
个中 Name 属性,在组织函数中默认设置为当前时候 + "对照" + 修正后文件ID + 修正前文件ID。这里是为了方便运用不须要每次挪用该类都给Name赋值,也能够自定义任何有意义的称号。
ModelCompareResponse 相应类以下:
1 /// <summary> 2 /// 模子对照返回的效果类 3 /// </summary> 4 public class ModelCompareResponse : GeneralResponse<ModelCompareBean> 5 { 6 7 } 8 9 public class ModelCompareBean 10 { 11 /// <summary> 12 /// 对照后返回的ID,用于猎取对照状况或许效果等信息 13 /// </summary> 14 [JsonProperty("compareId", NullValueHandling = NullValueHandling.Ignore)] 15 public long? CompareId { get; set; } 16 17 /// <summary> 18 /// 对照完成的斲丧时候,单元是秒 19 /// </summary> 20 [JsonProperty("cost", NullValueHandling = NullValueHandling.Ignore)] 21 public int? Cost { get; set; } 22 23 /// <summary> 24 /// 对照入手下手时候,花样:yyyy-MM-dd hh:mm:ss 25 /// </summary> 26 [JsonProperty("createTime", NullValueHandling = NullValueHandling.Ignore)] 27 public string CreateTime { get; set; } 28 29 /// <summary> 30 /// 用户指定对照后的模子的名字 31 /// </summary> 32 [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] 33 public string Name { get; set; } 34 35 /// <summary> 36 /// 离线数据包生成状况。prepare(未生成); processing(生成中); success(生成胜利); failed(生成失利) 37 /// </summary> 38 [JsonProperty("offlineDatabagStatus", NullValueHandling = NullValueHandling.Ignore)] 39 public string OfflineDatabagStatus { get; set; } 40 41 /// <summary> 42 /// 对照优先级。取值 1、2、3。数字越大,优先级越低。默以为2 43 /// </summary> 44 [JsonProperty("priority", NullValueHandling = NullValueHandling.Ignore)] 45 public int? Priority { get; set; } 46 47 /// <summary> 48 /// 若对照失利,返回失利缘由 49 /// </summary> 50 [JsonProperty("reason", NullValueHandling = NullValueHandling.Ignore)] 51 public string Reason { get; set; } 52 53 /// <summary> 54 /// 第三方运用本身的ID 55 /// </summary> 56 [JsonProperty("sourceId", NullValueHandling = NullValueHandling.Ignore)] 57 public string SourceId { get; set; } 58 59 /// <summary> 60 /// 对照状况:prepare(待对照)、processing(对照中)、success(对照胜利)、failed(对照失利) 61 /// </summary> 62 [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)] 63 public string Status { get; set; } 64 65 /// <summary> 66 /// 对照几个缩略图 67 /// </summary> 68 [JsonProperty("thumbnail", NullValueHandling = NullValueHandling.Ignore)] 69 public string[] Thumbnails { get; set; } 70 71 /// <summary> 72 /// 模子对照的范例 rvt(或许igms…) 73 /// </summary> 74 [JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)] 75 public string Type { get; set; } 76 77 /// <summary> 78 /// 处置惩罚对照使命的worker范例。model-compare(或许drawing-compare…) 79 /// </summary> 80 [JsonProperty("workerType", NullValueHandling = NullValueHandling.Ignore)] 81 public string WorkerType { get; set; } 82 83 /// <summary>返回示意当前对象的字符串。</summary> 84 /// <returns>示意当前对象的字符串。</returns> 85 public override string ToString() 86 { 87 return this.SerializeToJson(); 88 }
View Code
测试
22在BIMFACE掌握台中能够看到我们上传的文件列表,模子状况均为转换胜利。
这里挑选 bimface_2018_mdv_room.rvt 与 Revit案例项目改.0001.rvt 为例来举行对照。
1 /// <summary> 2 /// 入手下手比对 3 /// </summary> 4 protected void btnStartCompare_Click(object sender, EventArgs e) 5 { 6 txtResult.Text = string.Empty; 7 8 long followingId = lbl1RVT.Text.ToLong(); 9 long previousId = lbl2RVT.Text.ToLong(); 10 11 CompareRequest request = new CompareRequest(followingId, previousId); 12 13 ModelCompareApi api = new ModelCompareApi(); 14 ModelCompareResponse response = api.Compare(txtAccessToken.Text, request); 15 16 txtResult.Text = response.SerializeToJson(); 17 txtCompareID.Text = response.Data.CompareId.ToString(); 18 }
挪用对照接口提议对照
返回效果中,code:success示意提议对照胜利。到掌握台中检察以下,新增了一笔对照纪录。
迥殊申明:模子对照是在BIMFACE云端举行的,一般须要5~10分钟。当模子对照完成后,BIMFACE能关照对照效果。
鄙人一篇《》中细致引见怎样猎取模子对照状况。
系列目次
超全!python的文件和目录操作总结