import uk.co.nickthecoder.foocad.cup.v1.* import static uk.co.nickthecoder.foocad.cup.v1.Cup.* import uk.co.nickthecoder.foocad.smartextrusion.v1.* import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.* class Edging : Model { @Custom( about="Add extra for clearance" ) var sheetThickness = 9 @Custom( about="Thickness of the plastic edging" ) var edgeThickness = 2 @Custom var depth = 7 @Custom var length = 200 @Custom var chamfer = 0.6 meth plain( length : double ) : Shape3d { val outside = Square( sheetThickness + edgeThickness*2, depth + edgeThickness ) .centerX() .roundAllCorners( chamfer ) val inside = Square( sheetThickness, depth ) .centerX().frontTo( edgeThickness ) return (outside - inside).extrude( length ) .rotateX(90) .centerY() } @Piece @Slice( brimEars=1, brimWidth=10 ) meth normal() = plain( length ) @Piece @Slice( brimEars=1, brimWidth=10 ) meth mitre1() : Shape3d { val realLength = length + edgeThickness + depth val mitre = Cube( (depth + sheetThickness + edgeThickness) * 2 ) .centerX() .rotateX(45) .translateY( realLength / 2 ) return plain( realLength ) - mitre } @Piece @Slice( brimEars=1, brimWidth=10 ) meth mitre2() : Shape3d { val realLength = length + (edgeThickness + depth) * 2 val mitre = Cube( (depth + sheetThickness + edgeThickness) * 2 ) .centerX() .rotateX(45) .translateY( realLength / 2 ) return plain(realLength) - mitre.mirrorY().also() } override fun build() : Shape3d { return normal() } }