import static uk.co.nickthecoder.foocad.arrange.v1.Arrange.* import uk.co.nickthecoder.foocad.compound.v1.* import uk.co.nickthecoder.foocad.threaded.v2.* class Standards : Model { // ~ 3mm diameter, pitch 1mm. (often shorter than 15mm long). val woodscrewPitch1 = Thread( 3.1 ) .pitch(1) .threadSize(Vector2(0.4,0.8)) .rodChamfer(0.8) // ~ 4mm diameter, pitch 1.5mm. (often longer than 15 mm long). val woodscrewPitch1_5 = Thread( 4 ) .pitch(1.5) .threadSize(Vector2(0.75, 1.2)) .rodChamfer(1.2) // ~ 4mm diameter, pitch 2.0mm. (Rare in my small sample of wood screws) val woodscrewPitch2 = Thread( 4 ) .pitch(2.0) .threadSize(Vector2(0.75, 1.5)) .rodChamfer(1.5) // ~ 5mm diameter, pitch 3.0mm. (Very chunky) val woodscrewPitch3 = Thread( 5 ) .pitch(3.0) .threadSize(Vector2(1.0, 2.5)) .rodChamfer(1.5) meth block( size : double, height : double, label : String ) : Shape3d { val block = Square( size ).center().roundAllCorners( size/5 ) .extrude( height ) val text = Text(label, 8).rotate(90) .centerX() .extrude(0.4) .rotateX(90) .frontTo( block.front - 0.1 ) .centerZTo( block.middle.z ) .color("Red") return block - text + text.previewOnly() } @Piece meth testWoodscrew1() : Shape3d { val block = block(10, 7, "1") val hole = woodscrewPitch1.threadedHole( block.top ) .chamferStart(false) .translateY(-1) return block remove hole.centerYTo(block.back).also() } @Piece meth testWoodscrew1_5() : Shape3d { val block = block(12, 10, "1.5") val hole = woodscrewPitch1_5.threadedHole( block.top ) .chamferStart(false) .translateY(-1) return block remove hole.centerYTo(block.back).also() } @Piece meth testWoodscrew2() : Shape3d { val block = block( 13, 12, "2" ) val hole = woodscrewPitch2.threadedHole( block.top ) .chamferStart(false) .translateY(-1.25) return block remove hole.centerYTo(block.back).also() } @Piece meth testWoodscrew3() : Shape3d { val block = block( 14, 14, "3" ) val hole = woodscrewPitch3.threadedHole( block.top ) .chamferStart(false) .translateY(-1.25) return block remove hole.centerYTo(block.back).also() } func labelY( name : String, shape : Shape3d ) : Shape3d { val style = TextStyle().fontSize(8).hAlign(HAlignment.CENTER).lineSpacing(0.8) val text = Text(name, style) .extrude(1) .backTo( shape.front - 1 ) .centerXTo( shape.middle.x ) .previewOnly() return shape + text } @Piece meth woodScrewThreads() : Shape3d { val ws1 = testWoodscrew1() val ws1_5 = testWoodscrew1_5().leftTo(ws1.right+1) val ws2 = testWoodscrew2() val ws3 = testWoodscrew3() val all = arrangeX( ws1, ws1_5, ws2, ws3 ).centerXY() val base = Square( all.size.x + 1, all.size.y + 1 ) .center() .roundAllCorners(2) .extrude(1) return all and base } override fun build() : Shape3d { return Compound().apply { + labelY( "Wood\nScrew\nThreads", woodScrewThreads() ) }.build() } }