internal static extern void Internal_DrawOutline(Color parentNodeColor, Color childNodeColor, int submeshOutlineMaterialId, int[] parentRenderers, int[] childRenderers, OutlineDrawMode outlineMode, float parentOutlineAlpha = 0, float childOutlineAlpha = 0);
private static ImageSource GetEditTraceLineImageSourceWithDrawingVisualGeoCanvas(MapArguments mapArguments, InMemoryFeatureLayer inProcessLayer, Collection <SimpleCandidate> simpleCandidates, OutlineDrawMode outlineDrawMode) { OutlineDrawingVisualGeoCanvas geoCanvas = new OutlineDrawingVisualGeoCanvas(); geoCanvas.OutlineDrawMode = outlineDrawMode; RenderTargetBitmap nativeImage = new RenderTargetBitmap((int)mapArguments.ActualWidth, (int)mapArguments.ActualHeight, geoCanvas.Dpi, geoCanvas.Dpi, PixelFormats.Pbgra32); geoCanvas.BeginDrawing(nativeImage, mapArguments.CurrentExtent, mapArguments.MapUnit); lock (inProcessLayer) { if (!inProcessLayer.IsOpen) { inProcessLayer.Open(); } inProcessLayer.Draw(geoCanvas, simpleCandidates); } geoCanvas.EndDrawing(); return(nativeImage); }
private static void UpdateImageSource(MapArguments mapArguments, Collection <SimpleCandidate> simpleCandidates, RenderMode renderMode, InMemoryFeatureLayer inProcessLayer, Image defaultImage, OutlineDrawMode outlineDrawMode = OutlineDrawMode.LineWithFill) { if (renderMode == RenderMode.DrawingVisual) { defaultImage.Source = GetEditTraceLineImageSourceWithDrawingVisualGeoCanvas(mapArguments, inProcessLayer, simpleCandidates, outlineDrawMode); } else { defaultImage.Source = GetEditTraceLineImageSourceWithGdiPlusGeoCanvas(mapArguments, inProcessLayer, simpleCandidates, outlineDrawMode); } }
private static ImageSource GetEditTraceLineImageSourceWithGdiPlusGeoCanvas(MapArguments mapArguments, InMemoryFeatureLayer inProcessLayer, Collection <SimpleCandidate> simpleCandidates, OutlineDrawMode outlineDrawMode) { MemoryStream streamSource = null; OutlineGdiPlusGeoCanvas geoCanvas = new OutlineGdiPlusGeoCanvas(); geoCanvas.OutlineDrawMode = outlineDrawMode; using (var nativeImage = new System.Drawing.Bitmap((int)mapArguments.ActualWidth, (int)mapArguments.ActualHeight)) { geoCanvas.BeginDrawing(nativeImage, mapArguments.CurrentExtent, mapArguments.MapUnit); lock (inProcessLayer) { if (!inProcessLayer.IsOpen) { inProcessLayer.Open(); } inProcessLayer.Draw(geoCanvas, simpleCandidates); } geoCanvas.EndDrawing(); streamSource = new MemoryStream(); nativeImage.Save(streamSource, System.Drawing.Imaging.ImageFormat.Png); streamSource.Seek(0, SeekOrigin.Begin); } BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = streamSource; bitmapImage.EndInit(); bitmapImage.Freeze(); return(bitmapImage); }