Exemple #1
0
        /// <summary>
        /// Indica a que lado esta el rectangulo respecto de la linea:
        /// - Si == 0, toca la linea o la cruza.
        /// - Si &gt; 0 esta debajo/derecha de la linea.
        /// - Si &lt; 0 esta encima/izquierda de la linea.
        /// </summary>
        public LineSide WhichSide(BoundingBox2d r)
        {
            int[] sides = new int[3];
            foreach (Point2d p in r.GetVertices())
            {
                LineSide lado = this.WhichSide(p);
                sides[(int)lado]++;
            }

            if (sides[(int)LineSide.Middle] > 0)
            {
                // Toca la linea.
                return(LineSide.Middle);
            }
            if ((sides[(int)LineSide.Left] > 0) && (sides[(int)LineSide.Right] > 0))
            {
                // Cruza la linea.
                return(LineSide.Middle);
            }
            if (sides[(int)LineSide.Left] > 0)
            {
                // totalmente a un lado
                return(LineSide.Left);
            }
            // if (sides[(int)Side.Right] > 0)
            // totalmente a un lado
            return(LineSide.Right);
        }
Exemple #2
0
 public static BoundingBox2d DoTransform(this ITransform2 transform, BoundingBox2d bbox)
 {
     return(BoundingBox2d.UnionOfPoints(bbox.GetVertices().Select(v => transform.DoTransform(v))));
 }