Exit Full View
ZipUp

/Tools/SuperGlueBase.foocad

SuperGlueBase

My favourite brush-on super glue has a very narrow bottle which is easily knocked over.

It is designed to be a snug fit, so that lifting the bottle also lifts the base.

Print using TPU (or other flexible filament). You could use a rigid filament, but the fit would need to be perfect, or use a shim to jam the bottle into this base.

FooCAD Source Code
import static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
import uk.co.nickthecoder.foocad.compound.v1.*
import uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*
import uk.co.nickthecoder.foocad.cup.v1.*
import static uk.co.nickthecoder.foocad.cup.v1.Cup.*
import static uk.co.nickthecoder.foocad.extras.v1.Extras.*

class SuperGlueBase : Model {

    var size = Vector3( 36, 20, 20 )
    var thickness = 1.8
    var radius = 7.0
    val lipSize = Vector2(2.5, 0.5)

    fun shape() = Circle( size.x/2 ).scaleY( size.y/size.x )

    // The bottom should fit easily in one side, and "tricky" in the other.
    @Piece
    fun testFit() = shape().outline(1,0)
        .smartExtrude(lipSize.x * 2)
        .insideTop( fatLip( lipSize.x, lipSize.y ) )

    override fun build() : Shape3d {

        val tube = shape().offset(thickness)
            .cup( 20, thickness )
            .baseThickness( thickness + 0.5 )
            .cavity(true)
            .insideBottom( Fillet(2) )
            .insideTop( fatLip( lipSize.x, lipSize.y ) )
            .outsideTop( Chamfer(0.5) )

        val base1 = Cylinder(2, size.x/2+2 )
        val base2 = Cylinder(10, size.x/2+2, size.y/2).bottomTo( base1.top )

        val tread = Square( 50, 1 ).tileY( 25, 1 )
            .center()
            .rotate(45)
            .intersection( Circle( size.x/2-2 ) )
            .extrude(0.4)
            .bottomTo(-0.01)

        return Compound( true ).apply {
            + tube
            + base1
            + base2
            - tread
        }.build().rotateZ(45)
    }
}