import uk.co.nickthecoder.foocad.extras.v1.* import static uk.co.nickthecoder.foocad.extras.v1.Extras.* import uk.co.nickthecoder.foocad.screws.v3.* import uk.co.nickthecoder.foocad.smartextrusion.v1.* import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.* class StepHook : Model { var thickness = 6 var width = 20 val diameter = 40 override meth build() : Shape3d { val curve = RoundedCircularArc( diameter/2 + thickness, diameter/2, 180,340 ) .leftTo(0) val upright = Square( thickness, diameter ) .roundCorner( 3, 1 ) .roundCorner( 2, thickness/2-0.1 ) val strength = PolygonBuilder().apply { moveTo( thickness/2, 0 ) lineBy(0,-diameter*2) lineBy(diameter*0.88 + thickness,diameter*1.65) }.buildPath().thickness(thickness) .roundCorner(3, 1) .roundCorner(0,thickness) val shape = (curve + upright + strength).toPolygon() val main = shape.smartExtrude( width ) .edges( Chamfer(1) ) val screwHoles = Countersink().recess(2) .rotateY(90) .translateX(thickness) .translateZ(width/2) .translateY(5).translateY(diameter - 15).also() return main - screwHoles } } /* class StepHook : Model { var diameter = 300 var size = Vector2( 200, 45 ) var handleDiameter = 40 val backMargin = 30 val extra = 3 override meth build() : Shape3d { val circle = Circle( diameter/2 ) .backTo( size.y ) val insideShape = circle.intersection( Square( size.x, size.y ).centerX() ) .toPolygon() val depth = handleDiameter + extra * 2 val filletSize = handleDiameter/2 val edge = ProfileEdge.fillet(filletSize).reverse() and ProfileEdge.flat(extra) val main = insideShape.smartExtrude( depth ) .edges( edge ) val back = Circle( diameter/2 + filletSize + backMargin ) .translateY( -diameter/2 + size.y ) .extrude(extra) .color("Orange") val screwHole = KeyholeHanger(5,9).rotateX(90) .bottomTo( 15 ) val screwHoles = screwHole .centerXTo( 40 ) .mirrorX().also() val missing = Cube( 70, 300, 100 ).centerX().bottomTo( extra+0.01 ).frontTo(10) //return (main + back - missing) val sliced = (main + back - missing) .rotateX(90) .intersection( Cube( insideShape.size.x, depth*2, size.y + filletSize + backMargin ).centerXY() ) return sliced - screwHoles } } */