public void GetControlPoints(out Vector2[] points, out Edge[] edges, out int[] pins) { Debug.Assert(spriteMeshData != null); points = null; edges = null; List <Vector2> pointList = new List <Vector2>(); List <Edge> edgeList = new List <Edge>(); List <int> pinList = new List <int>(); List <SpriteBoneData> bones = new List <SpriteBoneData>(spriteMeshData.boneCount); for (int i = 0; i < spriteMeshData.boneCount; ++i) { bones.Add(spriteMeshData.GetBoneData(i)); } foreach (var bone in bones) { var length = (bone.endPosition - bone.position).magnitude; if (length > 0f) { int index1 = FindPoint(pointList, bone.position, 0.01f); int index2 = FindPoint(pointList, bone.endPosition, 0.01f); if (index1 == -1) { pointList.Add(bone.position); index1 = pointList.Count - 1; } if (index2 == -1) { pointList.Add(bone.endPosition); index2 = pointList.Count - 1; } edgeList.Add(new Edge(index1, index2)); } else if (bone.length == 0f) { pointList.Add(bone.position); pinList.Add(pointList.Count - 1); } } points = pointList.ToArray(); edges = edgeList.ToArray(); pins = pinList.ToArray(); }