diff options
author | Joshua Shreve <j.a.shreve@gmail.com> | 2021-07-08 22:05:34 -0400 |
---|---|---|
committer | Joshua Shreve <j.a.shreve@gmail.com> | 2021-07-08 22:05:34 -0400 |
commit | e3bf24d17cdbda9ace5dbcae257c5c856ef984d9 (patch) | |
tree | 6bcfbc6741f47feac4faad63a59011001fc3da82 /src/helpers_solid.py | |
parent | 7746b122ed99c5e31e8334d26817e4c00ac76560 (diff) |
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.
Diffstat (limited to 'src/helpers_solid.py')
-rw-r--r-- | src/helpers_solid.py | 126 |
1 files changed, 126 insertions, 0 deletions
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 |