Merge pull request #1419 from BelfrySCAD/revarbat_dev

Revarbat dev various
This commit is contained in:
Revar Desmera 2024-04-22 15:09:21 -07:00 committed by GitHub
commit a5ad165e43
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 73 additions and 5 deletions

View file

@ -2,6 +2,12 @@ DocsDirectory: BOSL2.wiki/
TargetProfile: githubwiki
ProjectName: The Belfry OpenScad Library, v2. (BOSL2)
GenerateDocs: Files, TOC, Index, Topics, CheatSheet, Sidebar
SidebarHeader:
## Indices
.
SidebarMiddle:
[Tutorials](Tutorials)
SidebarFooter:
UsePNGAnimations: Yes
IgnoreFiles:
affine.scad

View file

@ -894,7 +894,7 @@ module arc(n, r, angle, d, cp, points, corner, width, thickness, start, wedge=fa
// stroke(catenary(100, droop=-30));
// Example(2D): Specifying Vertex Count
// stroke(catenary(100, angle=-85, n=11), dots="dot");
// Example: Sweeping a Catenary Path
// Example(3D): Sweeping a Catenary Path
// path = xrot(90, p=path3d(catenary(100, droop=20, n=41)));
// path_sweep(circle(r=1.5, $fn=24), path);
function catenary(width, droop, n=100, angle) =

View file

@ -149,6 +149,7 @@ function path_merge_collinear(path, closed, eps=EPSILON) =
assert( is_path(path), "Invalid path in path_merge_collinear." )
assert( is_undef(eps) || (is_finite(eps) && (eps>=0) ), "Invalid tolerance." )
len(path)<=2 ? path :
let(path = deduplicate(path, closed=closed))
[
if(!closed) path[0],
for(triple=triplet(path,wrap=closed))

View file

@ -61,16 +61,77 @@ module sparse_wall(h=50, l=100, thick=4, maxang=30, strut=5, max_bridge=20, anch
hyp = zstep/2 / cos(maxang);
maxy = min(2 * hyp * sin(maxang), max_bridge+strut);
yreps = ceil(2*yoff/maxy);
size = [thick, l, h];
attachable(anchor,spin,orient, size=size) {
yrot(90) {
linear_extrude(height=thick, convexity=4*yreps, center=true) {
sparse_wall2d([h,l], maxang=maxang, strut=strut, max_bridge=max_bridge);
}
}
children();
}
}
// Module: sparse_wall2d()
// Synopsis: Makes an open cross-braced rectangular wall.
// SynTags: Geom
// Topics: FDM Optimized, Walls
// See Also: sparse_wall(), corrugated_wall(), thinning_wall(), thinning_triangle(), narrowing_strut()
//
// Usage:
// sparse_wall2d(size, [maxang=], [strut=], [max_bridge=]) [ATTACHMENTS];
//
// Description:
// Makes a 2D open rectangular square with X-shaped cross-bracing, designed to be extruded, to make a strut that reduces
// the need for support material in 3D printing.
//
// Arguments:
// size = The `[X,Y]` size of the outer rectangle.
// ---
// maxang = maximum overhang angle of cross-braces.
// strut = the width of the cross-braces.
// max_bridge = maximum bridging distance between cross-braces.
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
// spin = Rotate this many degrees around the Z axis after anchor. See [spin](attachments.scad#subsection-spin). Default: `0`
//
// See Also: corrugated_wall(), thinning_wall()
//
// Example: Typical Shape
// sparse_wall2d(size=[40,100]);
// Example: Thinner Strut
// sparse_wall2d(size=[40,100], strut=2);
// Example: Larger maxang
// sparse_wall2d(size=[40,100], strut=2, maxang=45);
// Example: Longer max_bridge
// sparse_wall2d(size=[40,100], strut=2, maxang=45, max_bridge=30);
module sparse_wall2d(size=[50,100], maxang=30, strut=5, max_bridge=20, anchor=CENTER, spin=0)
{
h = size.x;
l = size.y;
zoff = h/2 - strut/2;
yoff = l/2 - strut/2;
maxhyp = 1.5 * (max_bridge+strut)/2 / sin(maxang);
maxz = 2 * maxhyp * cos(maxang);
zreps = ceil(2*zoff/maxz);
zstep = 2*zoff / zreps;
hyp = zstep/2 / cos(maxang);
maxy = min(2 * hyp * sin(maxang), max_bridge+strut);
yreps = ceil(2*yoff/maxy);
ystep = 2*yoff / yreps;
ang = atan(ystep/zstep);
len = zstep / cos(ang);
size = [thick, l, h];
attachable(anchor,spin,orient, size=size) {
yrot(90)
linear_extrude(height=thick, convexity=4*yreps, center=true) {
attachable(anchor,spin, two_d=true, size=size) {
union() {
difference() {
square([h, l], center=true);
square([h-2*strut, l-2*strut], center=true);