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 ) } }