summaryrefslogtreecommitdiff
path: root/src/helpers_solid.py
diff options
context:
space:
mode:
authorJoshua Shreve <j.a.shreve@gmail.com>2021-07-08 22:05:34 -0400
committerJoshua Shreve <j.a.shreve@gmail.com>2021-07-08 22:05:34 -0400
commite3bf24d17cdbda9ace5dbcae257c5c856ef984d9 (patch)
tree6bcfbc6741f47feac4faad63a59011001fc3da82 /src/helpers_solid.py
parent7746b122ed99c5e31e8334d26817e4c00ac76560 (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.py126
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