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(); }