Revolver Drawing

This is a drawing of a revolver I made after being inspired by the cowboy theme of my group project. I added an argument to the make-arc (rev-arc) function allowing me to adjust the arcs size and create more complex shapes. I also made the frev function which lets me adjust the "thickness" of my lines.

(defn draw [shape scale]
  (js/browserdraw
     (into-array (flatten shape))
     scale))

(defn frev [initial-length]
  [:fwd (* initial-length 1)])

(defn rev-arc [deg direction size]
  (repeat deg [:fwd (* size 1) direction 1]))

(defn revolver []
  (concat ;handle
          [:color "#915500"]
          [:right 20 (frev 60)]
          (rev-arc 70 :right 1.2)
          [:right 90 (frev 30)]
          [:right 90]
          (rev-arc 100 :left 0.5)
          [(frev 40) :right 100 (frev 65)]
          [:right 180 (frev 65) :left 100 (frev 40) (rev-arc 100 :right 0.5)]
          ;begin metal
          [:color "#8b99ad"]
          [(frev 5) (rev-arc 80 :right 0.1)]
          [(rev-arc 90 :left 0.25) (frev 15)]
          [(rev-arc 90 :left 0.25) (rev-arc 90 :right 0.1) (frev 40)]
          [(rev-arc 50 :left 0.1) (frev 35)]
          ;barrel
          [:right 60 (frev 100) :left 90 (frev 10) :left 90 (frev 100)] 
          [:right 90 (frev 18) (frev -28) (frev 10) :left 90]
          [(frev -100) :right 90]
          [:right 90 (frev 30) :left 90]
          ;front sight
          [(frev 18) :left 90 (frev 22) (frev -12) :right 90 (frev 8) :left 90 (frev 12)]
          [:left 90 (frev 8) :right 90 (frev (- 130 10 12))]
          ;around cylinder
          [:right 15 (rev-arc 15 :left 2) (frev 60)]
          [(rev-arc 30 :left 0.5) :left 60 (frev 10)]
          [:right 50 (rev-arc 140 :left 0.45)]
          [:right 180 (rev-arc 180 :right 0.45)]
          [:right 90 (frev 51.5)]
          ;cylinder       
          [:left 90 (frev 61) :left 90 (frev (- (/ 51.5 2) 8))]
          [:left 90 (rev-arc 15 :right 2)]
          [(rev-arc 150 :right 0.08)]
          [(rev-arc 15 :right 2)]
          [:left 90 (frev -20) (frev 20) (frev (- (/ 51.5 2) 8))]
          [:left 90 (frev 61)]
          [(rev-arc 40 :left 0.45) :right 130 (frev 9)]
          ;hammer
          [:left 90 :left 30 (frev 5) (rev-arc 90 :right 0.25) (frev 5)]
          [(rev-arc 180 :left 0.03) (frev 8) (rev-arc 20 :left 1)]
          [:right 70 (rev-arc 50 :left 0.56) :right 30]
          [:left 90 (frev 8) (frev -9) :right 90 (frev 33)]
          ;trigger guard
          [:left 90 (frev 7) :left 100 (rev-arc 90 :right 0.25)]
          [:right 90 (rev-arc 45 :left 0.6) :right 180 (rev-arc 45 :right 0.6) :right 90]
          [(frev 15) (rev-arc 90 :right 0.25) :left 90 (frev 10) :right 10]
          )
  )

(draw (revolver) 1.0)