コード例 #1
0
        public void Select()
        {
            if (bones == null)
            {
                return;
            }

            foreach (var bone in bones)
            {
                if (!bone.isVisible)
                {
                    continue;
                }

                Vector2 p1    = bone.position;
                Vector2 p2    = bone.endPosition;
                Vector2 point = Vector2.zero;
                if (rect.Contains(p1, true) || rect.Contains(p2, true) ||
                    MathUtility.SegmentIntersection(new Vector2(rect.xMin, rect.yMin), new Vector2(rect.xMax, rect.yMin), p1, p2, ref point) ||
                    MathUtility.SegmentIntersection(new Vector2(rect.xMax, rect.yMin), new Vector2(rect.xMax, rect.yMax), p1, p2, ref point) ||
                    MathUtility.SegmentIntersection(new Vector2(rect.xMax, rect.yMax), new Vector2(rect.xMin, rect.yMax), p1, p2, ref point) ||
                    MathUtility.SegmentIntersection(new Vector2(rect.xMin, rect.yMax), new Vector2(rect.xMin, rect.yMin), p1, p2, ref point)
                    )
                {
                    selection.Select(bone.ToCharacterIfNeeded(), true);
                }
            }
        }
コード例 #2
0
        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);
        }