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 uk.co.nickthecoder.foocad.extras.v1.* import static uk.co.nickthecoder.foocad.extras.v1.Extras.* class GlassTableLegs : Model { var tilt = 10 var legDiameter = 40 var thickness = 5 @Custom( about="Metal piece glued to the glass top" ) var lugSize = Vector2( 30, 10 ) var legs = Triangle( 300, 200, 80 ) var slack = 0.3 @Piece meth adaptor() : Shape3d { val extra = 10 + lugSize.y val main = Circle( legDiameter/2 + thickness ) .cup( legDiameter + extra, thickness ) .baseThickness( extra + thickness + lugSize.y ) .translateZ(-extra) .rotateX(tilt) val forLug = Circle( lugSize.x / 2 + slack ).extrude( lugSize.y ) val sliceExcess = Cube( 100 ).centerXY() return main.intersection( sliceExcess ) - forLug } override fun build() : Shape3d { val table = legs.offset( 50 ) .roundAllCorners( 30 ) .extrude( 8 ).previewOnly() val lug = Circle( lugSize.x / 2 ).extrude( lugSize.y ) .topTo(0) .color( "DarkGrey" ) val lugs = lug + lug.translate( legs.right, 0, 0 ) + lug.translate( legs.paths[0].points[2].to3d() ) val adaptor = adaptor().translateZ(30) return table + lugs + adaptor } }