private bool SegmentIntersectsEdge(Vector2 p1, Vector2 p2, int ignoreIndex, ref Vector2 point, out int intersectingEdgeIndex) { intersectingEdgeIndex = -1; float sqrDistance = float.MaxValue; for (int i = 0; i < m_SpriteMeshData.edges.Count; i++) { Edge edge = m_SpriteMeshData.edges[i]; Vector2 v1 = m_SpriteMeshData.GetPosition(edge.index1); Vector2 v2 = m_SpriteMeshData.GetPosition(edge.index2); Vector2 pointTmp = Vector2.zero; if (!edge.Contains(ignoreIndex) && MathUtility.SegmentIntersection(p1, p2, v1, v2, ref pointTmp)) { float sqrMagnitude = (pointTmp - p1).sqrMagnitude; if (sqrMagnitude < sqrDistance) { sqrDistance = sqrMagnitude; intersectingEdgeIndex = i; point = pointTmp; } } } return(intersectingEdgeIndex != -1); }
public bool FindEdgesContainsIndex(int index, out List <Edge> result) { Debug.Assert(spriteMeshData != null); bool found = false; result = new List <Edge>(); for (int i = 0; i < spriteMeshData.edges.Count; ++i) { Edge edge = spriteMeshData.edges[i]; if (edge.Contains(index)) { found = true; result.Add(edge); } } return(found); }