anchor.diff:  
     ;; Set max-radius to an estimate on the max radius of the curve, given the current values of a, b, and h.
     ;; Multiply by 1.1 to give a bit of empty space around the sides.
  -  (let ((max-radius (* 1.1 (+ a-val b-val h-val))))
  +  (let ((max-radius (* 1.1 (+ a-val b-val h-val)))
  +        (rdt (if (eql dt-type :normal)
  +                 dt
  +                 (/ pi dt))))
       ;; Define some local functions for convenience
       (flet (
              ;; xmapper maps logical x coordinates in the range x-min to x-max to screen coordinates in the range 0 to width
  
positive.code:   ;; Repaint to reflect the changes
    (q+:repaint sviewer))
  
  ;; It would be nice to handle all spin box changes in one slot, but I don't know 
  ;; how to ignore the value type.
  (define-slot (spirograph-controls steps-changed) ((value int))
  
negative.code: ;; a 40.00, b 7.00, h 40.00, steps 3200, dt 0.181
  ;; a 59.00, b 4.27, h 35.22, steps 3200, dt 1.536
  ;; a 30.00, b 2.45, h 23.00, steps 2000, dt 1.300
  ;; a 30.00, b 5.00, h 39.00, steps 1230, dt=pi/dt, dt >= 30
  
  (define-widget spirograph-drawer (QWidget)
    ((steps :initform 2000)
  