FooCAD Source Codeimport 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
}
}
*/