{#-----------------constants---------------------------#} {% set titleHeight = 48 %} {% set textHeight = 24 %} {% set gap = 12 %} {% set labelWidth = 512 %} {% set startAngle = -pi/2 %} {% set endAngle = 3*pi/2 %} {% set oR = (data['data-outerRadius'] or "120") | float %} {% set iR = ((data['data-innerRadiusPercent'] or "0") | float) * oR / 100.0 %} {% set iconSize = 36 %} {% set leftPad = 200 %} {#------calculate values from template elements--------#} {% set values = elementsToValues(elements, 'tx-..-([1-9]\d*)$') %} {% set n = values|length %} {% set total = values|sum %} {% if 0 >= total %} {% set total = 1 %} {% endif %} {% set height = titleHeight + 2*gap + 2*oR + 36 %} {% set max_n_horizontal = [4,n]|min %} {% set width = 2*oR + 2*leftPad %} {#-------------svg starts here-------------------------#} {% set ns = namespace(runningSum=0) %} {%for i in range(n)%} {% set pieStart = startAngle+ (endAngle-startAngle) * ns.runningSum/total %} {% set pieEnd = pieStart + (endAngle-startAngle)*values[i]/total %} {% set ns.runningSum = ns.runningSum + values[i] %} {% set x0 = (oR + oR * cos(pieStart))|round(3) %} {% set y0 = (oR + oR * sin(pieStart))|round(3) %} {% set x1 = (oR + oR * cos(pieEnd))|round(3) %} {% set y1 = (oR + oR * sin(pieEnd))|round(3) %} {% set x2 = (oR + iR * cos(pieEnd))|round(3) %} {% set y2 = (oR + iR * sin(pieEnd))|round(3) %} {% set x3 = (oR + iR * cos(pieStart))|round(3) %} {% set y3 = (oR + iR * sin(pieStart))|round(3) %} {% set largeArc = 1 if (pieEnd-pieStart) >= pi else 0 %} {%endfor%} {# title #} Title {% set ns.runningSum=0 %} {%for i in range(n) %} {% set pieStart = startAngle + (endAngle-startAngle) * ns.runningSum/total %} {% set pieEnd = pieStart + (endAngle-startAngle)*values[i]/total %} {% set ns.runningSum = ns.runningSum + values[i] %} {% set pieMid = (pieStart+pieEnd)/2 %} {% set pieStartX = oR*cos(pieStart)|round(3) %} {% set pieStartY = oR*sin(pieStart)|round(3) %} {% set removeX = oR*cos(pieMid)|round(3) %} {% set removeY = oR*sin(pieMid)|round(3) %} {% set pieEndX = oR*cos(pieEnd)|round(3) %} {% set pieEndY = oR*sin(pieEnd)|round(3) %} {% set labelX = (oR + 6)*cos(pieMid)|round(3) %} {% set labelY = (oR + 6)*sin(pieMid)|round(3) %} {% if n > 1 and n > i %} {% endif %} {# label #} {% set alignment = pieChart.radiansToAlignment(pieMid) %} {% if alignment[0] == 'l' %} {% set deltaX = labelWidth/2 %} {% elif alignment[0] == 'r' %} {% set deltaX = -labelWidth/2 %} {% else %} {% set deltaX = 0 %} {% endif %} {% if alignment[1] == 't' %} {% set deltaY = textHeight/2 %} {% elif alignment[1] == 'b' %} {% set deltaY = -textHeight/2 %} {% else %} {% set deltaY = 0 %} {% endif %} {# icons #} {% set iconR = pieChart.iconDistanceToCenter(oR, iR, start=pieStart, end=pieEnd) %} {% set iconX = iconR*cos(pieMid) %} {% set iconY = iconR*sin(pieMid) %} {% endfor %}