Exit Full View
Up

/Electronics/SDCardHolder.foocad

SDCardHolder
FooCAD Source Code
import 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 )
    }
}