Пример #1
0
        public static void DrawPoint(D2D1.RenderTarget renderTarget, D2D1.Factory factory, IPoint point, D2D1.Bitmap symbol, Vector2 offset,
                                     float rotation, Map map)
        {
            if (point == null)
                return;

            var pp = TransformToImage(point.Coordinate, map);
            if (double.IsNaN(pp.X)) return;
            pp += offset;

            bool symbolCreated = false;
            if (symbol == null) //We have no point style - Use a default symbol
            {
                symbol = CreateDefaultsymbol(renderTarget);
                symbolCreated = true;
            }


            lock (symbol)
            {
                if (rotation != 0 && !Single.IsNaN(rotation))
                {
                    var startingTransform = new Matrix3x2(renderTarget.Transform.ToArray());

                    var transform = renderTarget.Transform;
                    var rotationCenter = pp;
                    Matrix3x2.Rotation(rotation, rotationCenter);
                    transform *= Matrix3x2.Rotation(rotation, rotationCenter);
                    renderTarget.Transform = transform;

                    //if (symbolscale == 1f)
                    //{
                    //    g.DrawImage(symbol,  (pp.X - symbol.Width/2f + offset.X),
                    //                                (pp.Y - symbol.Height/2f + offset.Y));
                    //}
                    //else
                    //{
                    //    var width = symbol.Width*symbolscale;
                    //    var height = symbol.Height*symbolscale;
                    //    g.DrawImage(symbol, (int) pp.X - width/2 + offset.X*symbolscale,
                    //                        (int) pp.Y - height/2 + offset.Y*symbolscale, width, height);
                    //}
                    var dx = 0.5d*symbol.PixelSize.Width;
                    var dy = 0.5d*symbol.PixelSize.Height;
                    renderTarget.DrawBitmap(symbol, new SharpDX.RectangleF(Convert.ToSingle(pp.X - dx), Convert.ToSingle(pp.Y + dy),
                                                                symbol.PixelSize.Width, symbol.PixelSize.Height),
                                                                1f, SharpDX.Direct2D1.BitmapInterpolationMode.Linear);
                    renderTarget.Transform = startingTransform;
                }
                else
                {
                    //if (symbolscale == 1f)
                    //{
                    //    g.DrawImageUnscaled(symbol, (int) (pp.X - symbol.Width/2f + offset.X),
                    //                                (int) (pp.Y - symbol.Height/2f + offset.Y));
                    //}
                    //else
                    //{
                    //    var width = symbol.Width*symbolscale;
                    //    var height = symbol.Height*symbolscale;
                    //    g.DrawImage(symbol, (int) pp.X - width/2 + offset.X*symbolscale,
                    //                        (int) pp.Y - height/2 + offset.Y*symbolscale, width, height);
                    //}
                    var dx = 0.5d * symbol.PixelSize.Width;
                    var dy = 0.5d * symbol.PixelSize.Height;
                    renderTarget.DrawBitmap(symbol, new SharpDX.RectangleF(Convert.ToSingle(pp.X - dx), Convert.ToSingle(pp.Y + dy),
                                                                symbol.PixelSize.Width, symbol.PixelSize.Height),
                                                                1f, D2D1.BitmapInterpolationMode.Linear);
                }
            }
            if (symbolCreated)
                symbol.Dispose();
        }