Commands/Custom/SVG.LinePath.ps.ps1
function SVG.LinePath { <# .SYNOPSIS Draws an SVG Line Path. .DESCRIPTION Draws a line in SVG Path Syntax. .EXAMPLE =<svg> -Viewbox 100, 100 ( =<svg.LinePath> -Start 50 -End 75 -Stroke black ) -OutputPath .\Line1.svg .EXAMPLE =<svg> -Viewbox 60, 60 ( =<svg.LinePath> -Start 10 -Horizontal -End 50 -Stroke black -Fill transparent | =<svg.LinePath> -Vertical -End 50 | =<svg.LinePath> -Horizontal -End 10 | =<svg.LinePath> -Vertical -End 10 -Close ) -OutputPath .\LineBox.svg .LINK SVG.Path #> [inherit('SVG.path', Dynamic, Abstract)] [Alias('SVG.LinedPath','=<SVG.LinedPath>')] param( # The Starting point of the arc. # If only one value is provided, it will be used as the X and Y coordinate. [Parameter(ValueFromPipelineByPropertyName)] [double[]] $Start, # If set, will draw a horizontal line. # Only the first -End point will be evaluated. [Parameter(ValueFromPipelineByPropertyName)] [switch] $Horizontal, # If set, will draw a vertical line. # -LineLength must also be provided. [Parameter(ValueFromPipelineByPropertyName)] [switch] $Vertical, # If set, will close the path. [Parameter(ValueFromPipelineByPropertyName)] [switch] $Close, # The end point of the line, or it's length # If this is provided, a line will be drawn to this point [Parameter(ValueFromPipelineByPropertyName)] [double[]] $End ) process { $existingPath = '' if ($PSBoundParameters.D) { $existingPath = $PSBoundParameters.D + ' ' } if ($_ -eq $PSBoundParameters.Content) { $null = $PSBoundParameters.Remove('Content') } $linePath = @( if ($psBoundParameters.Keys -eq 'Start') { "M" if ($start.Length -gt 2) { Write-Error "-Start can only contain one or two values" return } elseif ($start.Length -eq 2) { $start[0],$start[1] } else { $start[0],$start[0] } } if ($Vertical) { "V $(if ($end) { $end[0] } else { 0 })" } elseif ($Horizontal) { "H $(if ($end) { $end[0] } else { 0 })" } elseif ($End) { if ($end.Length -gt 2) { for ($endIndex = 0 ; $endIndex -lt $end.Length; $endIndex += 2) { "L" $end[$endIndex] if ($null -ne $end[$endIndex + 1]) { $end[$endIndex + 1] } else { $end[$endIndex] } } } elseif ($end.Length -eq 2) { "L" $end } elseif ($end.Length -eq 1) { "L" $end * 2 } } if ($Close) { "Z" } ) -join ' ' $PSBoundParameters['D'] = $existingPath + $linePath $baseSplat = [Ordered]@{} foreach ($k in $PSBoundParameters.Keys) { if ($baseCommand.Parameters[$k]) { $baseSplat[$k] = $PSBoundParameters[$k] } } SVG.Path @baseSplat } } |