Difference between revisions of "Pain Scale"

From BITPlan Wiki
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="$1"
+
  # 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="$2"
+
   local l_mouthy="$3"
 
   # mouth expression x and y arc
 
   # mouth expression x and y arc
   local l_mouthrx="$3"
+
   local l_mouthrx="$4"
   local l_mouthry="$4"
+
   local l_mouthry="$5"
 
   # which route to sweep
 
   # which route to sweep
   local l_sweepflag="$5"
+
   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="painbase"
+
   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

Pain0.svg Pain1.svg Pain2.svg Pain3.svg Pain4.svg Pain5.svg Pain6.svg Pain7.svg Pain8.svg Pain9.svg Pain10.svg

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