예제 #1
0
        /// <summary>
        /// Function to render the symbol
        /// </summary>
        /// <param name="map">The map</param>
        /// <param name="point">The point to symbolize</param>
        /// <param name="g">The graphics object</param>
        protected void RenderPoint(MapViewport map, Coordinate point, Graphics g)
        {
            if (point == null)
            {
                return;
            }

            PointF pp = map.WorldToImage(point);

            if (Rotation != 0f && !Single.IsNaN(Rotation))
            {
                SizeF  offset         = GetOffset();
                PointF rotationCenter = pp;

                using (var origTrans = g.Transform.Clone())
                    using (var t = g.Transform)
                    {
                        t.RotateAt(Rotation, rotationCenter);
                        t.Translate(offset.Width + 1, offset.Height + 1);
                        g.Transform = t;

                        OnRenderInternal(pp, g);

                        g.Transform = origTrans;
                    }

                using (var symTrans = new Matrix())
                {
                    symTrans.RotateAt(Rotation, rotationCenter);
                    symTrans.Translate(offset.Width + 1, offset.Height + 1);
                    var pts = CanvasArea.ToPointArray();
                    symTrans.TransformPoints(pts);
                    CanvasArea = pts.ToRectangleF();
                }
            }
            else
            {
                pp = PointF.Add(pp, GetOffset());
                OnRenderInternal(pp, g);
            }
        }