Difference between revisions of "Pain Scale"
Jump to navigation
Jump to search
Line 27: | Line 27: | ||
# (c) Copyright 2021 Wolfgang Fahl | # (c) Copyright 2021 Wolfgang Fahl | ||
# see http://wiki.bitplan.com/index.php/Pain_Scale | # see http://wiki.bitplan.com/index.php/Pain_Scale | ||
+ | # | ||
+ | |||
+ | # | ||
+ | # generate a single pain icon | ||
# | # | ||
onepain() { | onepain() { | ||
− | local l_color="$ | + | # pain level on a scale from 0 to 11 |
+ | local l_pain="$1" | ||
+ | # color (hue in HSL space) | ||
+ | local l_color="$2" | ||
# mouth y position | # mouth y position | ||
− | local l_mouthy="$ | + | local l_mouthy="$3" |
# mouth expression x and y arc | # mouth expression x and y arc | ||
− | local l_mouthrx="$ | + | local l_mouthrx="$4" |
− | local l_mouthry="$ | + | local l_mouthry="$5" |
# which route to sweep | # which route to sweep | ||
− | local l_sweepflag="$ | + | local l_sweepflag="$6" |
local l_sat="80%" | local l_sat="80%" | ||
cat << EOF | cat << EOF | ||
Line 46: | Line 53: | ||
width="210mm" | width="210mm" | ||
height="210mm" | height="210mm" | ||
− | id=" | + | id="pain${l_pain}" |
version="1.1" | version="1.1" | ||
viewBox="0 0 220 220"> | viewBox="0 0 220 220"> | ||
Line 88: | Line 95: | ||
mouthry=$((factor*90)) | mouthry=$((factor*90)) | ||
echo "generating pain icon for $pain" | echo "generating pain icon for $pain" | ||
− | onepain $color $mouthy $mouthrx $mouthry $sweepflag> /tmp/pain$pain.svg | + | onepain $pain $color $mouthy $mouthrx $mouthry $sweepflag> /tmp/pain$pain.svg |
pain=$(($pain+1)) | pain=$(($pain+1)) | ||
done | done | ||
</source> | </source> |
Revision as of 13:59, 4 August 2021
see https://en.wikipedia.org/wiki/Pain_scale
You may use the painscale icons below under Creative Commons CC BY 4.0
The idea of the above pain scale icons is to generate them programmatically to give a proportional expression in terms of color and mouth expression. The following script creates the above icons:
generate pain scale icons
#!/bin/bash
# WF 2021-08-04
#
# create 0-10 painscale svg images
#
# (c) Copyright 2021 Wolfgang Fahl
# see http://wiki.bitplan.com/index.php/Pain_Scale
#
#
# generate a single pain icon
#
onepain() {
# pain level on a scale from 0 to 11
local l_pain="$1"
# color (hue in HSL space)
local l_color="$2"
# mouth y position
local l_mouthy="$3"
# mouth expression x and y arc
local l_mouthrx="$4"
local l_mouthry="$5"
# which route to sweep
local l_sweepflag="$6"
local l_sat="80%"
cat << EOF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Copyright (c) 2021 Wolfgang Fahl see http://wiki.bitplan.com/index.php/Pain_Scale -->
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="210mm"
height="210mm"
id="pain${l_pain}"
version="1.1"
viewBox="0 0 220 220">
<defs>
<!-- radial Gradient -->
<radialGradient
id="grad1" gradientUnits="userSpaceOnUse">
<stop offset="0%" style="start-color:hsl($l_color,$l_sat,70%);stop-color:hsl($l_color,$l_sat,60%); "/>
<stop offset="70%" style="stop-color:hsl($l_color,$l_sat,50%); "/>
<stop offset="100%" style="stop-color:hsl($l_color,$l_sat,40%); "/>
</radialGradient>
</defs>
<!-- face -->
<circle cx="105" cy="105" r="100" style="fill:url(#grad1);" stroke="black"
stroke-width="2" ></circle>
<!-- eyes -->
<circle id="lefteye" cx= "65" cy="65" r="12" style="fill:hsl($l_color,$l_sat,30%)" ></circle>
<circle id="righteye" cx="145" cy="65" r="12" style="fill:hsl($l_color,$l_sat,30%)" ></circle>
<!-- mouth -->
<path id="mouth" d="M 35 $l_mouthy A $l_mouthrx $l_mouthry 0 0 $l_sweepflag 175 $l_mouthy" stroke="hsl($l_color,$l_sat,30%)" fill="none" stroke-width="5"/>
</svg>
EOF
}
pain=0
while [ $pain -lt 11 ]
do
color=$((100-pain*10))
mouthy=$((105+pain*6))
sweepflag=0
factor=$((5-pain))
if [ $pain -ge 5 ]
then
factor=$((pain-5))
sweepflag=1
fi
mouthrx=$((205-factor*10))
mouthry=$((factor*90))
echo "generating pain icon for $pain"
onepain $pain $color $mouthy $mouthrx $mouthry $sweepflag> /tmp/pain$pain.svg
pain=$(($pain+1))
done