diff --git a/Makefile b/Makefile index 9aaad5d..aed33a0 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -GENERATE = bin grid grid_inv pill rcube round_box round_flat_box toolinlay1 toolinlay2 +GENERATE = bin grid grid_inv pill rcube rfcube toolinlay1 toolinlay2 doc_images: $(GENERATE:%=docs/img/%.png) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 8cf2441..ffb0cbc 100644 Binary files a/docs/_build/doctrees/environment.pickle and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/solidLib.doctree b/docs/_build/doctrees/solidLib.doctree index e268435..e096a4c 100644 Binary files a/docs/_build/doctrees/solidLib.doctree and b/docs/_build/doctrees/solidLib.doctree differ diff --git a/docs/_build/html/_images/bin.png b/docs/_build/html/_images/bin.png index 25bd3a6..eeb56ca 100644 Binary files a/docs/_build/html/_images/bin.png and b/docs/_build/html/_images/bin.png differ diff --git a/docs/_build/html/_images/pill.png b/docs/_build/html/_images/pill.png new file mode 100644 index 0000000..5f5f0f3 Binary files /dev/null and b/docs/_build/html/_images/pill.png differ diff --git a/docs/_build/html/_images/rcube.png b/docs/_build/html/_images/rcube.png new file mode 100644 index 0000000..4299747 Binary files /dev/null and b/docs/_build/html/_images/rcube.png differ diff --git a/docs/_build/html/_images/toolinlay1.png b/docs/_build/html/_images/toolinlay1.png index fb29c59..725bc95 100644 Binary files a/docs/_build/html/_images/toolinlay1.png and b/docs/_build/html/_images/toolinlay1.png differ diff --git a/docs/_build/html/_images/toolinlay2.png b/docs/_build/html/_images/toolinlay2.png index c3f6907..ea2a408 100644 Binary files a/docs/_build/html/_images/toolinlay2.png and b/docs/_build/html/_images/toolinlay2.png differ diff --git a/docs/_build/html/_modules/solidLib/assortment.html b/docs/_build/html/_modules/solidLib/assortment.html index bdf6338..34b73e2 100644 --- a/docs/_build/html/_modules/solidLib/assortment.html +++ b/docs/_build/html/_modules/solidLib/assortment.html @@ -122,8 +122,10 @@ import numpy as np import solid as scad from . import primitives as slp +import solidLib as sl from typing import Union, Iterable + # import .primitives as slp @@ -133,8 +135,6 @@ w: float = 3, h: float = 1.5, fillet: bool = False, - dim: float = 59, - segments: int = 36, ): """generate a grid of (flattened) triangles with or without fillet @@ -149,7 +149,7 @@ out = scad.polygon([[0, 0], [w / 2, 0], [w / 2 - h, h], [0, h]]) else: out = scad.polygon([[0, 0], [w / 2, 0], [0, h]]) - out = scad.linear_extrude(dim)(out) + out = scad.linear_extrude(sl.settings.raster)(out) out = scad.rotate([90, 0, 90])(out) if fillet: @@ -158,25 +158,25 @@ scallop = slp.pill( [ [0, 0, 0], - [dim - 2 * h - (w - 2 * h), 0, 0], + [dsl.settings.raster - 2 * h - (w - 2 * h), 0, 0], # [0,0,h], [dim - 2 * h - (w - 2 * h),0,h] ], h, - segments=segments, + segments=sl.settings.segments, ) - scallop += scad.rotate((0, -90, 0))(scallop) + scad.translate([dim - w, 0, 0])( + scallop += scad.rotate((0, -90, 0))(scallop) + scad.translate([sl.settings.raster - w, 0, 0])( scad.rotate([0, -90, 0])(scallop) ) scallop = scad.translate((w / 2, w / 2, h))(scallop) out -= scallop - out += scad.translate((0, dim, 0))(scad.rotate((0, 0, -90))(out)) - out += scad.translate((dim, dim, 0))(scad.rotate((0, 0, 180))(out)) + out += scad.translate((0, sl.settings.raster, 0))(scad.rotate((0, 0, -90))(out)) + out += scad.translate((sl.settings.raster, sl.settings.raster, 0))(scad.rotate((0, 0, 180))(out)) result = out for dx in range(x_dim): for dy in range(y): - result += scad.translate((dim * dx, dim * dy, 0))(out) + result += scad.translate((sl.settings.raster * dx, sl.settings.raster * dy, 0))(out) return result @@ -187,29 +187,28 @@ w: float = 3, h: float = 1.5, fillet: bool = False, - dim: float = 59, - segments: int = 36, ): - g = grid(x, y, w, h, fillet, dim, segments) - return scad.cube([x * dim, y * dim, h]) - g + g = grid(x, y, w, h, fillet, sl.settings.raster, sl.settings.segments) + return scad.cube([x * sl.settings.raster, y * sl.settings.raster, h]) - g -
[docs]def bin(x: float, y: float, h: float = 67, segments: int = 36, dim: float = 59): +
[docs]def bin(x: float, y: float, h: float = 67): """ standardized container .. image:: img/bin.png """ + class dims: wall = 2 r_in = 2 r_out = r_in + wall - bulk = slp.round_flat_box(dim * x, dim * y, h, dims.r_out) - hole = slp.round_box(dim * x - dims.wall * 2, dim * y - dims.wall * 2, h, dims.r_in) + bulk = slp.rfcube([sl.settings.raster * x, sl.settings.raster * y, h], sl.settings.raster.r_out) + hole = slp.rcube([sl.settings.raster * x - dims.wall * 2, sl.settings.raster * y - dims.wall * 2, h], dims.r_in) hole = scad.translate([dims.wall, dims.wall, dims.wall])(hole) - wall_o = scad.cylinder(r=dims.r_out, h=dims.r_out, segments=segments) + wall_o = scad.cylinder(r=dims.r_out, h=dims.r_out, segments=sl.settings.segments) g = grid(x, y) @@ -226,8 +225,6 @@ r_tool: float = 7, inset: float = 4, maxh: float = 67, - dim: float = 59, - segments: int = 36 ): """toolinlay1 @@ -244,19 +241,19 @@ r_in = 2 tool_ins = 3 - base = slp.round_flat_box(x * dim, y * dim, height + inset, r_in + wall) + base = slp.rfcube([x * sl.settings.raster, y * sl.settings.raster, height + inset], r_in + wall) toolindent = 0.1 toolindent_w = 2 - toolbase_l = dim * x - 2 * wall - 2 * r_tool + toolbase_l = sl.settings.raster * x - 2 * wall - 2 * r_tool toolbase_t = scad.cube([toolbase_l * (1 - toolindent), 0.001, tool_ins]) toolbase_b = scad.translate([toolbase_l * (1 - toolindent), 0, 0])( scad.cube([toolbase_l * toolindent - toolindent_w, 0.001, tool_ins]) ) toolcutout = scad.minkowski()( - toolbase_t, scad.sphere(r=r_tool, segments=segments) + toolbase_t, scad.sphere(r=r_tool, segments=sl.settings.segments) ) + scad.minkowski()( - toolbase_b, scad.sphere(r=r_tool + toolindent_w, segments=segments) + toolbase_b, scad.sphere(r=r_tool + toolindent_w, segments=sl.settings.segments) ) toolcutout = scad.translate( @@ -264,14 +261,14 @@ )(toolcutout) toolcutouts = [] - for i in range((dim * y - 3 * wall) // (r_tool * 2 + 2 * toolindent_w)): + for i in range((sl.settings.raster * y - 3 * wall) // (r_tool * 2 + 2 * toolindent_w)): toolcutouts.append( scad.translate([0, i * (2 * r_tool + 2 * toolindent_w + 1.4), 0])( scad.color("yellow")(toolcutout) ) ) - lower = bin(2, 3, h=maxh - height, dim=dim) + lower = bin(2, 3, h=maxh - height, dim=sl.settings.raster) lower = scad.color("red", 0.5)(lower) base = scad.translate([0, 0, maxh - height - inset])(base) @@ -284,9 +281,7 @@ inset: float = 4, inset_tool: float = 3, maxh: float = 67, - dim: float = 59, wall: float = 2, - segments: int = 36, ): """toolinlay2 @@ -299,14 +294,11 @@ :param inset: depth of toolinlay inset :param inset_tool: depth of additional toolspace inset :param maxh: system height restriction - :param dim: system raster dimension - :param segments: circular object segments """ - x_dim = 2 - y_dim = 3 + x_dim = 3 r_in = 2 - base = slp.round_flat_box(x_dim * dim, y_dim * dim, height + inset, r_in + wall) + base = slp.rfcube([x_dim * sl.settings.raster, y_dim * sl.settings.raster, height + inset], r_in + wall) toolindent = 0.1 toolindent_w = 2 @@ -315,16 +307,16 @@ tool_rs = [] if not isinstance(r_tool, list): tool_rs = [r_tool] * ( - (dim * x_dim - 3 * wall) // (r_tool * 2 + 2 * toolindent_w) - 1 + (sl.settings.raster * x_dim - 3 * wall) // (r_tool * 2 + 2 * toolindent_w) - 1 ) else: tool_rs = r_tool - toolbase_l = dim * y_dim - 2 * wall - 2 * np.max(tool_rs) + toolbase_l = sl.settings.raster * y_dim - 2 * wall - 2 * np.max(tool_rs) for i, r in enumerate(tool_rs): toolbase_t = scad.cube([0.001, toolbase_l * (1 - toolindent), inset_tool]) # toolbase_b = scad.translate([0, toolbase_l * (1 - toolindent), 0])( - # scad.cube([0.001, toolbase_l * toolindent - toolindent_w, tool_ins]) + # scad.cube([0.001, toolbase_l * toolindent - toolindent_w, tool_ins]) # ) toolcutout = slp.pill( np.array([[0, 0, 0], [0, toolbase_l, 0], [0, toolbase_l, 10], [0, 0, 10]]) @@ -348,12 +340,12 @@ [ [0, 0, 0], [0, toolindent * toolbase_l, 0], - [dim * x_dim - 2 * wall - 2 * 9, 0, 0], - [dim * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 0], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, 0, 0], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 0], [0, 0, 10], [0, toolindent * toolbase_l, 10], - [dim * x_dim - 2 * wall - 2 * 9, 0, 10], - [dim * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 10], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, 0, 10], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 10], ] ) + [9 + wall, 9 + wall, maxh - inset_tool], @@ -361,14 +353,19 @@ ) ) toolcutouts.append( - scad.translate((wall * 2,wall * 2,0))( - slp.round_flat_box( - toolindent * toolbase_l + 2 * 9, toolindent * toolbase_l + 2 * 9 - wall, 100, 9-wall, segments=segments + scad.translate((wall * 2, wall * 2, 0))( + slp.rfcube( + [ + toolindent * toolbase_l + 2 * 9, + toolindent * toolbase_l + 2 * 9 - wall, + 100, + ], + 9 - wall, ) ) ) - lower = bin(2, 3, h=maxh - height, dim=dim) + lower = bin(2, 3, h=maxh - height, dim=sl.settings.raster) lower = scad.color("red", 0.5)(lower) base = scad.translate([0, 0, maxh - height - inset])(base) diff --git a/docs/_build/html/_modules/solidLib/primitives.html b/docs/_build/html/_modules/solidLib/primitives.html index 967561b..16f8937 100644 --- a/docs/_build/html/_modules/solidLib/primitives.html +++ b/docs/_build/html/_modules/solidLib/primitives.html @@ -123,35 +123,19 @@ import solid as scad +import solidLib as sl + import numpy as np import logging as log log.basicConfig(level=log.INFO) -
[docs]def round_box(x_dim: float, y_dim: float, z_dim: float, radius: float, segments: int = 32): - """ - creates a round box with radius r - Args: - x_dim (float): . - - Important: - deprecated - - .. image:: img/round_box.png - """ - box = scad.cube([x_dim - 2 * radius, y_dim - 2 * radius, z_dim - 2 * radius]) - wall = scad.sphere(r=radius, segments=segments) - - return scad.translate([radius, radius, radius])( - scad.minkowski()(box, wall) - )
- -
[docs]def rcube(dim: Iterable[float], radius: float, segments: int = 32): +
[docs]def rcube(dim: Iterable[float], radius: float): """ creates a cube with rounded corners - .. image:: img/round_box.png + .. image:: img/rcube.png Args: dim: cube dimensions to base box on. @@ -164,29 +148,30 @@ for dy in [radius, dim[1] - radius]: for dz in [radius, dim[2] - radius]: corners.append( - scad.translate([dx, dy, dz])(( - scad.sphere(r=radius) - )) + scad.translate([dx, dy, dz])( + (scad.sphere(r=radius, segments=sl.settings.segments)) + ) ) return scad.hull()(*corners)
-
[docs]def round_flat_box(x: float, y: float, z: float, r: float, segments: int = 32): + +
[docs]def rfcube(dim: Iterable[float], r: float): """creates a round box with radius r and flat top/bottom - .. image:: img/round_flat_box.png + .. image:: img/round_flat_box.png """ - box = scad.cube([x - 2 * r, y - 2 * r, z- 2 * r]) - wall = scad.cylinder(r=r, h=2*r, segments=SEGMENTS) + box = scad.cube([dim[0] - 2 * r, dim[1] - 2 * r, dim[2] - 2 * r]) + wall = scad.cylinder(r=r, h=2 * r, segments=sl.settings.segments) - return scad.translate([r, r, 0])( - scad.minkowski()(box, wall) - )
+ return scad.translate([r, r, 0])(scad.minkowski()(box, wall))
[docs]def pill(ps: List[List[float]], r, segments: int = 36): """ create a pill around given points + + .. image:: img/pill.png """ if len(ps) < 2: raise Exception("requires 2 or more points") @@ -195,9 +180,7 @@ spheres = [] # log.info(ps) for p in ps: - spheres.append( - scad.translate(p)(s) - ) + spheres.append(scad.translate(p)(s)) return scad.hull()(*spheres)
diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index c4661e5..c4e2cd3 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -189,14 +189,12 @@
diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index 51f11b2..5410361 100644 Binary files a/docs/_build/html/objects.inv and b/docs/_build/html/objects.inv differ diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index ce7bd23..b92253b 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","solidLib"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["index.rst","solidLib.rst"],objects:{"":{solidLib:[1,0,0,"-"]},"solidLib.assortment":{bin:[1,1,1,""],grid:[1,1,1,""],grid_inv:[1,1,1,""],toolinlay1:[1,1,1,""],toolinlay2:[1,1,1,""]},"solidLib.primitives":{pill:[1,1,1,""],rcube:[1,1,1,""],round_box:[1,1,1,""],round_flat_box:[1,1,1,""]},"solidLib.settings":{height:[1,3,1,""],raster:[1,3,1,""],segments:[1,3,1,""]},solidLib:{assortment:[1,0,0,"-"],primitives:[1,0,0,"-"],settings:[1,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:attribute"},terms:{"2x3":1,"class":1,"float":1,"int":1,abov:1,addit:1,alex:1,arg:1,around:1,assort:0,base:1,bin:1,bool:1,bottom:1,box:1,circular:1,contain:1,content:0,corner:1,creat:1,cube:1,deprec:1,depth:1,dim:1,dimens:1,dolidlib:1,fals:1,fillet:1,flat:1,flatten:1,gener:1,given:1,global:1,grid:1,grid_inv:1,gridspac:1,height:1,index:0,inset:1,inset_tool:1,iter:1,list:1,lower:1,maxh:1,modul:0,object:1,packag:0,page:0,paramet:1,pill:1,point:1,primit:0,r_tool:1,radiu:1,raster:1,rcube:1,restrict:1,round:1,round_box:1,round_flat_box:1,search:0,segment:1,set:1,size:1,sourc:1,standard:1,structur:1,submodul:0,system:1,toolinlai:1,toolinlay1:1,toolinlay2:1,toolspac:1,tooltrai:1,top:1,triangl:1,union:1,used:1,wall:1,width:1,without:1,x_dim:1,y_dim:1,z_dim:1},titles:["Welcome to solidLib\u2019s documentation!","solidLib package"],titleterms:{assort:1,content:1,document:0,global:[],indic:0,modul:1,packag:1,primit:1,solidlib:[0,1],submodul:1,tabl:0,welcom:0}}) \ No newline at end of file +Search.setIndex({docnames:["index","solidLib"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["index.rst","solidLib.rst"],objects:{"":{solidLib:[1,0,0,"-"]},"solidLib.assortment":{bin:[1,1,1,""],grid:[1,1,1,""],grid_inv:[1,1,1,""],toolinlay1:[1,1,1,""],toolinlay2:[1,1,1,""]},"solidLib.primitives":{pill:[1,1,1,""],rcube:[1,1,1,""],rfcube:[1,1,1,""]},"solidLib.settings":{height:[1,3,1,""],raster:[1,3,1,""],segments:[1,3,1,""]},solidLib:{assortment:[1,0,0,"-"],primitives:[1,0,0,"-"],settings:[1,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:attribute"},terms:{"2x3":1,"class":1,"float":1,"int":1,abov:1,addit:1,alex:1,arg:1,around:1,assort:0,base:1,bin:1,bool:1,bottom:1,box:1,circular:1,contain:1,content:0,corner:1,creat:1,cube:1,deprec:[],depth:1,dim:1,dimens:1,dolidlib:1,fals:1,fillet:1,flat:1,flatten:1,gener:1,given:1,global:1,grid:1,grid_inv:1,gridspac:1,height:1,index:0,inset:1,inset_tool:1,iter:1,list:1,lower:1,maxh:1,modul:0,object:1,packag:0,page:0,paramet:1,pill:1,point:1,primit:0,r_tool:1,radiu:1,raster:1,rcube:1,restrict:1,rfbox:[],rfcube:1,round:1,round_box:[],round_flat_box:[],search:0,segment:1,set:1,size:1,sourc:1,standard:1,structur:1,submodul:0,system:1,toolinlai:1,toolinlay1:1,toolinlay2:1,toolspac:1,tooltrai:1,top:1,triangl:1,union:1,used:1,wall:1,width:1,without:1,x_dim:1,y_dim:[],z_dim:[]},titles:["Welcome to solidLib\u2019s documentation!","solidLib package"],titleterms:{assort:1,content:1,document:0,global:[],indic:0,modul:1,packag:1,primit:1,solidlib:[0,1],submodul:1,tabl:0,welcom:0}}) \ No newline at end of file diff --git a/docs/_build/html/solidLib.html b/docs/_build/html/solidLib.html index 2700135..4adecd2 100644 --- a/docs/_build/html/solidLib.html +++ b/docs/_build/html/solidLib.html @@ -149,14 +149,14 @@

solidLib.assortment module

-solidLib.assortment.bin(x: float, y: float, h: float = 67, segments: int = 36, dim: float = 59)[source]
+solidLib.assortment.bin(x: float, y: float, h: float = 67)[source]

standardized container

_images/bin.png
-solidLib.assortment.grid(x_dim: int, y: int, w: float = 3, h: float = 1.5, fillet: bool = False, dim: float = 59, segments: int = 36)[source]
+solidLib.assortment.grid(x_dim: int, y: int, w: float = 3, h: float = 1.5, fillet: bool = False)[source]

generate a grid of (flattened) triangles with or without fillet

the generated grid is x by y in size with a gridspace of size dim, the triangles used for the base structure is given by their height and width

@@ -165,12 +165,12 @@ the triangles used for the base structure is given by their height and width

-solidLib.assortment.grid_inv(x: float, y: float, w: float = 3, h: float = 1.5, fillet: bool = False, dim: float = 59, segments: int = 36)[source]
+solidLib.assortment.grid_inv(x: float, y: float, w: float = 3, h: float = 1.5, fillet: bool = False)[source]
-solidLib.assortment.toolinlay1(height: float, *args, r_tool: float = 7, inset: float = 4, maxh: float = 67, dim: float = 59, segments: int = 36)[source]
+solidLib.assortment.toolinlay1(height: float, *args, r_tool: float = 7, inset: float = 4, maxh: float = 67)[source]

creates a tooltray for alex container bins (2x3)

_images/toolinlay1.png
@@ -185,7 +185,7 @@ the triangles used for the base structure is given by their height and width

-solidLib.assortment.toolinlay2(height: float, r_tool: Union[float, Iterable[float]] = 7, inset: float = 4, inset_tool: float = 3, maxh: float = 67, dim: float = 59, wall: float = 2, segments: int = 36)[source]
+solidLib.assortment.toolinlay2(height: float, r_tool: Union[float, Iterable[float]] = 7, inset: float = 4, inset_tool: float = 3, maxh: float = 67, wall: float = 2)[source]

creates a tooltray for alex container bins (2x3)

_images/toolinlay2.png
@@ -196,8 +196,6 @@ the triangles used for the base structure is given by their height and width

  • inset – depth of toolinlay inset

  • inset_tool – depth of additional toolspace inset

  • maxh – system height restriction

  • -
  • dim – system raster dimension

  • -
  • segments – circular object segments

  • @@ -210,13 +208,14 @@ the triangles used for the base structure is given by their height and width

    solidLib.primitives.pill(ps: List[List[float]], r, segments: int = 36)[source]

    create a pill around given points

    +_images/pill.png
    -solidLib.primitives.rcube(dim: Iterable[float], radius: float, segments: int = 32)[source]
    +solidLib.primitives.rcube(dim: Iterable[float], radius: float)[source]

    creates a cube with rounded corners

    -_images/round_box.png +_images/rcube.png
    Parameters
      @@ -229,25 +228,8 @@ the triangles used for the base structure is given by their height and width

    -
    -solidLib.primitives.round_box(x_dim: float, y_dim: float, z_dim: float, radius: float, segments: int = 32)[source]
    -

    creates a round box with radius r

    -
    -
    Parameters
    -

    x_dim (float) –

    .

    -

    -
    -
    -
    -

    Important

    -

    deprecated

    -
    -_images/round_box.png -
    - -
    -
    -solidLib.primitives.round_flat_box(x: float, y: float, z: float, r: float, segments: int = 32)[source]
    +
    +solidLib.primitives.rfcube(dim: Iterable[float], r: float)[source]

    creates a round box with radius r and flat top/bottom

    _images/round_flat_box.png
    diff --git a/docs/files/bin.scad b/docs/files/bin.scad index 5926714..d35fdbb 100644 --- a/docs/files/bin.scad +++ b/docs/files/bin.scad @@ -1,4 +1,4 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 union() { @@ -10,10 +10,30 @@ union() { } } translate(v = [2, 2, 2]) { - translate(v = [2, 2, 2]) { - minkowski() { - cube(size = [51, 51, 63]); - sphere($fn = 32, r = 2); + hull() { + translate(v = [2, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 2, 65]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 53, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 53, 65]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 2, 65]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 53, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 53, 65]) { + sphere($fn = 36, r = 2); } } } @@ -474,10 +494,30 @@ union() { } } translate(v = [2, 2, 2]) { - translate(v = [2, 2, 2]) { - minkowski() { - cube(size = [51, 51, 63]); - sphere($fn = 32, r = 2); + hull() { + translate(v = [2, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 2, 65]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 53, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 53, 65]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 2, 65]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 53, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [53, 53, 65]) { + sphere($fn = 36, r = 2); } } } @@ -495,8 +535,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/files/grid.scad b/docs/files/grid.scad index 95ea72a..c0ebcb8 100644 --- a/docs/files/grid.scad +++ b/docs/files/grid.scad @@ -1,4 +1,4 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 union() { @@ -277,8 +277,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/files/grid_inv.scad b/docs/files/grid_inv.scad index 73304fb..f468764 100644 --- a/docs/files/grid_inv.scad +++ b/docs/files/grid_inv.scad @@ -1,4 +1,4 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 difference() { @@ -280,8 +280,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/files/pill.scad b/docs/files/pill.scad index 5f1ba6a..a4dea1c 100644 --- a/docs/files/pill.scad +++ b/docs/files/pill.scad @@ -1,4 +1,4 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 hull() { @@ -21,8 +21,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/files/rcube.scad b/docs/files/rcube.scad index be73512..9a859d6 100644 --- a/docs/files/rcube.scad +++ b/docs/files/rcube.scad @@ -1,30 +1,30 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 hull() { translate(v = [0.2500000000, 0.2500000000, 0.2500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } translate(v = [0.2500000000, 0.2500000000, 0.7500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } translate(v = [0.2500000000, 0.7500000000, 0.2500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } translate(v = [0.2500000000, 0.7500000000, 0.7500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } translate(v = [0.7500000000, 0.2500000000, 0.2500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } translate(v = [0.7500000000, 0.2500000000, 0.7500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } translate(v = [0.7500000000, 0.7500000000, 0.2500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } translate(v = [0.7500000000, 0.7500000000, 0.7500000000]) { - sphere(r = 0.2500000000); + sphere($fn = 36, r = 0.2500000000); } } /*********************************************** @@ -39,8 +39,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/files/rfcube.scad b/docs/files/rfcube.scad new file mode 100644 index 0000000..bb47c36 --- /dev/null +++ b/docs/files/rfcube.scad @@ -0,0 +1,32 @@ +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 + + +translate(v = [0.2500000000, 0.2500000000, 0]) { + minkowski() { + cube(size = [0.5000000000, 0.5000000000, 0.5000000000]); + cylinder($fn = 36, h = 0.5000000000, r = 0.2500000000); + } +} +/*********************************************** +********* SolidPython code: ********** +************************************************ + +# import solidLib as sl +import solidLib.primitives as slp +import solidLib.assortment as sla +import solid as s + + +s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") +s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") + +s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") +s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") +s.scad_render_to_file(sla.grid_inv(2,3), "docs/files/grid_inv.scad") + +s.scad_render_to_file(sla.toolinlay1(15), "docs/files/toolinlay1.scad") +s.scad_render_to_file(sla.toolinlay2(15), "docs/files/toolinlay2.scad") + + +************************************************/ diff --git a/docs/files/round_flat_box.scad b/docs/files/round_flat_box.scad index b2b5613..e342fb2 100644 --- a/docs/files/round_flat_box.scad +++ b/docs/files/round_flat_box.scad @@ -1,4 +1,4 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:21:44 translate(v = [0.2500000000, 0.2500000000, 0]) { @@ -19,8 +19,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/round_flat_box.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/files/toolinlay1.scad b/docs/files/toolinlay1.scad index 8f9029a..c7be763 100644 --- a/docs/files/toolinlay1.scad +++ b/docs/files/toolinlay1.scad @@ -1,4 +1,4 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 difference() { @@ -20,10 +20,30 @@ difference() { } } translate(v = [2, 2, 2]) { - translate(v = [2, 2, 2]) { - minkowski() { - cube(size = [110, 169, 48]); - sphere($fn = 32, r = 2); + hull() { + translate(v = [2, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 50]) { + sphere($fn = 36, r = 2); } } } @@ -1624,10 +1644,30 @@ difference() { } } translate(v = [2, 2, 2]) { - translate(v = [2, 2, 2]) { - minkowski() { - cube(size = [110, 169, 48]); - sphere($fn = 32, r = 2); + hull() { + translate(v = [2, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 50]) { + sphere($fn = 36, r = 2); } } } @@ -1809,8 +1849,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/files/toolinlay2.scad b/docs/files/toolinlay2.scad index ea9b959..5dc39ee 100644 --- a/docs/files/toolinlay2.scad +++ b/docs/files/toolinlay2.scad @@ -1,4 +1,4 @@ -// Generated by SolidPython 1.0.5 on 2021-02-12 20:02:04 +// Generated by SolidPython 1.0.5 on 2021-02-14 10:24:57 difference() { @@ -20,10 +20,30 @@ difference() { } } translate(v = [2, 2, 2]) { - translate(v = [2, 2, 2]) { - minkowski() { - cube(size = [110, 169, 48]); - sphere($fn = 32, r = 2); + hull() { + translate(v = [2, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 50]) { + sphere($fn = 36, r = 2); } } } @@ -1624,10 +1644,30 @@ difference() { } } translate(v = [2, 2, 2]) { - translate(v = [2, 2, 2]) { - minkowski() { - cube(size = [110, 169, 48]); - sphere($fn = 32, r = 2); + hull() { + translate(v = [2, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [2, 171, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 2, 50]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 2]) { + sphere($fn = 36, r = 2); + } + translate(v = [112, 171, 50]) { + sphere($fn = 36, r = 2); } } } @@ -1771,8 +1811,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad") diff --git a/docs/img/bin.png b/docs/img/bin.png index 25bd3a6..eeb56ca 100644 Binary files a/docs/img/bin.png and b/docs/img/bin.png differ diff --git a/docs/img/rcube.png b/docs/img/rcube.png index 33edacb..4299747 100644 Binary files a/docs/img/rcube.png and b/docs/img/rcube.png differ diff --git a/docs/img/rfcube.png b/docs/img/rfcube.png new file mode 100644 index 0000000..9cbb328 Binary files /dev/null and b/docs/img/rfcube.png differ diff --git a/docs/img/toolinlay1.png b/docs/img/toolinlay1.png index fb29c59..725bc95 100644 Binary files a/docs/img/toolinlay1.png and b/docs/img/toolinlay1.png differ diff --git a/docs/img/toolinlay2.png b/docs/img/toolinlay2.png index c3f6907..ea2a408 100644 Binary files a/docs/img/toolinlay2.png and b/docs/img/toolinlay2.png differ diff --git a/solidLib/assortment.py b/solidLib/assortment.py index d4e5428..9a664c7 100644 --- a/solidLib/assortment.py +++ b/solidLib/assortment.py @@ -1,8 +1,10 @@ import numpy as np import solid as scad from . import primitives as slp +import solidLib as sl from typing import Union, Iterable + # import .primitives as slp @@ -12,8 +14,6 @@ def grid( w: float = 3, h: float = 1.5, fillet: bool = False, - dim: float = 59, - segments: int = 36, ): """generate a grid of (flattened) triangles with or without fillet @@ -28,7 +28,7 @@ def grid( out = scad.polygon([[0, 0], [w / 2, 0], [w / 2 - h, h], [0, h]]) else: out = scad.polygon([[0, 0], [w / 2, 0], [0, h]]) - out = scad.linear_extrude(dim)(out) + out = scad.linear_extrude(sl.settings.raster)(out) out = scad.rotate([90, 0, 90])(out) if fillet: @@ -37,25 +37,25 @@ def grid( scallop = slp.pill( [ [0, 0, 0], - [dim - 2 * h - (w - 2 * h), 0, 0], + [dsl.settings.raster - 2 * h - (w - 2 * h), 0, 0], # [0,0,h], [dim - 2 * h - (w - 2 * h),0,h] ], h, - segments=segments, + segments=sl.settings.segments, ) - scallop += scad.rotate((0, -90, 0))(scallop) + scad.translate([dim - w, 0, 0])( + scallop += scad.rotate((0, -90, 0))(scallop) + scad.translate([sl.settings.raster - w, 0, 0])( scad.rotate([0, -90, 0])(scallop) ) scallop = scad.translate((w / 2, w / 2, h))(scallop) out -= scallop - out += scad.translate((0, dim, 0))(scad.rotate((0, 0, -90))(out)) - out += scad.translate((dim, dim, 0))(scad.rotate((0, 0, 180))(out)) + out += scad.translate((0, sl.settings.raster, 0))(scad.rotate((0, 0, -90))(out)) + out += scad.translate((sl.settings.raster, sl.settings.raster, 0))(scad.rotate((0, 0, 180))(out)) result = out for dx in range(x_dim): for dy in range(y): - result += scad.translate((dim * dx, dim * dy, 0))(out) + result += scad.translate((sl.settings.raster * dx, sl.settings.raster * dy, 0))(out) return result @@ -66,29 +66,28 @@ def grid_inv( w: float = 3, h: float = 1.5, fillet: bool = False, - dim: float = 59, - segments: int = 36, ): - g = grid(x, y, w, h, fillet, dim, segments) - return scad.cube([x * dim, y * dim, h]) - g + g = grid(x, y, w, h, fillet, sl.settings.raster, sl.settings.segments) + return scad.cube([x * sl.settings.raster, y * sl.settings.raster, h]) - g -def bin(x: float, y: float, h: float = 67, segments: int = 36, dim: float = 59): +def bin(x: float, y: float, h: float = 67): """ standardized container .. image:: img/bin.png """ + class dims: wall = 2 r_in = 2 r_out = r_in + wall - bulk = slp.round_flat_box(dim * x, dim * y, h, dims.r_out) - hole = slp.round_box(dim * x - dims.wall * 2, dim * y - dims.wall * 2, h, dims.r_in) + bulk = slp.rfcube([sl.settings.raster * x, sl.settings.raster * y, h], sl.settings.raster.r_out) + hole = slp.rcube([sl.settings.raster * x - dims.wall * 2, sl.settings.raster * y - dims.wall * 2, h], dims.r_in) hole = scad.translate([dims.wall, dims.wall, dims.wall])(hole) - wall_o = scad.cylinder(r=dims.r_out, h=dims.r_out, segments=segments) + wall_o = scad.cylinder(r=dims.r_out, h=dims.r_out, segments=sl.settings.segments) g = grid(x, y) @@ -105,8 +104,6 @@ def toolinlay1( r_tool: float = 7, inset: float = 4, maxh: float = 67, - dim: float = 59, - segments: int = 36 ): """toolinlay1 @@ -123,19 +120,19 @@ def toolinlay1( r_in = 2 tool_ins = 3 - base = slp.round_flat_box(x * dim, y * dim, height + inset, r_in + wall) + base = slp.rfcube([x * sl.settings.raster, y * sl.settings.raster, height + inset], r_in + wall) toolindent = 0.1 toolindent_w = 2 - toolbase_l = dim * x - 2 * wall - 2 * r_tool + toolbase_l = sl.settings.raster * x - 2 * wall - 2 * r_tool toolbase_t = scad.cube([toolbase_l * (1 - toolindent), 0.001, tool_ins]) toolbase_b = scad.translate([toolbase_l * (1 - toolindent), 0, 0])( scad.cube([toolbase_l * toolindent - toolindent_w, 0.001, tool_ins]) ) toolcutout = scad.minkowski()( - toolbase_t, scad.sphere(r=r_tool, segments=segments) + toolbase_t, scad.sphere(r=r_tool, segments=sl.settings.segments) ) + scad.minkowski()( - toolbase_b, scad.sphere(r=r_tool + toolindent_w, segments=segments) + toolbase_b, scad.sphere(r=r_tool + toolindent_w, segments=sl.settings.segments) ) toolcutout = scad.translate( @@ -143,14 +140,14 @@ def toolinlay1( )(toolcutout) toolcutouts = [] - for i in range((dim * y - 3 * wall) // (r_tool * 2 + 2 * toolindent_w)): + for i in range((sl.settings.raster * y - 3 * wall) // (r_tool * 2 + 2 * toolindent_w)): toolcutouts.append( scad.translate([0, i * (2 * r_tool + 2 * toolindent_w + 1.4), 0])( scad.color("yellow")(toolcutout) ) ) - lower = bin(2, 3, h=maxh - height, dim=dim) + lower = bin(2, 3, h=maxh - height, dim=sl.settings.raster) lower = scad.color("red", 0.5)(lower) base = scad.translate([0, 0, maxh - height - inset])(base) @@ -163,9 +160,7 @@ def toolinlay2( inset: float = 4, inset_tool: float = 3, maxh: float = 67, - dim: float = 59, wall: float = 2, - segments: int = 36, ): """toolinlay2 @@ -178,14 +173,11 @@ def toolinlay2( :param inset: depth of toolinlay inset :param inset_tool: depth of additional toolspace inset :param maxh: system height restriction - :param dim: system raster dimension - :param segments: circular object segments """ - x_dim = 2 - y_dim = 3 + x_dim = 3 r_in = 2 - base = slp.round_flat_box(x_dim * dim, y_dim * dim, height + inset, r_in + wall) + base = slp.rfcube([x_dim * sl.settings.raster, y_dim * sl.settings.raster, height + inset], r_in + wall) toolindent = 0.1 toolindent_w = 2 @@ -194,16 +186,16 @@ def toolinlay2( tool_rs = [] if not isinstance(r_tool, list): tool_rs = [r_tool] * ( - (dim * x_dim - 3 * wall) // (r_tool * 2 + 2 * toolindent_w) - 1 + (sl.settings.raster * x_dim - 3 * wall) // (r_tool * 2 + 2 * toolindent_w) - 1 ) else: tool_rs = r_tool - toolbase_l = dim * y_dim - 2 * wall - 2 * np.max(tool_rs) + toolbase_l = sl.settings.raster * y_dim - 2 * wall - 2 * np.max(tool_rs) for i, r in enumerate(tool_rs): toolbase_t = scad.cube([0.001, toolbase_l * (1 - toolindent), inset_tool]) # toolbase_b = scad.translate([0, toolbase_l * (1 - toolindent), 0])( - # scad.cube([0.001, toolbase_l * toolindent - toolindent_w, tool_ins]) + # scad.cube([0.001, toolbase_l * toolindent - toolindent_w, tool_ins]) # ) toolcutout = slp.pill( np.array([[0, 0, 0], [0, toolbase_l, 0], [0, toolbase_l, 10], [0, 0, 10]]) @@ -227,12 +219,12 @@ def toolinlay2( [ [0, 0, 0], [0, toolindent * toolbase_l, 0], - [dim * x_dim - 2 * wall - 2 * 9, 0, 0], - [dim * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 0], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, 0, 0], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 0], [0, 0, 10], [0, toolindent * toolbase_l, 10], - [dim * x_dim - 2 * wall - 2 * 9, 0, 10], - [dim * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 10], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, 0, 10], + [sl.settings.raster * x_dim - 2 * wall - 2 * 9, toolindent * toolbase_l, 10], ] ) + [9 + wall, 9 + wall, maxh - inset_tool], @@ -240,14 +232,19 @@ def toolinlay2( ) ) toolcutouts.append( - scad.translate((wall * 2,wall * 2,0))( - slp.round_flat_box( - toolindent * toolbase_l + 2 * 9, toolindent * toolbase_l + 2 * 9 - wall, 100, 9-wall, segments=segments + scad.translate((wall * 2, wall * 2, 0))( + slp.rfcube( + [ + toolindent * toolbase_l + 2 * 9, + toolindent * toolbase_l + 2 * 9 - wall, + 100, + ], + 9 - wall, ) ) ) - lower = bin(2, 3, h=maxh - height, dim=dim) + lower = bin(2, 3, h=maxh - height, dim=sl.settings.raster) lower = scad.color("red", 0.5)(lower) base = scad.translate([0, 0, maxh - height - inset])(base) diff --git a/solidLib/primitives.py b/solidLib/primitives.py index a2c3a53..2637b89 100644 --- a/solidLib/primitives.py +++ b/solidLib/primitives.py @@ -9,30 +9,12 @@ import logging as log log.basicConfig(level=log.INFO) -def round_box(x_dim: float, y_dim: float, z_dim: float, radius: float, segments: int = 32): - """ - creates a round box with radius r - Args: - x_dim (float): . - - Important: - deprecated - - .. image:: img/round_box.png - """ - box = scad.cube([x_dim - 2 * radius, y_dim - 2 * radius, z_dim - 2 * radius]) - wall = scad.sphere(r=radius, segments=segments) - - return scad.translate([radius, radius, radius])( - scad.minkowski()(box, wall) - ) - -def rcube(dim: Iterable[float], radius: float, segments: int = 32): +def rcube(dim: Iterable[float], radius: float): """ creates a cube with rounded corners - .. image:: img/round_box.png + .. image:: img/rcube.png Args: dim: cube dimensions to base box on. @@ -45,29 +27,30 @@ def rcube(dim: Iterable[float], radius: float, segments: int = 32): for dy in [radius, dim[1] - radius]: for dz in [radius, dim[2] - radius]: corners.append( - scad.translate([dx, dy, dz])(( - scad.sphere(r=radius) - )) + scad.translate([dx, dy, dz])( + (scad.sphere(r=radius, segments=sl.settings.segments)) + ) ) return scad.hull()(*corners) -def round_flat_box(x: float, y: float, z: float, r: float, segments: int = 32): + +def rfcube(dim: Iterable[float], r: float): """creates a round box with radius r and flat top/bottom - .. image:: img/round_flat_box.png + .. image:: img/round_flat_box.png """ - box = scad.cube([x - 2 * r, y - 2 * r, z- 2 * r]) - wall = scad.cylinder(r=r, h=2*r, segments=sl.settings.segments) + box = scad.cube([dim[0] - 2 * r, dim[1] - 2 * r, dim[2] - 2 * r]) + wall = scad.cylinder(r=r, h=2 * r, segments=sl.settings.segments) - return scad.translate([r, r, 0])( - scad.minkowski()(box, wall) - ) + return scad.translate([r, r, 0])(scad.minkowski()(box, wall)) def pill(ps: List[List[float]], r, segments: int = 36): """ create a pill around given points + + .. image:: img/pill.png """ if len(ps) < 2: raise Exception("requires 2 or more points") @@ -76,8 +59,6 @@ def pill(ps: List[List[float]], r, segments: int = 36): spheres = [] # log.info(ps) for p in ps: - spheres.append( - scad.translate(p)(s) - ) + spheres.append(scad.translate(p)(s)) return scad.hull()(*spheres) diff --git a/tests.py b/tests.py index 69950d1..9eca9dd 100644 --- a/tests.py +++ b/tests.py @@ -6,8 +6,7 @@ import solid as s s.scad_render_to_file(slp.pill([[0,0,0],[1, 1, 1]], .25), "./docs/files/pill.scad") s.scad_render_to_file(slp.rcube([1, 1, 1], .25), "./docs/files/rcube.scad") -s.scad_render_to_file(slp.round_box(1, 1, 1, .25), "./docs/files/round_box.scad") -s.scad_render_to_file(slp.round_flat_box(1, 1, 1, .25), "./docs/files/round_flat_box.scad") +s.scad_render_to_file(slp.rfcube([1, 1, 1], .25), "./docs/files/rfcube.scad") s.scad_render_to_file(sla.bin(1, 1), "./docs/files/bin.scad") s.scad_render_to_file(sla.grid(2,3), "docs/files/grid.scad")