protected bool TryGetPlaneData(LayerPlaneData layerPlane, Pose layerOriginPose, List <Vector3> vertices, out Pose pose, out Vector3 center, out Vector2 extents) { var layerPlaneVertices = layerPlane.Vertices; extents = GeometryUtils.OrientedMinimumBoundingBox2D(layerPlaneVertices, k_PlaneBoundingBox); if (extents.x < m_MinSideLength || extents.y < m_MinSideLength) { pose = default; center = default; return(false); } var centroid = GeometryUtils.PolygonCentroid2D(layerPlaneVertices); var layerPlanePose = new Pose(centroid, GeometryUtils.RotationForBox(k_PlaneBoundingBox)); foreach (var vertex in layerPlaneVertices) { var localVertex = layerPlanePose.ApplyInverseOffsetTo(vertex); vertices.Add(localVertex); } for (var j = 0; j < k_PlaneBoundingBox.Length; ++j) { k_PlaneBoundingBox[j] = layerPlanePose.ApplyInverseOffsetTo(k_PlaneBoundingBox[j]); } layerPlanePose.position += k_Up * (layerPlane.YOffsetFromLayer + k_PlaneYEpsilon); pose = layerOriginPose.ApplyOffsetTo(layerPlanePose); center = (k_PlaneBoundingBox[0] + k_PlaneBoundingBox[2]) * 0.5f; return(true); }
void UpdateLayerPlaneVertices(LayerPlaneData layerPlane) { k_VoxelCornersInPlane.Clear(); foreach (var voxel in layerPlane.Voxels) { AddVoxelCorners(voxel, k_VoxelCornersInPlane); } layerPlane.Vertices.Clear(); GeometryUtils.ConvexHull2D(k_VoxelCornersInPlane, layerPlane.Vertices); }