public override Rectangle Measure() { ModelBound bound = ModelBound.Empty; UpdateBounds(ref bound, this.Skeleton); return(bound.GetBound()); }
private void UpdateBounds(ref ModelBound bound, Skeleton skeleton) { float[] vertices = new float[8]; var drawOrder = skeleton.DrawOrder; for (int i = 0, n = drawOrder.Count; i < n; i++) { Slot slot = drawOrder.Items[i]; Attachment attachment = slot.Attachment; if (attachment is RegionAttachment) { RegionAttachment region = (RegionAttachment)attachment; region.ComputeWorldVertices(slot.Bone, vertices); bound.Update(vertices, 8); } else if (attachment is MeshAttachment) { MeshAttachment mesh = (MeshAttachment)attachment; int vertexCount = mesh.Vertices.Length; if (vertices.Length < vertexCount) { vertices = new float[vertexCount]; } mesh.ComputeWorldVertices(slot, vertices); bound.Update(vertices, vertexCount); } else if (attachment is SkinnedMeshAttachment) { SkinnedMeshAttachment mesh = (SkinnedMeshAttachment)attachment; int vertexCount = mesh.UVs.Length; if (vertices.Length < vertexCount) { vertices = new float[vertexCount]; } mesh.ComputeWorldVertices(slot, vertices); bound.Update(vertices, vertexCount); } } }