mirror of
https://github.com/nophead/NopSCADlib.git
synced 2025-09-04 04:35:29 +02:00
Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b2d712bca9 | ||
|
f3376edaf1 | ||
|
c073419c0b | ||
|
52e9c1d7fd | ||
|
ca1b34e9ca | ||
|
cbab9cea02 | ||
|
69cf998862 | ||
|
08bce9ec03 |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -3,6 +3,26 @@
|
||||
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
|
||||
|
||||
|
||||
#### [v15.3.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.3.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.3.0...v15.3.1 "diff with v15.3.0")
|
||||
* 2021-04-02 [`f3376ed`](https://github.com/nophead/NopSCADlib/commit/f3376edaf186b32f442b94d6d0b42f1ba0c7612c "show commit") [C.P.](# "Chris Palmer") Documented `xor()` function.
|
||||
|
||||
### [v15.3.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.3.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.2.0...v15.3.0 "diff with v15.2.0")
|
||||
* 2021-04-02 [`c073419`](https://github.com/nophead/NopSCADlib/commit/c073419c0b4eddcda4cda5bd0f8d48268b6e58ec "show commit") [C.P.](# "Chris Palmer") Added `opengrab_screw_depth()` function.
|
||||
|
||||
### [v15.2.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.2.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.1.1...v15.2.0 "diff with v15.1.1")
|
||||
* 2021-03-22 [`ca1b34e`](https://github.com/nophead/NopSCADlib/commit/ca1b34e9cad5d82bd878fa4ebf439c0fbdad7f77 "show commit") [C.P.](# "Chris Palmer") Added `sink` parameter to `screw_polysink()` to recess the head.
|
||||
|
||||
#### [v15.1.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.1.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.1.0...v15.1.1 "diff with v15.1.0")
|
||||
* 2021-03-22 [`cbab9ce`](https://github.com/nophead/NopSCADlib/commit/cbab9cea028a204032a91729597572a39ed893a2 "show commit") [C.P.](# "Chris Palmer") Fixed `M6_cs_cap_screw`.
|
||||
|
||||
### [v15.1.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.1.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.0.1...v15.1.0 "diff with v15.0.1")
|
||||
* 2021-03-21 [`4aa7dbb`](https://github.com/nophead/NopSCADlib/commit/4aa7dbb416773e42b2b5f77b345f18fcd4d2ae2c "show commit") [C.P.](# "Chris Palmer") Added `M6_cs_cap_screw`.
|
||||
|
||||
#### [v15.0.1](https://github.com/nophead/NopSCADlib/releases/tag/v15.0.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v15.0.0...v15.0.1 "diff with v15.0.0")
|
||||
* 2021-03-21 [`7c7c2e5`](https://github.com/nophead/NopSCADlib/commit/7c7c2e5d3f76e84ae86892f9d90f21619fa61a47 "show commit") [C.P.](# "Chris Palmer") Pixel changes due to switch to summer computer.
|
||||
|
||||
* 2021-03-15 [`f6f6664`](https://github.com/nophead/NopSCADlib/commit/f6f6664c0d06a7cc3d49f805a2fd4f4978a3a35a "show commit") [C.P.](# "Chris Palmer") Updated OpenSCAD version required.
|
||||
|
||||
## [v15.0.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.0.0 "show release") Breaking Changes [...](https://github.com/nophead/NopSCADlib/compare/v14.1.1...v15.0.0 "diff with v14.1.1")
|
||||
* 2021-03-14 [`9ded315`](https://github.com/nophead/NopSCADlib/commit/9ded3158010b577088fdaca8a25e478f48a27376 "show commit") [C.P.](# "Chris Palmer") Removed the belt gap options and changed the tests to use open loops instead.
|
||||
Note previous belt lengths were incorrect with negative turns.
|
||||
|
@@ -2030,6 +2030,7 @@ A permanent magnet that can be magnatized and de-magnatized electronically.
|
||||
| `opengrab_depth()` | Module height |
|
||||
| `opengrab_pcb()` | The PCB |
|
||||
| `opengrab_pcb_z()` | PCB offset from the front |
|
||||
| `opengrab_screw_depth()` | Max screw depth in pillars |
|
||||
| `opengrab_target_thickness()` | Target sheet thickness |
|
||||
| `opengrab_width()` | Module width |
|
||||
|
||||
@@ -3005,7 +3006,7 @@ For an explanation of `screw_polysink()` see <https://hydraraptor.blogspot.com/2
|
||||
| `screw(type, length, hob_point = 0, nylon = false)` | Draw specified screw, optionally hobbed or nylon |
|
||||
| `screw_and_washer(type, length, star = false, penny = false)` | Screw with a washer which can be standard or penny and an optional star washer on top |
|
||||
| `screw_countersink(type, drilled = true)` | Countersink shape |
|
||||
| `screw_polysink(type, h = 100, alt = false)` | A countersink hole made from stacked polyholes for printed parts |
|
||||
| `screw_polysink(type, h = 100, alt = false, sink = 0)` | A countersink hole made from stacked polyholes for printed parts, default is flush, `sink` can be used to recess the head |
|
||||
|
||||

|
||||
|
||||
@@ -5833,6 +5834,7 @@ Maths utilities for manipulating vectors and matrices.
|
||||
| `circle_intersect(c1, r1, c2, r2)` | Calculate one point where two circles in the X-Z plane intersect, clockwise around c1 |
|
||||
| `cosh(x)` | hyperbolic cosine |
|
||||
| `coth(x)` | hyperbolic cotangent |
|
||||
| `cubic_real_roots(a, b, c, d)` | Returns real roots of cubic equation |
|
||||
| `degrees(radians)` | Convert degrees to radians |
|
||||
| `euler(R)` | Convert a rotation matrix to a Euler rotation vector. |
|
||||
| `identity(n, x = 1)` | Construct an arbitrary size identity matrix |
|
||||
@@ -5840,6 +5842,7 @@ Maths utilities for manipulating vectors and matrices.
|
||||
| `map(v, func)` | make a new vector where the func function argument is applied to each element of the vector v |
|
||||
| `mapi(v, func)` | make a new vector where the func function argument is applied to each element of the vector v. The func will get the index number as first argument, and the element as second argument. |
|
||||
| `nearly_zero(x)` | True if x is close to zero |
|
||||
| `quadratic_real_roots(a, b, c)` | Returns real roots of a quadratic equation, biggest first. Returns empty list if no real roots |
|
||||
| `radians(degrees)` | Convert radians to degrees |
|
||||
| `reduce(v, func, unity)` | reduce a vector v to a single entity by applying the func function recursively to the reduced value so far and the next element, starting with unity as the initial reduced value |
|
||||
| `reverse(v)` | Reverse a vector |
|
||||
@@ -5862,6 +5865,7 @@ Maths utilities for manipulating vectors and matrices.
|
||||
| `vec2(v)` | Return a 2 vector with the first two elements of `v` |
|
||||
| `vec3(v)` | Return a 3 vector with the first three elements of `v` |
|
||||
| `vec4(v)` | Return a 4 vector with the first three elements of `v` |
|
||||
| `xor(a,b)` | Logical exclusive OR |
|
||||
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
@@ -16,6 +16,10 @@
|
||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||
// If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
// Extra countersink depth
|
||||
sink = 0; // [0 : 0.05: 1.0]
|
||||
|
||||
include <../core.scad>
|
||||
|
||||
module polysink_stl() {
|
||||
@@ -32,9 +36,9 @@ module polysink_stl() {
|
||||
let(s = cs_screws[i])
|
||||
translate([i * 20, 0]) {
|
||||
translate_z(size.z)
|
||||
screw_polysink(s, 2 * size.z + 1);
|
||||
screw_polysink(s, 2 * size.z + 1, sink = sink);
|
||||
|
||||
screw_polysink(s, 2 * size.z + 1, alt = true);
|
||||
screw_polysink(s, 2 * size.z + 1, alt = true, sink = sink);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -160,4 +160,30 @@ function mapi(v, func) = [ for (i = [0:len(v)-1]) func(i,v[i]) ]; //! make a new
|
||||
function reduce(v, func, unity) = let ( r = function(i,val) i == len(v) ? val : r(i + 1, func(val, v[i])) ) r(0, unity); //! reduce a vector v to a single entity by applying the func function recursively to the reduced value so far and the next element, starting with unity as the initial reduced value
|
||||
function sumv(v) = reduce(v, function(a, b) a + b, 0); //! sum a vector of values that can be added with "+"
|
||||
|
||||
function xor(a,b) = (a && !b) || (!a && b);
|
||||
function xor(a,b) = (a && !b) || (!a && b); //! Logical exclusive OR
|
||||
function cuberoot(x)= sign(x)*abs(x)^(1/3);
|
||||
|
||||
function quadratic_real_roots(a, b, c) = //! Returns real roots of a quadratic equation, biggest first. Returns empty list if no real roots
|
||||
let(2a = 2 * a,
|
||||
2c = 2 * c,
|
||||
det = b^2 - 2a * 2c
|
||||
) det < 0 ? [] :
|
||||
let(r = sqrt(det),
|
||||
x1 = b < 0 ? 2c / (-b + r) : (-b - r) / 2a,
|
||||
x2 = b < 0 ? (-b + r) / 2a : 2c / (-b - r)
|
||||
) [x2, x1];
|
||||
|
||||
function cubic_real_roots(a, b, c, d) = //! Returns real roots of cubic equation
|
||||
let(b = b / a,
|
||||
c = c / a,
|
||||
d = d / a,
|
||||
inflection = -b / 3,
|
||||
p = c - b^2 / 3,
|
||||
q = 2 * b^3 / 27 - b * c / 3 + d,
|
||||
det = q^2 / 4 + p^3 / 27,
|
||||
roots = !p && !q ? 1 : nearly_zero(det) ? 2 : det < 0 ? 3 : 1,
|
||||
r = sqrt(det),
|
||||
x = cuberoot(-q / 2 - r) + cuberoot(-q / 2 + r)
|
||||
) roots == 1 ? [x] :
|
||||
roots == 2 ? [3 * q /p + inflection, -3 * q / p / 2 + inflection] :
|
||||
[for(i = [0 : roots - 1]) 2 * sqrt(-p / 3) * cos(acos(3 * q * sqrt(-3 / p) / p / 2) - i * 120) + inflection];
|
||||
|
@@ -62,6 +62,7 @@ function opengrab_depth() = depth; //! Module heig
|
||||
function opengrab_target_thickness() = target; //! Target sheet thickness
|
||||
function opengrab_pcb() = pcb; //! The PCB
|
||||
function opengrab_pcb_z() = depth - pillar - pcb_thickness(pcb); //! PCB offset from the front
|
||||
function opengrab_screw_depth() = 4; //! Max screw depth in pillars
|
||||
|
||||
module opengrab() { //! Draw OpenGrab module
|
||||
vitamin("opengrab(): OpenGrab V3 electro permanent magnet");
|
||||
|
@@ -284,10 +284,10 @@ function screw_polysink_r(type, z) = //! Countersink hole profile corrected for
|
||||
)
|
||||
limit(head_rad + head_t - z + (sqrt(2) - 1) * layer_height / 2, screw_clearance_radius(type), head_rad);
|
||||
|
||||
module screw_polysink(type, h = 100, alt = false) { //! A countersink hole made from stacked polyholes for printed parts
|
||||
module screw_polysink(type, h = 100, alt = false, sink = 0) { //! A countersink hole made from stacked polyholes for printed parts, default is flush, `sink` can be used to recess the head
|
||||
head_depth = screw_head_depth(type);
|
||||
assert(head_depth, "Not a countersunk screw");
|
||||
layers = ceil(head_depth / layer_height);
|
||||
layers = ceil((head_depth + sink) / layer_height);
|
||||
rmin = screw_clearance_radius(type);
|
||||
sides = sides(rmin);
|
||||
lh = layer_height + eps;
|
||||
@@ -295,7 +295,7 @@ module screw_polysink(type, h = 100, alt = false) { //! A countersink hole made
|
||||
for(side = [0, 1]) mirror([0, 0, side]) {
|
||||
for(i = [0 : layers - 1])
|
||||
translate_z(i * layer_height) {
|
||||
r = screw_polysink_r(type, i * layer_height + layer_height / 2);
|
||||
r = screw_polysink_r(type, i * layer_height + layer_height / 2 - sink);
|
||||
if(alt)
|
||||
rotate(i % 2 == layers % 2 ? 180 / sides : 0)
|
||||
poly_cylinder(r = r, h = lh, center = false, sides = sides);
|
||||
|
@@ -79,7 +79,7 @@ M2_cs_cap_screw = ["M2_cs_cap","M2 cs cap", hs_cs_cap,2, 3.8, 0, 0.65,1.3
|
||||
M3_cs_cap_screw = ["M3_cs_cap","M3 cs cap", hs_cs_cap,3, 6.0, 0, 1.05,2.0, 18, M3_washer, M3_nut, M3_tap_radius, M3_clearance_radius];
|
||||
M4_cs_cap_screw = ["M4_cs_cap","M4 cs cap", hs_cs_cap,4, 8.0, 0, 1.49,2.5, 20, M4_washer, M4_nut, M4_tap_radius, M4_clearance_radius];
|
||||
M5_cs_cap_screw = ["M5_cs_cap","M5 cs cap", hs_cs_cap,5,10.0, 0, 3.00,3.0, 22, M5_washer, M5_nut, M5_tap_radius, M5_clearance_radius];
|
||||
M6_cs_cap_screw = ["M6_cs_cap","M6 cs cap", hs_cs_cap,6,12.0, 0, 4.00,4.0, 24, M6_washer, M6_nut, M6_tap_radius, M6_clearance_radius];
|
||||
M6_cs_cap_screw = ["M6_cs_cap","M6 cs cap", hs_cs_cap,6,12.0, 0, 3.00,4.0, 24, M6_washer, M6_nut, M6_tap_radius, M6_clearance_radius];
|
||||
|
||||
M2_dome_screw = ["M2_dome", "M2 dome", hs_dome, 2, 3.5, 1.3, 0.6, 1.3, 16, M2_washer, M2_nut, M2_tap_radius, M2_clearance_radius];
|
||||
M3_dome_screw = ["M3_dome", "M3 dome", hs_dome, 3, 5.7, 1.65, 1.04,2.0, 18, M3_washer, M3_nut, M3_tap_radius, M3_clearance_radius];
|
||||
|
Reference in New Issue
Block a user