mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2024-12-29 16:29:40 +00:00
wiring.scad docs cleanup.
This commit is contained in:
parent
56edc3bda5
commit
dd4b67a057
1 changed files with 43 additions and 51 deletions
94
wiring.scad
94
wiring.scad
|
@ -1,6 +1,6 @@
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// LibFile: wiring.scad
|
// LibFile: wiring.scad
|
||||||
// Rendering for wiring bundles
|
// Rendering for wire bundles
|
||||||
// Includes:
|
// Includes:
|
||||||
// include <BOSL2/std.scad>
|
// include <BOSL2/std.scad>
|
||||||
// include <BOSL2/wiring.scad>
|
// include <BOSL2/wiring.scad>
|
||||||
|
@ -10,51 +10,42 @@
|
||||||
|
|
||||||
include <rounding.scad>
|
include <rounding.scad>
|
||||||
|
|
||||||
// Section: Functions
|
|
||||||
|
/// Function: _hex_offset_ring()
|
||||||
|
/// Usage:
|
||||||
|
/// _hex_offset_ring(d, lev)
|
||||||
|
/// Description:
|
||||||
|
/// Returns a hexagonal ring of points, with a spacing of `d`.
|
||||||
|
/// If `lev=0`, returns a single point at `[0,0]`. All greater
|
||||||
|
/// levels return `6 * lev` points.
|
||||||
|
/// Arguments:
|
||||||
|
/// d = Base unit diameter to build rings upon.
|
||||||
|
/// lev = How many rings to produce.
|
||||||
|
/// Example:
|
||||||
|
/// _hex_offset_ring(d=1, lev=3); // Returns a hex ring of 18 points.
|
||||||
|
function _hex_offset_ring(d, lev=0) =
|
||||||
|
(lev == 0)? [[0,0]] :
|
||||||
|
subdivide_path(reverse(hexagon(r=lev*d)), refine=lev);
|
||||||
|
|
||||||
|
|
||||||
// Function: hex_offset_ring()
|
/// Function: _hex_offsets()
|
||||||
// Description:
|
/// Usage:
|
||||||
// Returns a hexagonal ring of points, with a spacing of `d`.
|
/// _hex_offsets(n, d)
|
||||||
// If `lev=0`, returns a single point at `[0,0]`. All greater
|
/// Description:
|
||||||
// levels return 6 times `lev` points.
|
/// Returns the centerpoints for the optimal hexagonal packing
|
||||||
// Usage:
|
/// of at least `n` circular items, of diameter `d`. Will return
|
||||||
// hex_offset_ring(d, lev)
|
/// enough points to fill out the last ring, even if that is more
|
||||||
// Arguments:
|
/// than `n` points.
|
||||||
// d = Base unit diameter to build rings upon.
|
/// Arguments:
|
||||||
// lev = How many rings to produce.
|
/// n = Number of items to bundle.
|
||||||
// Example:
|
/// d = How far to space each point away from others.
|
||||||
// hex_offset_ring(d=1, lev=3); // Returns a hex ring of 18 points.
|
function _hex_offsets(n, d, lev=0, arr=[]) =
|
||||||
function hex_offset_ring(d, lev=0) =
|
|
||||||
(lev == 0)? [[0,0]] : [
|
|
||||||
for (
|
|
||||||
sideang = [0:60:359.999],
|
|
||||||
sidenum = [1:1:lev]
|
|
||||||
) [
|
|
||||||
lev*d*cos(sideang)+sidenum*d*cos(sideang+120),
|
|
||||||
lev*d*sin(sideang)+sidenum*d*sin(sideang+120)
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
// Function: hex_offsets()
|
|
||||||
// Description:
|
|
||||||
// Returns the centerpoints for the optimal hexagonal packing
|
|
||||||
// of at least `n` circular items, of diameter `d`. Will return
|
|
||||||
// enough points to fill out the last ring, even if that is more
|
|
||||||
// than `n` points.
|
|
||||||
// Usage:
|
|
||||||
// hex_offsets(n, d)
|
|
||||||
// Arguments:
|
|
||||||
// n = Number of items to bundle.
|
|
||||||
// d = How far to space each point away from others.
|
|
||||||
function hex_offsets(n, d, lev=0, arr=[]) =
|
|
||||||
(len(arr) >= n)? arr :
|
(len(arr) >= n)? arr :
|
||||||
hex_offsets(
|
_hex_offsets(
|
||||||
n=n,
|
n=n,
|
||||||
d=d,
|
d=d,
|
||||||
lev=lev+1,
|
lev=lev+1,
|
||||||
arr=concat(arr, hex_offset_ring(d, lev=lev))
|
arr=concat(arr, _hex_offset_ring(d, lev=lev))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,23 +53,25 @@ function hex_offsets(n, d, lev=0, arr=[]) =
|
||||||
// Section: Modules
|
// Section: Modules
|
||||||
|
|
||||||
|
|
||||||
// Module: wiring()
|
// Module: wire_bundle()
|
||||||
|
// Usage:
|
||||||
|
// wire_bundle(path, wires, [wirediam], [rounding], [wirenum=], [corner_steps=]);
|
||||||
// Description:
|
// Description:
|
||||||
// Returns a 3D object representing a bundle of wires that follow a given path,
|
// Returns a 3D object representing a bundle of wires that follow a given path,
|
||||||
// with the corners rounded to a given radius. There are 17 base wire colors.
|
// with the corners rounded to a given radius. There are 17 base wire colors.
|
||||||
// If you have more than 17 wires, colors will get re-used.
|
// If you have more than 17 wires, colors will get re-used.
|
||||||
// Usage:
|
|
||||||
// wiring(path, wires, [wirediam], [rounding], [wirenum], [bezsteps]);
|
|
||||||
// Arguments:
|
// Arguments:
|
||||||
// path = The 3D path that the wire bundle should follow.
|
// path = The 3D path that the wire bundle should follow.
|
||||||
// wires = The number of wires in the wiring bundle.
|
// wires = The number of wires in the wire bundle.
|
||||||
// wirediam = The diameter of each wire in the bundle.
|
// wirediam = The diameter of each wire in the bundle.
|
||||||
// rounding = The radius that the path corners will be rounded to.
|
// rounding = The radius that the path corners will be rounded to.
|
||||||
|
// ---
|
||||||
// wirenum = The first wire's offset into the color table.
|
// wirenum = The first wire's offset into the color table.
|
||||||
// corner_steps = The corner roundings in the path will be converted into this number of segments.
|
// corner_steps = The corner roundings in the path will be converted into this number of segments.
|
||||||
// Example:
|
// Example:
|
||||||
// wiring([[50,0,-50], [50,50,-50], [0,50,-50], [0,0,-50], [0,0,0]], rounding=10, wires=13);
|
// wire_bundle([[50,0,-50], [50,50,-50], [0,50,-50], [0,0,-50], [0,0,0]], rounding=10, wires=13);
|
||||||
module wiring(path, wires, wirediam=2, rounding=10, wirenum=0, corner_steps=12) {
|
module wire_bundle(path, wires, wirediam=2, rounding=10, wirenum=0, corner_steps=15) {
|
||||||
|
no_children($children);
|
||||||
colors = [
|
colors = [
|
||||||
[0.2, 0.2, 0.2], [1.0, 0.2, 0.2], [0.0, 0.8, 0.0], [1.0, 1.0, 0.2],
|
[0.2, 0.2, 0.2], [1.0, 0.2, 0.2], [0.0, 0.8, 0.0], [1.0, 1.0, 0.2],
|
||||||
[0.3, 0.3, 1.0], [1.0, 1.0, 1.0], [0.7, 0.5, 0.0], [0.5, 0.5, 0.5],
|
[0.3, 0.3, 1.0], [1.0, 1.0, 1.0], [0.7, 0.5, 0.0], [0.5, 0.5, 0.5],
|
||||||
|
@ -86,12 +79,11 @@ module wiring(path, wires, wirediam=2, rounding=10, wirenum=0, corner_steps=12)
|
||||||
[1.0, 0.5, 1.0], [0.5, 0.6, 0.0], [1.0, 0.7, 0.0], [0.7, 1.0, 0.5],
|
[1.0, 0.5, 1.0], [0.5, 0.6, 0.0], [1.0, 0.7, 0.0], [0.7, 1.0, 0.5],
|
||||||
[0.6, 0.6, 1.0],
|
[0.6, 0.6, 1.0],
|
||||||
];
|
];
|
||||||
offsets = hex_offsets(wires, wirediam);
|
sides = max(segs(wirediam/2), 8);
|
||||||
rounded_path = round_corners(path, radius=rounding,$fn=(corner_steps+1)*4,closed=false);
|
offsets = _hex_offsets(wires, wirediam);
|
||||||
n = max(segs(wirediam), 8);
|
rounded_path = round_corners(path, radius=rounding, $fn=(corner_steps+1)*4, closed=false);
|
||||||
r = wirediam/2;
|
|
||||||
for (i = [0:1:wires-1]) {
|
for (i = [0:1:wires-1]) {
|
||||||
extpath = [for (j = [0:1:n-1]) let(a=j*360/n) [r*cos(a)+offsets[i][0], r*sin(a)+offsets[i][1]]];
|
extpath = move(offsets[i], p=circle(d=wirediam, $fn=sides));
|
||||||
color(colors[(i+wirenum)%len(colors)]) {
|
color(colors[(i+wirenum)%len(colors)]) {
|
||||||
path_sweep(extpath, rounded_path);
|
path_sweep(extpath, rounded_path);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue