Exemple #1
0
        private OutFlags CalcOutFlags(float x1, float y1)
        {
            OutFlags outFlags = OutFlags.None;

            if ((double)x1 < (double)this.Left)
            {
                outFlags |= OutFlags.Left;
            }
            else if ((double)x1 > (double)this.Right)
            {
                outFlags |= OutFlags.Right;
            }
            if ((double)y1 < (double)this.Top)
            {
                outFlags |= OutFlags.Top;
            }
            else if ((double)y1 > (double)this.Bottom)
            {
                outFlags |= OutFlags.Bottom;
            }
            return(outFlags);
        }
Exemple #2
0
        public bool ClipLine(Vector2 point1, Vector2 point2, out Vector2 new1, out Vector2 new2)
        {
            new1 = point1;
            new2 = point2;
            float    num1      = point1.X;
            float    num2      = point1.Y;
            float    num3      = point2.X;
            float    num4      = point2.Y;
            float    x         = this.x;
            float    y         = this.y;
            float    num5      = this.x + this.height;
            float    num6      = this.y + this.height;
            OutFlags outFlags1 = this.CalcOutFlags(num1, num2);
            OutFlags outFlags2 = this.CalcOutFlags(num3, num4);

            while ((outFlags1 | outFlags2) != OutFlags.None)
            {
                if ((outFlags1 & outFlags2) != OutFlags.None)
                {
                    return(false);
                }
                float num7 = num3 - num1;
                float num8 = num4 - num2;
                if (outFlags1 != OutFlags.None)
                {
                    if ((outFlags1 & OutFlags.Left) == OutFlags.Left && (double)num7 != 0.0)
                    {
                        num2 += (x - num1) * num8 / num7;
                        num1  = x;
                    }
                    else if ((outFlags1 & OutFlags.Right) == OutFlags.Right && (double)num7 != 0.0)
                    {
                        num2 += (num5 - num1) * num8 / num7;
                        num1  = num5;
                    }
                    else if ((outFlags1 & OutFlags.Bottom) == OutFlags.Bottom && (double)num8 != 0.0)
                    {
                        num1 += (num6 - num2) * num7 / num8;
                        num2  = num6;
                    }
                    else if ((outFlags1 & OutFlags.Top) == OutFlags.Top && (double)num8 != 0.0)
                    {
                        num1 += (y - num2) * num7 / num8;
                        num2  = y;
                    }

                    outFlags1 = this.CalcOutFlags(num1, num2);
                }
                else if (outFlags2 != OutFlags.None)
                {
                    if ((outFlags2 & OutFlags.Left) == OutFlags.Left && (double)num7 != 0.0)
                    {
                        num4 += (x - num3) * num8 / num7;
                        num3  = x;
                    }
                    else if ((outFlags2 & OutFlags.Right) == OutFlags.Right && (double)num7 != 0.0)
                    {
                        num4 += (num5 - num3) * num8 / num7;
                        num3  = num5;
                    }
                    else if ((outFlags2 & OutFlags.Bottom) == OutFlags.Bottom && (double)num8 != 0.0)
                    {
                        num3 += (num6 - num4) * num7 / num8;
                        num4  = num6;
                    }
                    else if ((outFlags2 & OutFlags.Top) == OutFlags.Top && (double)num8 != 0.0)
                    {
                        num3 += (y - num4) * num7 / num8;
                        num4  = y;
                    }

                    outFlags2 = this.CalcOutFlags(num3, num4);
                }
            }

            new1 = new Vector2(num1, num2);
            new2 = new Vector2(num3, num4);
            return(true);
        }