/// <summary>
        /// Convert the given point from virtual space to item space.
        /// </summary>
        public PointF ToLocal(PointF pt)
        {
            var points = new[] { pt };

            InverseTransform.TransformPoints(points);
            return(points[0]);
        }
Beispiel #2
0
        public override Location PointToLocation(Point point)
        {
            if (InverseTransform == null)
            {
                throw new InvalidOperationException("The CoordinateSystem property is not set.");
            }

            var coordinate = InverseTransform.Transform(new Coordinate(point.X, point.Y));

            return(new Location(coordinate.Y, coordinate.X));
        }
Beispiel #3
0
        public override Color Render(int x, int y)
        {
            if (InverseTransform == null)
            {
                return(base.Render(x, y));
            }
            Point transformed;

            if (!InverseTransform.TryTransform(new Point((int)(x - OffsetX), (int)(y - OffsetY)), out transformed))
            {
                return(Colors.Transparent);
            }
            double fX = transformed.X + OffsetX;
            double fY = transformed.Y + OffsetY;
            //if (fX < 0 || fX >= Width || fY < 0 || fY >= Height)
            //    return Colors.Transparent;
            //else
            //{
            int    x1 = (int)Floor(fX);
            int    x2 = (int)Ceiling(fX);
            int    y1 = (int)Floor(fY);
            int    y2 = (int)Ceiling(fY);
            double xF = fX - x1;
            double yF = fY - y1;

            if (xF == 0)
            {
                if (yF == 0)
                {
                    return(base.Render(x1, y1));
                }
                else
                {
                    return(CombineColors(base.Render(x1, y1), base.Render(x1, y2), yF));
                }
            }
            else
            {
                if (yF == 0)
                {
                    return(CombineColors(base.Render(x1, y1), base.Render(x2, y1), xF));
                }
                else
                {
                    return(CombineColors(CombineColors(base.Render(x1, y1), base.Render(x2, y1), xF), CombineColors(base.Render(x1, y2), base.Render(x2, y2), xF), yF));
                }
            }
            //return base.Render(fX, fY);
            //}
        }
Beispiel #4
0
        /// <summary>
        /// Check the collision between the hitbox and a point.
        /// </summary>
        /// <param name="pt">Point.</param>
        /// <param name="infinitePt">A point that can not be in the hitbox in any way.</param>
        /// <returns>True if there is a collision, false otherwise.</returns>
        public bool Collision(Vector2f pt, Vector2f infinitePt)
        {
            pt = InverseTransform.TransformPoint(pt);
            bool finalHit = false;

            foreach (var shape in Vertices)
            {
                bool currentHit = false;

                List <Segment> list = new List <Segment>();
                {
                    var      tmp = shape.Item1.ToArray();
                    Vector2f old = tmp.First();
                    for (int i = 1; i <= tmp.Length; i++)
                    {
                        list.Add(new Segment(old, tmp[i % tmp.Length]));
                        old = tmp[i % tmp.Length];
                    }
                }
                int hit = 0;
                foreach (var seg in list)
                {
                    if (seg.Collision(new Segment(infinitePt, pt)))
                    {
                        hit++;
                    }
                }
                currentHit = hit % 2 == 1;

                if (currentHit)
                {
                    if (shape.Item2 == CombineMode.ADD)
                    {
                        finalHit = true;
                    }
                    else if (shape.Item2 == CombineMode.REMOVE)
                    {
                        finalHit = false;
                    }
                    else if (shape.Item2 == CombineMode.INTERSECT)
                    {
                        finalHit = !finalHit;
                    }
                }
            }
            return(finalHit);
        }
Beispiel #5
0
        public void PerformTransformInverseTransformTest()
        {
            //todo: create randomized signal instead of hard-coded one.
            List <int> inputTimeDomain = new List <int>()
            {
                4,
                0,
                0,
                0
            };

            Transform        transform        = new Transform();
            InverseTransform inverseTransform = new InverseTransform();

            List <int> outputTimeDomain = inverseTransform.PerformInverseTransform(transform.PerformTransform(inputTimeDomain));

            Assert.AreEqual(inputTimeDomain, outputTimeDomain);
        }
 /// <summary>
 /// Convert the given rectangle from virtual space to item space.
 /// </summary>
 public RectangleF ToLocal(RectangleF rect)
 {
     return(InverseTransform.Transform(rect));
 }
Beispiel #7
0
 protected virtual Vector2f ToLocalCoordinates(Vector2f source)
 {
     return(InverseTransform.TransformPoint(source));
 }