#!/bin/bash

if [ "$1" = "" ]; then
  echo "Usage: $0 count [ angle module own_add mating_add ]" 2>&1
  exit 1
fi

PI=3.141593
DEDENDUM_MULTI=1.05

COUNT="$1"
ANGLE=15
MODULE=0.4

test "$2" = "" || ANGLE="$2"
test "$3" = "" || MODULE="$3"

if [ "$4" = "" ]; then
  OWN_ADDENDUM="$MODULE"
  MATING_ADDENDUM="$MODULE"
else
  OWN_ADDENDUM="$4"
  MATING_ADDENDUM="$4"
fi

test "$5" = "" || MATING_ADDENDUM="$5"

DEDENDUM=`echo "scale=4; $MATING_ADDENDUM * $DEDENDUM_MULTI" | bc -l` 

PITCH_DIA=`echo "scale=4; $MODULE * $COUNT" | bc -l`
PITCH_LEN=`echo "scale=4; $PITCH_DIA * $PI" | bc -l`
PITCH_RAD=`echo "scale=4; $PITCH_DIA / 2" | bc -l`

TOOTH_SIZE=`echo "scale=4; $PITCH_LEN / $COUNT / 2" | bc -l`
TOOTH_HEIGHT=`echo "scale=4; $OWN_ADDENDUM + $DEDENDUM" | bc -l`

DEDENDUM_DIA=`echo "scale=4; $PITCH_DIA - 2 * $DEDENDUM" | bc -l`
ADDENDUM_DIA=`echo "scale=4; $PITCH_DIA + 2 * $OWN_ADDENDUM" | bc -l`

DEDENDUM_LEN=`echo "scale=4; $DEDENDUM_DIA * $PI" | bc -l`
ADDENDUM_LEN=`echo "scale=4; $ADDENDUM_DIA * $PI" | bc -l`

PITCH_TOOTH=`echo "scale=4; 360 / $PITCH_LEN * $TOOTH_SIZE" | bc -l`

BASE_LEN=`echo "scale=4; $PITCH_LEN * c($ANGLE * $PI / 180)" | bc -l`
BASE_DIA=`echo "scale=4; $BASE_LEN / $PI" | bc -l`

echo "; *** cnt = $COUNT, mod = $MODULE mm, press = $ANGLE deg, add = $OWN_ADDENDUM / $MATING_ADDENDUM mm ***"
echo ";"
echo "; Tooth size      : width = $TOOTH_SIZE mm ($PITCH_TOOTH deg), height = $TOOTH_HEIGHT mm"
echo ";"
echo "; Pitch circle    : dia = $PITCH_DIA mm (len = $PITCH_LEN mm)"
echo "; Base circle     : dia = $BASE_DIA mm (len = $BASE_LEN mm)"
echo "; Dedendum circle : dia = $DEDENDUM_DIA mm (len = $DEDENDUM_LEN mm)"
echo "; Addendum circle : dia = $ADDENDUM_DIA mm (len = $ADDENDUM_LEN mm)"
echo

echo "circle 0,0,0 d $BASE_DIA _enter -sellast d=y _enter -properties o c o 80,80,80 _enter _enter"
echo "circle 0,0,0 d $PITCH_DIA _enter sellast -properties o c o 255,0,0 _enter _enter"
echo "circle 0,0,0 d $ADDENDUM_DIA _enter sellast -properties o c o 70,70,255 _enter _enter"
echo "circle 0,0,0 d $DEDENDUM_DIA _enter sellast -properties o c o 70,70,255 _enter _enter"

TOOTH_Y=`echo "scale=4; $PITCH_RAD - ($MATING_ADDENDUM)" | bc -l`
TOOTH_XLEN=`echo "scale=4; ($MATING_ADDENDUM) * s($ANGLE * $PI / 180) / c($ANGLE * $PI / 180)" | bc -l`

X_POS=`echo "scale=4; $TOOTH_SIZE/2 - $TOOTH_XLEN" | bc -l`

STEP=`echo "scale=4; $PITCH_LEN / 150" | bc -l`
ITER=20

X_POS2=`echo "scale=4; $X_POS/2" | bc -l`

echo "point 0,$TOOTH_Y,0 _enter point $X_POS2,$TOOTH_Y,0"

for i in `seq 1 $ITER`; do
  if [ "$i" -gt "10" -a "$[i % 2]" = "1" ]; then
    continue
  fi
  X_OFF=`echo "scale=4; $X_POS + ($i * $STEP)" | bc -l`
  ANG_OFF=`echo "scale=4; 360 / $PITCH_LEN * ($i * $STEP)" | bc -l`
  echo "point $X_OFF,$TOOTH_Y,0 _enter -sellast d=y _enter rotate 0,0,0 0,1,0 $ANG_OFF _enter"
done

Q_TOOTH_ANG=`echo "scale=4; 360 / $PITCH_LEN * $TOOTH_SIZE / 2" | bc -l`

echo "selnone selpt curvethroughpt k c _enter delete -sellast d=y _enter rebuildcrvnonuniform r 0.001 m 20 d=y _enter"

BASE_1=`echo "scale=4; 360 / $BASE_LEN" | bc -l`

Y_POS=`echo "scale=4;$BASE_DIA/2" | bc -l`

STEP=`echo "scale=4; $PITCH_LEN / 75" | bc -l`
ITER=15

for i in `seq 0 $[ITER-1]`; do
  X_OFF=`echo "scale=4; $i * $STEP" | bc -l`
  ANG_OFF=`echo "scale=4; 360 / $BASE_LEN * ($i * $STEP)" | bc -l`
  echo "point -$X_OFF,$Y_POS,0 _enter -sellast d=y _enter rotate 0,0,0 0,1,0 -$ANG_OFF"
done

for i in `seq 1 3`; do
   Y_OFF=`echo "scale=4; $Y_POS - ($i * 0.25)" | bc -l` 
   echo -n "point 0,$Y_OFF,0 _enter "
done

UNDER_ADD=`echo "scale=4;$PITCH_RAD - 1" | bc -l`
OVER_ADD=`echo "scale=4;$PITCH_RAD + 1" | bc -l`

echo
echo "selnone selpt curvethroughpt k c _enter delete -sellast d=y _enter rebuildcrvnonuniform r 0.001 m 20 d=y _enter"
echo "line 0,$UNDER_ADD,0 0,$OVER_ADD,0 -sellast d=y _enter rotate 0,0,0 0,1,0 copy $Q_TOOTH_ANG _enter rotate 0,0,0 0,1,0 -$Q_TOOTH_ANG"

exit 0

