From e3bf24d17cdbda9ace5dbcae257c5c856ef984d9 Mon Sep 17 00:00:00 2001 From: Joshua Shreve Date: Thu, 8 Jul 2021 22:05:34 -0400 Subject: Added helper files to remove the cadquery / solid python helpers from the main file. Improved notch and added holes around key plate for mounting. Still WIP, but should be functional. --- src/helpers_solid.py | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 src/helpers_solid.py (limited to 'src/helpers_solid.py') diff --git a/src/helpers_solid.py b/src/helpers_solid.py new file mode 100644 index 0000000..918f7a3 --- /dev/null +++ b/src/helpers_solid.py @@ -0,0 +1,126 @@ +import solid as sl + + +def box(width, height, depth): + return sl.cube([width, height, depth], center=True) + + +def cylinder(radius, height, segments=100): + return sl.cylinder(r=radius, h=height, segments=segments, center=True) + + +def sphere(radius): + return sl.sphere(radius) + + +def cone(r1, r2, height): + return sl.cylinder(r1=r1, r2=r2, h=height) # , center=True) + + +def rotate(shape, angle): + return sl.rotate(angle)(shape) + + +def translate(shape, vector): + return sl.translate(tuple(vector))(shape) + + +def mirror(shape, plane=None): + print('mirror()') + planes = { + 'XY': [0, 0, 1], + 'YX': [0, 0, -1], + 'XZ': [0, 1, 0], + 'ZX': [0, -1, 0], + 'YZ': [1, 0, 0], + 'ZY': [-1, 0, 0], + } + return sl.mirror(planes[plane])(shape) + + +def union(shapes): + print('union()') + shape = None + for item in shapes: + if shape is None: + shape = item + else: + shape += item + return shape + + +def add(shapes): + print('union()') + shape = None + for item in shapes: + if shape is None: + shape = item + else: + shape += item + return shape + + +def difference(shape, shapes): + print('difference()') + for item in shapes: + shape -= item + return shape + + +def intersect(shape1, shape2): + return sl.intersect()(shape1, shape2) + + +def hull_from_points(points): + return sl.hull()(*points) + + +def hull_from_shapes(shapes, points=None): + hs = [] + if points is not None: + hs.extend(points) + if shapes is not None: + hs.extend(shapes) + return sl.hull()(*hs) + + +def tess_hull(shapes, sl_tol=.5, sl_angTol=1): + return sl.hull()(*shapes) + + +def triangle_hulls(shapes): + print('triangle_hulls()') + hulls = [] + for i in range(len(shapes) - 2): + hulls.append(hull_from_shapes(shapes[i: (i + 3)])) + + return union(hulls) + + +def polyline(point_list): + return sl.polygon(point_list) + + +# def project_to_plate(): +# square = cq.Workplane('XY').rect(1000, 1000) +# for wire in square.wires().objects: +# plane = cq.Workplane('XY').add(cq.Face.makeFromWires(wire)) + +def extrude_poly(outer_poly, inner_polys=None, height=1): + if inner_polys is not None: + return sl.linear_extrude(height=height, twist=0, convexity=0, center=True)(outer_poly, *inner_polys) + else: + return sl.linear_extrude(height=height, twist=0, convexity=0, center=True)(outer_poly) + + +def import_file(fname): + return sl.import_(fname + ".stl") + + +def export_file(shape, fname): + print("EXPORTING TO {}".format(fname + ".scad")) + sl.scad_render_to_file(shape, fname + ".scad") + + +def export_dxf(shape, fname): + pass \ No newline at end of file -- cgit v1.2.3