import uk.co.nickthecoder.foocad.smartextrusion.v1.* import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.* import uk.co.nickthecoder.foocad.screws.v3.* import static uk.co.nickthecoder.foocad.arrange.v1.Arrange.* class ScrewSizes : AbstractModel() { val blockSize = Vector3(55,40,8) fun labels( holeDiameter : int, headDiameter : int ) : Shape3d { val a = Text( "$holeDiameter" ).frontTo(-1) val b = Text ( "$headDiameter" ).backTo(2) return (a.centerX() + b.centerX()).extrude(0.6).color("green") } fun holes( holeDiameter : double, headDiameter : double ) : Shape3d { return KeyholeHanger(holeDiameter, headDiameter) .backTo(blockSize.y/2 - 7) + Countersink(holeDiameter, headDiameter) .recess(2) .depth(blockSize.z) .bottomTo(0) .translateY(-blockSize.y/2 + 2) } override fun build() : Shape3d { val a = holes( 2, 6 ) val b = holes( 2.5, 7.5 ) val c = holes( 3, 9 ) val d = holes( 3.5, 11.5 ) val e = holes( 4, 12 ) val all = arrangeX( a, b, c, d, e ).centerXY() val block = Square( blockSize.x, blockSize.y ) .roundAllCorners(5) .center() .smartExtrude( blockSize.z ) .edges( Chamfer(0.5) ) val labels = ( labels(2, 6).centerXTo(-22) + labels(3, 9).centerXTo(-5) + labels(4, 12).centerXTo(18) ).bottomTo(block.top).translateY(6) return block - all + labels } }