Add-OxyObjectToPlotModel.ps1
Set-StrictMode -Version 3 function Add-OxyObjectToPlotModel { [cmdletbinding()] param( [object]$Object, [OxyPlot.PlotModel]$PlotModel, [string]$Style = "default", [switch]$NoRefresh ) if ($Object -is [OxyPlot.Axes.Axis]) { $PlotModel.Axes.Add($Object) if (!$NoRefresh) { $PlotModel.InvalidatePlot($false) } return } if ($Object -is [OxyPlot.Annotations.Annotation]) { $PlotModel.Annotations.Add($Object) if (!$NoRefresh) { $PlotModel.InvalidatePlot($false) } return } if ($Object -isnot [OxyPlot.Series.Series]) { Write-Error "Object is not a series, axis, nor annotation" return } # Setting axes $axRequired = $true $ayRequired = $true $axTier = 0 $ayTier = 0 $xType = Get-RequiredAxisType $Object x $yType = Get-RequiredAxisType $Object y foreach ($a in $PlotModel.Axes) { if ($a.Position -eq "Bottom") { ++$axTier if (($xType -eq "linear" -and $a -isnot [OxyPlot.Axes.CategoryAxis]) -or ($xType -eq "category" -and $a -is [OxyPlot.Axes.CategoryAxis])) { $axRequired = $false } } if ($a.Position -eq "Left") { ++$ayTier if (($yType -eq "linear" -and $a -isnot [OxyPlot.Axes.CategoryAxis]) -or ($yType -eq "category" -and $a -is [OxyPlot.Axes.CategoryAxis])) { $ayRequired = $false } } } if ($axRequired) { if ($xType -eq "category") { $ax = New-Object OxyPlot.Axes.CategoryAxis if ($Object.PSObject.Properties.Name -Contains "_Info") { foreach ($n in $Object._Info.CategoryNames) { $ax.Labels.Add($n) } if ($null -ne $Object._Info.CategoryTitle) { $ax.Title = $Object._Info.CategoryTitle } else { $ax.Title = $Object._Info.XAxisTitle } } } else { if ($Object.PSObject.Properties.Name -Contains "_Info") { $ax = Get-AxisObject $Object._Info.XDataType } else { $ax = New-Object OxyPlot.Axes.LinearAxes } $ax.Title = $Object._Info.YAxisTitle } $ax.Position = "Bottom" $ax.PositionTier = $axTier $axisKey = $Object.XAxisKey if ($axisKey -eq "" -or $axisKey -eq $null) { $axisKey = [Guid]::NewGuid().ToString() $Object.XAxisKey = $axisKey } $ax.Key = $axisKey Apply-OxyStyle $ax $Style $MyInvocation $PlotModel.Axes.Add($ax) } if ($ayRequired) { if ($yType -eq "category") { $ay = New-Object OxyPlot.Axes.CategoryAxis if ($Object.PSObject.Properties.Name -Contains "_Info") { foreach ($n in $Object._Info.CategoryNames) { $ay.Labels.Add($n) } if ($null -ne $Object._Info.CategoryTitle) { $ay.Title = $Object._Info.CategoryTitle } else { $ay.Title = $Object._Info.YAxisTitle } } } else { if ($Object.PSObject.Properties.Name -Contains "_Info") { $ay = Get-AxisObject $Object._Info.XDataType } else { $ay = New-Object OxyPlot.Axes.LinearAxes } $ay.Title = $Object._Info.YAxisTitle } $ay.Position = "Left" $ay.PositionTier = $ayTier $axisKey = $Object.YAxisKey if ($axisKey -eq "" -or $axisKey -eq $null) { $axisKey = [Guid]::NewGuid().ToString() $Object.YAxisKey = $axisKey } $ay.Key = $axisKey Apply-OxyStyle $ay $Style $MyInvocation $PlotModel.Axes.Add($ay) } if ($Object -is [OxyPlot.Series.HeatMapSeries] -and $null -eq $Object.ColorAxis -and $null -eq $Object.ColorAxisKey) { $colorAxis = New-Object OxyPlot.Axes.LinearColorAxis $colorAxis.Position = "Right" $axisKey = [Guid]::NewGuid().ToString() $colorAxis.Key = $axisKey $Object.ColorAxisKey = $axisKey Apply-OxyStyle $colorAxis $Style $MyInvocation $PlotModel.Axes.Add($colorAxis) } $PlotModel.Series.Add($Object) Apply-OxyStyleEvent $PlotModel $Style "BeforeRendering" $MyInvocation if (!$NoRefresh) { $PlotModel.InvalidatePlot($true) } } |