/// <summary> /// 根据房间边界曲线,获得房间的包围盒(默认AABB) /// </summary> /// <param name="boundaryLoops"></param> /// <param name="sSpaceId"></param> /// <returns>Polygon2D包围盒数据</returns> public static AABB GetGeometryBBox(Geometry geo, string transformer) { PointIntList ptlist = new PointIntList(); ConvertVerticesToPointIntList(geo.vertices, transformer, ref ptlist); // 暂时全部采用A包围盒,O.S.P后续视情况添加 AABB aabb = ptlist.GetAABB(geo.Id.ToString()); //PointInt ptCenter = aabb.Center(); return(aabb); //OBB obb = ptlist.GetOBB(geo.Id.ToString()); // obb.ToDataList_OBB(); }
/// <summary> /// 根据element的几何图形的顶点数据和转换矩阵,获取其位置点集 /// </summary> /// <param name="sVertices">顶点字符串</param> /// <param name="transformer">矩阵信息字符串</param> /// <param name="ptlist">返回的位置点集</param> public static void ConvertVerticesToPointIntList(string sVertices, string transformer, ref PointIntList ptlist) { bool bConverted = ConvertFromJsonString(sVertices, out List <double> vertices); if (!bConverted) { return; } int vertexCount = vertices.Count / 3; for (var i = 0; i < vertexCount; i++) { double x = vertices[3 * i]; double y = vertices[3 * i + 1]; double z = vertices[3 * i + 2]; XYZ ptXYZ = new XYZ(x, y, z); XYZ ptChange = TransformPoint(ptXYZ, transformer); PointInt pt = new PointInt((int)ptChange.X, (int)ptChange.Y, (int)ptChange.Z); ptlist.Add(pt); } }