(model (params (number wall 2mm :label "House wall" :min 1.5 :max 3 :step 0.5) (number roof_clearance 0.3mm :label "Roof clearance" :min 0.2 :max 0.6 :step 0.1) (toggle house_print_layout true :label "House print layout (changes export)")) (part house (let* ((outside (cylinder 18mm 28mm)) (room (translate 0 0 2mm (cylinder (- 18mm wall) 27mm))) (doorway (translate 0 -16mm 9mm (rotate 90deg 0 0 (cylinder 8.5mm 18mm :align '(center center center)))))) (difference outside room doorway))) (part roof (let* ((rim-radius (+ 18mm roof_clearance)) (skirt-height 3mm) (cap (cone 26mm 2mm 26mm)) (rim-opening (translate 0 0 -1mm (cylinder rim-radius (+ skirt-height 1mm)))) (inside (translate 0 0 skirt-height (cone rim-radius 0mm rim-radius)))) (translate (if house_print_layout 52mm 0mm) 0 (if house_print_layout 0mm 25mm) (difference cap rim-opening inside)))) (verify (tag separate-house-and-roof) (metric pieces (stl connected-component-count)) (expect pieces (= 2))))