zoukankan      html  css  js  c++  java
  • C#开发BIMFACE系列24 服务端API之获取模型数据9:获取单个房间信息

    大厦建筑模型中,基本上包含多个楼层,每个楼层包含多个房间等信息。在《C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息》中介绍了如何获取一个模型中包含的楼层信息、面积分区、房间等信息。本篇主要介绍如何获取单个模型中单个房间信息。

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

    说明:获取单个模型种单个房间信息

    参数:

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

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

    HTTP响应示例(200):

    {
      "code" : "success",
      "data" : {
        "area" : 7.256476003661832E7,
        "bboxMax" : {
          "x" : -4938.068482562385,
          "y" : -3201.59397858169,
          "z" : 0.0
        },
        "bboxMin" : {
          "x" : -4938.068482562385,
          "y" : -3201.59397858169,
          "z" : 0.0
        },
        "boundary" : "",
        "id" : "313137",
        "levelId" : "11",
        "maxPt" : {
          "x" : -4938.068482562385,
          "y" : -3201.59397858169,
          "z" : 0.0
        },
        "minPt" : {
          "x" : -4938.068482562385,
          "y" : -3201.59397858169,
          "z" : 0.0
        },
        "name" : "dining room 4",
        "perimeter" : 40087.80000000279,
        "properties" : [ {
          "group" : "dimension",
          "items" : [ {
            "code" : "perimeter",
            "extension" : "object",
            "key" : "perimeter",
            "orderNumber" : 0,
            "unit" : "mm",
            "value" : 17200,
            "valueType" : 2
          } ]
        } ]
      },
      "message" : ""
    }

    该返回结果的结构比较复杂。在文章最后会给出对应封装成的C#类。

    C#实现方法:

     1 /// <summary>
     2 ///  获取单个模型中单个楼层信息
     3 /// </summary>
     4 /// <param name="accessToken">【必填】令牌</param>
     5 /// <param name="fileId">【必填】代表该单模型的文件ID</param>
     6 /// <param name="roomId">【必填】房间ID</param>
     7 /// <returns></returns>
     8 public virtual SingleModelSingleRoom GetSingleModelSingleRoom(string accessToken, long fileId, string roomId)
     9 {
    10     // GET https://api.bimface.com/data/v2/files/{fileId}/rooms/{roomId}
    11     string url = string.Format(BimfaceConstants.API_HOST + "/data/v2/files/{0}/rooms/{1}", fileId, roomId);
    12 
    13     BimFaceHttpHeaders headers = new BimFaceHttpHeaders();
    14     headers.AddOAuth2Header(accessToken);
    15 
    16     try
    17     {
    18         SingleModelSingleRoom response;
    19 
    20         HttpManager httpManager = new HttpManager(headers);
    21         HttpResult httpResult = httpManager.Get(url);
    22         if (httpResult.Status == HttpResult.STATUS_SUCCESS)
    23         {
    24             response = httpResult.Text.DeserializeJsonToObject<SingleModelSingleRoom>();
    25         }
    26         else
    27         {
    28             response = new SingleModelSingleRoom
    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.Get() 方法,请参考《C# HTTP系列》

    测试

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

     以“Revit案例项目改.0001.rvt”为例测试上述的方法。

    在《C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息》中查询返回的结果中包含 RoomId

    以 RoomID 为 857552 为例来查询该房间的详细信息

    完整的房间信息如下:

    success
    
    [area=70319994.3674652, 
     bboxMax=[x=13061.9309943162, y=-3481.59383914623, z=2199.99991189159], 
     bboxMin=[x=7061.93123461209, y=-15201.5933697684, z=0], 
     boundary={"version":"2.0","loops":[[[{"z":0.0,"y":-15201.593978581839,"x":13061.931517437606},
                                          {"z":0.0,"y":-3481.5939785817081,"x":13061.931517437624}
                                         ],
                                         [{"z":0.0,"y":-3481.5939785817077,"x":13061.931517437624},
                                          {"z":0.0,"y":-3481.5939785816972,"x":10001.931517437628}
                                         ],
                                         [{"z":0.0,"y":-3481.5939785816972,"x":10001.931517437628},
                                          {"z":0.0,"y":-3481.5939785816904,"x":7726.6267896735426}
                                         ],
                                         [{"z":0.0,"y":-3481.5939785816904,"x":7726.6267896735426},
                                          {"z":0.0,"y":-3481.59397858169,"x":7558.3362452017109}
                                         ],
                                         [{"z":0.0,"y":-3481.59397858169,"x":7558.3362452017109},
                                          {"z":0.0,"y":-3481.5939785816881,"x":7061.9315174376252}
                                         ],
                                         [{"z":0.0,"y":-3481.5939785816881,"x":7061.9315174376252},
                                          {"z":0.0,"y":-15201.593978581817,"x":7061.9315174376061}
                                         ],
                                         [{"z":0.0,"y":-15201.593978581821,"x":7061.9315174376061},
                                          {"z":0.0,"y":-15201.593978581839,"x":13061.931517437606}
                                         ]
                                        ] 
                                       ]
              },
      id=857552, 
      levelId=, 
      maxPt=[x=13061.9309943162, y=-3481.59383914623, z=0], 
      minPt=[x=7061.93123461209, y=-15201.5933697684, z=0], 
      name=Living 106, 
      perimeter=35579.9985750456,
      properties=[group=尺寸标注, 
                  items=[code=, extension=, key=体积, orderNumber=,unit=m³,value=154.70,valueType=2]
                        [code=, extension=, key=周长, orderNumber=,unit=mm,value=35580,valueType=2]
                        [code=, extension=, key=房间标示高度, orderNumber=,unit=mm,value=4000,valueType=2]
                        [code=, extension=, key=计算高度, orderNumber=,unit=mm,value=0,valueType=2]
                        [code=, extension=, key=面积, orderNumber=,unit=m²,value=70,valueType=2]
                 ]
                 [group=标识数据, 
                  items=[code=, extension=, key=Occupant, orderNumber=,unit=,value=,valueType=3]
                        [code=, extension=, key=占用, orderNumber=,unit=,value=,valueType=3]
                        [code=, extension=, key=名称, orderNumber=,unit=,value=Living,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]
                        [code=, extension=, key=编号, orderNumber=,unit=,value=106,valueType=3]
                        [code=, extension=, key=部门, orderNumber=,unit=,value=,valueType=3]
                ]
                [group=阶段化, 
                 items=[code=, extension=, key=相位, orderNumber=,unit=,value=Working Drawings,valueType=4]
                ] 
                [group=限制条件, 
                 items=[code=, extension=, key=上限, orderNumber=,unit=,value=Level 1,valueType=4]
                       [code=, extension=, key=底部偏移, orderNumber=,unit=mm,value=0,valueType=2]
                       [code=, extension=, key=标高, orderNumber=,unit=,value=Level 1,valueType=4]
                       [code=, extension=, key=高度偏移, orderNumber=,unit=mm,value=4000,valueType=2]
                ]
    ]

    测试代码如下:

    // 获取单个房间信息
    protected void btnGetSingleModelSingleRoom_Click(object sender, EventArgs e)
    {
        long fileId = txtFileID.Text.Trim().ToLong();
        string roomId = txtRoomId.Text.Trim();
        FileConvertApi api = new FileConvertApi();  
        SingleModelSingleRoom response = api.GetSingleModelSingleRoom(txtAccessToken.Text, fileId, roomId);
    
        txtResult.Text = response.Code.ToString2()
                       + Environment.NewLine
                       + response.Message.ToString2()
                       + Environment.NewLine
                       + response.Data;
    }

    该接口返回的响应信息,封装成对应的C# SingleModelSingleRoom 类:

    /// <summary>
    /// 获取单个模型单个房间信息返回的结果类
    /// </summary>
    public class SingleModelSingleRoom : GeneralResponse<Room>
    {
    
    }

    Room 类如下:

     1 /// <summary>
     2 ///  模型的房间信息
     3 /// </summary>
     4 [Serializable]
     5 public class Room
     6 {
     7     /// <summary>
     8     ///  样例 : 7.256476003661832E7
     9     /// </summary>
    10     [JsonProperty("area")]
    11     public double? Area { get; set; }
    12 
    13     [JsonProperty("bboxMax")]
    14     public Coordinate BboxMax { get; set; }
    15 
    16     [JsonProperty("bboxMin")]
    17     public Coordinate BboxMin { get; set; }
    18 
    19     /// <summary>
    20     ///  边界
    21     /// </summary>
    22     [JsonProperty("boundary")]
    23     public string Boundary { get; set; }
    24 
    25     /// <summary>
    26     ///  编号
    27     /// </summary>
    28     [JsonProperty("id")]
    29     public string Id { get; set; }
    30 
    31     /// <summary>
    32     ///  水平线编号
    33     /// </summary>
    34     [JsonProperty("levelId")]
    35     public string LevelId { get; set; }
    36 
    37     [JsonProperty("maxPt")]
    38     public Coordinate MaxPt { get; set; }
    39 
    40     [JsonProperty("minPt")]
    41     public Coordinate MinPt { get; set; }
    42 
    43     /// <summary>
    44     ///  对象名称。例如:"dining room 4"
    45     /// </summary>
    46     [JsonProperty("name")]
    47     public string Name { get; set; }
    48 
    49     /// <summary>
    50     ///  样例 : 40087.80000000279
    51     /// </summary>
    52     [JsonProperty("perimeter")]
    53     public double? Perimeter { get; set; }
    54 
    55     [JsonProperty("properties")]
    56     public PropertyGroup[] Properties { get; set; }
    57 
    58     /// <summary>返回表示当前对象的字符串。</summary>
    59     /// <returns>表示当前对象的字符串。</returns>
    60     public override string ToString()
    61     {
    62         StringBuilder sb = new StringBuilder();
    63         if (Properties != null && Properties.Length > 0)
    64         {
    65             foreach (var property in Properties)
    66             {
    67                 sb.AppendLine(property.ToString());
    68             }
    69         }
    70 
    71         return string.Format("[area={0}, bboxMax={1}, bboxMin={2}, boundary={3}, id={4}, levelId={5}, maxPt={6}, minPt={7}, name={8}, perimeter={9}, properties={10}]",
    72                              Area, BboxMax, BboxMin, Boundary, Id, LevelId, MaxPt, MinPt, Name, Perimeter, sb);
    73     }
    74 }

    其中 Coordinate 、PropertyGroup 类请参考《C#开发BIMFACE系列17 服务端API之获取模型数据2:获取构件材质列表》

     
     
  • 相关阅读:
    C#基本知识
    C#集合
    python学习DAY10(异常)
    python学习DAY10(属性方法)
    python学习DAY10(反射)
    python学习DAY10(类方法)
    python学习DAY10(模块)
    基于Servlet构建基础的后台服务器
    时间类型及格式化
    SpringCloud中服务消费者接受前台传参问题(报错415)
  • 原文地址:https://www.cnblogs.com/SavionZhang/p/11492932.html
Copyright © 2011-2022 走看看