protected override void UpdateDataSource() { if (DataSource != null) { IsolineBuilder.DataSource = DataSource; IsolineBuilder.MissingValue = MissingValue; Collection = IsolineBuilder.BuildIsoline(); } else { Collection = null; } }
protected override void OnRender(DrawingContext drawingContext) { if (Plotter2D == null) { return; } if (DataSource == null) { return; } var collection = (IsolineCollection)Parent.GetValue(IsolineCollectionProperty); if (collection == null) { return; } var bounds = ViewportPanel.GetViewportBounds(this); if (bounds.IsEmpty) { return; } var dc = drawingContext; var strokeThickness = StrokeThickness; var transform = Plotter2D.Transform.WithRects(bounds, new Rect(RenderSize)); //dc.DrawRectangle(null, new Pen(Brushes.Green, 2), new Rect(RenderSize)); var additionalLevels = GetAdditionalLevels(collection); IsolineBuilder.DataSource = DataSource; var additionalIsolineCollections = additionalLevels.Select(level => { return(IsolineBuilder.BuildIsoline(level)); }); foreach (var additionalCollection in additionalIsolineCollections) { RenderIsolineCollection(dc, strokeThickness, additionalCollection, transform); } }
protected override void OnRender(DrawingContext drawingContext) { if (Plotter2D == null) { return; } if (Collection == null) { return; } if (DataSource == null) { return; } if (Collection.Lines.Count == 0) { IsolineBuilder.DataSource = DataSource; IsolineBuilder.MissingValue = MissingValue; Collection = IsolineBuilder.BuildIsoline(); } IsolineCollection = Collection; var dc = drawingContext; var strokeThickness = StrokeThickness; var collection = Collection; var bounds = DataRect.Empty; // determining content bounds foreach (LevelLine line in collection) { foreach (Point point in line.AllPoints) { bounds.Union(point); } } Viewport2D.SetContentBounds(this, bounds); ViewportPanel.SetViewportBounds(this, bounds); if (bounds.IsEmpty) { return; } // custom transform with output set to renderSize of this control var transform = Plotter2D.Transform.WithRects(bounds, new Rect(RenderSize)); // actual drawing of isolines RenderIsolineCollection(dc, strokeThickness, collection, transform); //var additionalLevels = GetAdditionalIsolines(collection); //var additionalIsolineCollections = additionalLevels.Select(level => IsolineBuilder.BuildIsoline(level)); //foreach (var additionalCollection in additionalIsolineCollections) //{ // RenderIsolineCollection(dc, strokeThickness, additionalCollection, transform); //} RenderLabels(dc, collection); // foreach (var additionalCollection in additionalIsolineCollections) // { // RenderLabels(dc, additionalCollection); // } }