protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (DataSource == null) return; if (Marker == null) return; var transform = Plotter2D.Viewport.Transform; DataRect bounds = DataRect.Empty; using (IPointEnumerator enumerator = DataSource.GetEnumerator(GetContext())) { Point point = new Point(); while (enumerator.MoveNext()) { enumerator.GetCurrent(ref point); enumerator.ApplyMappings(Marker); //Point screenPoint = point.Transform(state.Visible, state.Output); Point screenPoint = point.DataToScreen(transform); bounds = DataRect.Union(bounds, point); Marker.Render(dc, screenPoint); } } Viewport2D.SetContentBounds(this, bounds); }
protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (Marker == null) return; if (DataSource == null) // No data is specified { if (canvas != null) { foreach (UIElement child in canvas.Children) unused.Add(child); canvas.Children.Clear(); } } else // There is some data { int index = 0; var transform = GetTransform(); using (IPointEnumerator enumerator = DataSource.GetEnumerator(GetContext())) { Point point = new Point(); DataRect bounds = DataRect.Empty; while (enumerator.MoveNext()) { enumerator.GetCurrent(ref point); enumerator.ApplyMappings(Marker); if (index >= canvas.Children.Count) { UIElement newMarker; if (unused.Count > 0) { newMarker = unused[unused.Count - 1]; unused.RemoveAt(unused.Count - 1); } else newMarker = Marker.CreateMarker(); canvas.Children.Add(newMarker); } Marker.SetMarkerProperties(canvas.Children[index]); bounds.Union(point); Point screenPoint = point.DataToScreen(transform); Marker.SetPosition(canvas.Children[index], screenPoint); index++; } Viewport2D.SetContentBounds(this, bounds); while (index < canvas.Children.Count) { unused.Add(canvas.Children[index]); canvas.Children.RemoveAt(index); } } } }
protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (DataSource == null) { markers.Clear(); canvas.Children.Clear(); return; } if (Marker == null) return; var transform = Viewport.Transform; if (markers.Count == 0) { Rect bounds = Rect.Empty; using (IPointEnumerator enumerator = DataSource.GetEnumerator(GetContext())) { Point point = new Point(); while (enumerator.MoveNext()) { enumerator.GetCurrent(ref point); enumerator.ApplyMappings(Marker); Point screenPoint = point.DataToScreen(transform); if (!screenPoint.IsFinite()) continue; bounds = Rect.Union(bounds, point); UIElement marker = Marker.CreateMarker(); Marker.SetPosition(marker, screenPoint); // todo было раскомментировано. Сделать хранение маркеров и добавление их на плоттер. canvas.Children.Add(marker); markers.Add(marker); } } ContentBounds = bounds; } else { int index = 0; using (IPointEnumerator enumerator = DataSource.GetEnumerator(GetContext())) { Point point = new Point(); while (enumerator.MoveNext()) { enumerator.GetCurrent(ref point); Point screenPoint = point.DataToScreen(transform); Marker.SetPosition(markers[index++], screenPoint); } } } }
protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (DataSource == null) return; if (Marker == null) return; Rect bounds = Rect.Empty; using (IPointEnumerator enumerator = DataSource.GetEnumerator(GetContext())) { Point point = new Point(); while (enumerator.MoveNext()) { enumerator.GetCurrent(ref point); enumerator.ApplyMappings(Marker); Point screenPoint = point.Transform(state.Visible, state.Output); bounds = Rect.Union(bounds, point); Marker.Render(dc, screenPoint); } } ContentBounds = bounds; }
protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (completedRequest != null && completedBitmap != null) dc.DrawImage(completedBitmap, completedRequest.Visible.ViewportToScreen(Viewport.Transform)); }
protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (DataSource == null) return; if (filteredPoints.HasPoints) { using (StreamGeometryContext context = streamGeometry.Open()) { context.BeginFigure(filteredPoints.StartPoint, false, false); context.PolyLineTo(filteredPoints, true, smoothLinesJoin); } Brush brush = null; Pen pen = LinePen; bool isTranslated = IsTranslated; if (isTranslated) { dc.PushTransform(new TranslateTransform(Offset.X, Offset.Y)); } dc.DrawGeometry(brush, pen, streamGeometry); if (isTranslated) { dc.Pop(); } #if __DEBUG FormattedText text = new FormattedText(filteredPoints.Count.ToString(), CultureInfo.InvariantCulture, FlowDirection.LeftToRight, new Typeface("Arial"), 12, Brushes.Black); dc.DrawText(text, Viewport.Output.GetCenter()); #endif } }
protected override void OnRenderCore(DrawingContext dc, RenderState state) { Rect outputWMargin = state.Output; var transform = Viewport.Transform; if (outputWMargin.Width == 0 || outputWMargin.Height == 0) return; StreamGeometry cachedGeom = new StreamGeometry(); List<List<Point>> transformedPts = new List<List<Point>>(); foreach (List<Point> list in points) { transformedPts.Add(list.DataToScreenAsList(transform)); } cachedGeom = new StreamGeometry(); using (StreamGeometryContext context = cachedGeom.Open()) { foreach (List<Point> pts in transformedPts) { context.BeginFigure(pts[0], false, false); context.PolyLineTo(pts, true, true); } } cachedGeom.Freeze(); dc.DrawGeometry( Brushes.LightGray, new Pen(Brushes.Black, 1), cachedGeom); }
protected abstract void OnRenderCore(DrawingContext dc, RenderState state);
protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (Marker == null) { return; } if (DataSource == null) // No data is specified { if (canvas != null) { foreach (UIElement child in canvas.Children) { unused.Add(child); } canvas.Children.Clear(); } } else // There is some data { int index = 0; var transform = GetTransform(); using (IPointEnumerator enumerator = DataSource.GetEnumerator(GetContext())) { Point point = new Point(); DataRect bounds = DataRect.Empty; while (enumerator.MoveNext()) { enumerator.GetCurrent(ref point); enumerator.ApplyMappings(Marker); if (index >= canvas.Children.Count) { UIElement newMarker; if (unused.Count > 0) { newMarker = unused[unused.Count - 1]; unused.RemoveAt(unused.Count - 1); } else { newMarker = Marker.CreateMarker(); } canvas.Children.Add(newMarker); } Marker.SetMarkerProperties(canvas.Children[index]); bounds.Union(point); Point screenPoint = point.DataToScreen(transform); Marker.SetPosition(canvas.Children[index], screenPoint); index++; } Viewport2D.SetContentBounds(this, bounds); while (index < canvas.Children.Count) { unused.Add(canvas.Children[index]); canvas.Children.RemoveAt(index); } } } }
protected abstract void OnRenderCore(DrawingContext dc, RenderState state);
protected sealed override void OnRender(DrawingContext drawingContext) { if (Viewport == null) { return; } Rect output = Viewport.Output; if (output.Width == 0 || output.Height == 0) { return; } if (output.IsEmpty) { return; } if (Visibility != Visibility.Visible) { return; } if (shouldReRender || manualTranslate || renderTarget == RenderTo.Image || beforeFirstUpdate || updateCalled) { if (graphContents == null) { graphContents = new DrawingGroup(); } if (beforeFirstUpdate) { Update(); } using (DrawingContext context = graphContents.Open()) { if (renderTarget == RenderTo.Screen) { RenderState state = CreateRenderState(Viewport.Visible, RenderTo.Screen); OnRenderCore(context, state); } else { // for future use } } updateCalled = false; } // thumbnail is not created, if // 1) CreateThumbnail is false // 2) this graph has IsLayer property, set to false if (ShouldCreateThumbnail) { RenderThumbnail(); } if (!manualClip) { drawingContext.PushClip(new RectangleGeometry(output)); } bool translate = !manualTranslate && IsTranslated; if (translate) { drawingContext.PushTransform(new TranslateTransform(offset.X, offset.Y)); } drawingContext.DrawDrawing(graphContents); if (translate) { drawingContext.Pop(); } if (!manualClip) { drawingContext.Pop(); } shouldReRender = true; }
protected override void OnRenderCore(DrawingContext dc, RenderState state) { if (ItemsSource!=null && ItemsSource.GetEnumerator().MoveNext()) try { base.OnRenderCore(dc, state); } catch (Exception e) { } }