DaxLib.SVG.Scale.ArcPath

Generates <path> data (d) for arc segments, useful for donut and gauge charts

Syntax

DaxLib.SVG.Scale.ArcPath(cx, cy, radius, startAngle, endAngle, innerRadius)

Parameters

Name Type Description
cx SCALAR VAL Center X position in pixels
cy SCALAR VAL Center Y position in pixels
radius SCALAR VAL Outer radius in pixels
startAngle SCALAR VAL Starting angle in degrees (0 = right, 90 = bottom)
endAngle SCALAR VAL Ending angle in degrees
innerRadius SCALAR VAL Inner radius for donut effect (0 for pie slice)

Returns

(STRING) <path> data (d)

Example

DaxLib.SVG.Scale.ArcPath(100, 100, 80, 0, 120, 60)
// Returns SVG path data for a donut arc segment

Definition

function 'DaxLib.SVG.Scale.ArcPath' =
    (
        cx : SCALAR VAL,
        cy : SCALAR VAL,
        radius : SCALAR VAL,
        startAngle : SCALAR VAL,
        endAngle : SCALAR VAL,
        innerRadius : SCALAR VAL
    ) =>

        VAR _StartRad = startAngle * PI() / 180
        VAR _EndRad = endAngle * PI() / 180
        VAR _LargeArc = IF( endAngle - startAngle > 180, 1, 0 )
        VAR _X1 = cx + radius * COS (_StartRad )
        VAR _Y1 = cy + radius * SIN (_StartRad )
        VAR _X2 = cx + radius * COS (_EndRad )
        VAR _Y2 = cy + radius * SIN (_EndRad )
        VAR _InnerX1 = cx + innerRadius * COS( _StartRad )
        VAR _InnerY1 = cy + innerRadius * SIN( _StartRad )
        VAR _InnerX2 = cx + innerRadius * COS( _EndRad )
        VAR _InnerY2 = cy + innerRadius * SIN( _EndRad )

        RETURN

            IF(
                innerRadius > 0,
                "M " & _InnerX1 & " " & _InnerY1 &
                " L " & _X1 & " " & _Y1 &
                " A " & radius & " " & radius &
                " 0 " & _LargeArc & " 1 " &
                _X2 & " " & _Y2 &
                " L " & _InnerX2 & " " & _InnerY2 &
                " A " & innerRadius & " " & innerRadius &
                " 0 " & _LargeArc & " 0 " &
                _InnerX1 & " " & _InnerY1 & " Z",
                "M " & cx & " " & cy &
                " L " & _X1 & " " & _Y1 &
                " A " & radius & " " & radius &
                " 0 " & _LargeArc & " 1 " &
                _X2 & " " & _Y2 & " Z"
            )