from cqmore import Workplane from cqmore.curve import archimedeanSpiral, circle from cqmore.polygon import regularPolygon, star import cadquery as cq coaster_radius = 75 xmas_tree_offset = -35 xmas_tree_height = 12 xmas_tree_width = 12 def makeTriangle(self, width, height, x_offset=0, y_offset=0): return (self.moveTo(x_offset-(width), y_offset).makePolygon( [ (0,0,0),(width,height,0), (width*2,0,0), ] ) .cutBlind(30) .clean()) def makeXmasTree(self): return (self.center(0,0) .triangle(xmas_tree_width, xmas_tree_height, y_offset=-(xmas_tree_offset)) .triangle(xmas_tree_width+3, xmas_tree_height+3, y_offset=-(xmas_tree_offset+8)) .triangle(xmas_tree_width+1, xmas_tree_height+13, y_offset=-(xmas_tree_offset+15)) .triangle(xmas_tree_width-2, xmas_tree_height+16, y_offset=-(xmas_tree_offset+20)) .moveTo(0, -(xmas_tree_offset+22)) .rect(5,8) .cutBlind(30)) Workplane.triangle = makeTriangle Workplane.xmasTree = makeXmasTree polygon = (Workplane() .makePolygon( regularPolygon( nSides = 16, radius = coaster_radius, thetaStart = 0, thetaEnd = 360 ) ) .extrude(10) .xmasTree() .workplane() ) text_solid = (Workplane() .text("David Kerfoot", 25, 25, clean=False, combine=False, fontPath="/home/wes/cad_files/StackyardPersonalUse-16Dj.ttf") ) result = polygon.cut(text_solid) cq.exporters.export(result, "/home/wes/cad_files/coaster.step")