FooCAD Source Codeimport uk.co.nickthecoder.foocad.threaded.v1.Threaded
class SDCardHolder : Model {
var size = Vector3( 31.5, 23.5, 1.2 )
var thickness = 0.6
var innerD = Math.sqrt( size.x * size.x + size.y * size.y ) + 6
fun threaded() = Threaded.create( 2, innerD, 4 ).apply {
rodChamfer=0.2
}
fun base() : Shape3d {
val thread = threaded()
val t = thickness + size.z
val base = Cylinder( t, thread.innerR )
val a = thread.thread( t )
val slice = Cube( thread.diameter * 2, thread.diameter * 2, t ).centerXY()
val main = base + a.rotateZ(180).also() / slice
val compartment = Cube( size ).translateZ(thickness+0.01).centerXY()
val hole = Cylinder( t*3, 2 ).center().translateY(thread.diameter/2 - (thread.diameter/2 - size.y/2)/2 )
return main.rotateX(180).bottomTo(0) - compartment - hole.mirrorY().also()
}
fun lid() : Shape3d {
val thread = threaded()
val t = thickness + size.z
val lid = Cylinder( t, thread.diameter/2 + thickness )
val hole = thread.hole( t )
val base = Cylinder( thickness, thread.diameter/2 + thickness )
return base + (lid - hole.rotateZ(180).also()).bottomTo(base.top)
}
override fun build() : Shape3d {
val base : Shape3d = base()
val lid : Shape3d = lid()
return base + lid.leftTo( base.right + 2 )
}
}