(define-component fence_post ((number x 0mm) (number height 22mm)) (translate x 0 0 (union (cylinder 2mm height) (translate 0 0 height (cone 3mm 0mm 5mm))))) (model (params (number posts 6 :label "Fence posts" :min 3 :max 9 :step 1)) (part fence (let* ((post_row (repeat-union i posts (fence_post :x (* i 9mm)))) (rail_length (+ (* (- posts 1) 9mm) 4mm)) (rail_center (/ (* (- posts 1) 9mm) 2)) (bottom_rail (translate rail_center 0 8mm (box rail_length 2mm 3mm))) (top_rail (translate rail_center 0 16mm (box rail_length 2mm 3mm)))) (union post_row bottom_rail top_rail))) (part carrot (translate 20mm -12mm 0 (loft 18mm (circle 1mm) (regular-polygon 6 5mm)))))