import uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.* import static uk.co.nickthecoder.foocad.debug.v1.Debug.* import static uk.co.nickthecoder.foocad.layout.v1.Layout2d.* import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.* import static uk.co.nickthecoder.foocad.arrange.v1.Arrange.* import uk.co.nckthecoder.foocad.threaded.v2.* import static uk.co.nickthecoder.foocad.threaded.v2.Thread.* class BoltKnob : Model { @Custom var metricSize : double = 6 @Custom var knob = metricThread( 6 ).boltKnob() .knobSize( 18, 10 ) .recess( 4 ) .filletRadius( 2 ) .flangeSize( 25, 2 ) @Piece fun knob() = if (metricSize > 0) { knob.thread( Thread( metricSize ) ) } else { knob } @Piece fun cap() = knob().cap() @Piece fun knobAndCap() = arrangeX(2, knob(), cap() ) override fun build() : Shape3d { val knob = knob() println( "Knob= $knob" ) val cap = cap() .topTo(knob.top) .color("Green") val bolt = knob.thread.bolt(20).preview().previewOnly().mirrorZ().topTo( knob.top - knob.recess ) return knob + cap + bolt } }