mirror of
https://github.com/nophead/NopSCADlib.git
synced 2025-09-03 20:32:35 +02:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ede4da6f1d | ||
|
51cc2fd679 | ||
|
4ce2f53e20 | ||
|
e338c47e73 | ||
|
8328a70f42 | ||
|
cc794cd7c3 | ||
|
df28bd5116 | ||
|
61de6041d8 | ||
|
b2d712bca9 | ||
|
f3376edaf1 | ||
|
608168de8e | ||
|
fc45a40bd3 |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -3,6 +3,20 @@
|
||||
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
|
||||
|
||||
|
||||
### [v15.5.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.5.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.4.0...v15.5.0 "diff with v15.4.0")
|
||||
* 2021-04-02 [`cc794cd`](https://github.com/nophead/NopSCADlib/commit/cc794cd7c3cd3e3f63d15ebbe5dabb773812ae72 "show commit") [C.P.](# "Chris Palmer") Updated readme.
|
||||
|
||||
* 2021-03-31 [`fc45a40`](https://github.com/nophead/NopSCADlib/commit/fc45a40bd3c3b524d9edc226952482296e776831 "show commit") [M.B.](# "Martin Budden") Added translated children to pulley.
|
||||
|
||||
### [v15.4.0](https://github.com/nophead/NopSCADlib/releases/tag/v15.4.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v15.3.1...v15.4.0 "diff with v15.3.1")
|
||||
* 2021-04-02 [`b2d712b`](https://github.com/nophead/NopSCADlib/commit/b2d712bca94165a338e5f904880d12f9c4c5ecd0 "show commit") [C.P.](# "Chris Palmer") Added `quadratic_real_roots()` and `cubic_real_roots()`.
|
||||
|
||||
#### [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.
|
||||
|
||||
|
BIN
libtest.png
BIN
libtest.png
Binary file not shown.
Before Width: | Height: | Size: 891 KiB After Width: | Height: | Size: 889 KiB |
24
readme.md
24
readme.md
@@ -2699,7 +2699,7 @@ Timing belt pulleys, both toothed and plain with internal bearings for idlers.
|
||||
### Modules
|
||||
| Module | Description |
|
||||
|:--- |:--- |
|
||||
| `pulley(type, colour = silver)` | Draw a pulley |
|
||||
| `pulley(type, colour = silver)` | Draw a pulley, any children are placed above. |
|
||||
| `pulley_assembly(type, colour = silver)` | Draw a pulley with its grub screws in place |
|
||||
|
||||

|
||||
@@ -2786,26 +2786,35 @@ Linear rails with carriages.
|
||||
### Vitamins
|
||||
| Qty | Module call | BOM entry |
|
||||
| ---:|:--- |:---|
|
||||
| 2 | `rail(MGN12, 200)` | Linear rail MGN12 x 200mm |
|
||||
| 1 | `rail(MGN12, 200)` | Linear rail MGN12 x 200mm |
|
||||
| 1 | `rail(MGN15, 200)` | Linear rail MGN15 x 200mm |
|
||||
| 1 | `rail(MGN5, 200)` | Linear rail MGN5 x 200mm |
|
||||
| 1 | `rail(MGN7, 200)` | Linear rail MGN7 x 200mm |
|
||||
| 1 | `rail(MGN9, 200)` | Linear rail MGN9 x 200mm |
|
||||
| 1 | `rail(SSR15, 200)` | Linear rail SSR15 x 200mm |
|
||||
| 1 | `carriage(MGN12C_carriage)` | Linear rail carriage MGN12C |
|
||||
| 1 | `carriage(MGN12H_carriage)` | Linear rail carriage MGN12H |
|
||||
| 1 | `carriage(MGN15C_carriage)` | Linear rail carriage MGN15C |
|
||||
| 1 | `carriage(MGN5C_carriage)` | Linear rail carriage MGN5C |
|
||||
| 1 | `carriage(MGN7C_carriage)` | Linear rail carriage MGN7C |
|
||||
| 1 | `carriage(MGN7H_carriage)` | Linear rail carriage MGN7H |
|
||||
| 1 | `carriage(MGN9C_carriage)` | Linear rail carriage MGN9C |
|
||||
| 1 | `carriage(MGN9H_carriage)` | Linear rail carriage MGN9H |
|
||||
| 1 | `carriage(SSR15_carriage)` | Linear rail carriage SSR15 |
|
||||
| 26 | `nut(M2_nut, nyloc = true)` | Nut M2 x 1.6mm nyloc |
|
||||
| 31 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 23 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||
| 4 | `nut(M4_nut, nyloc = true)` | Nut M4 x 3.2mm nyloc |
|
||||
| 11 | `screw(M2_cap_screw, 10)` | Screw M2 cap x 10mm |
|
||||
| 15 | `screw(M2_cs_cap_screw, 10)` | Screw M2 cs cap x 10mm |
|
||||
| 8 | `screw(M3_cap_screw, 10)` | Screw M3 cap x 10mm |
|
||||
| 12 | `screw(M3_cap_screw, 12)` | Screw M3 cap x 12mm |
|
||||
| 6 | `screw(M3_cap_screw, 12)` | Screw M3 cap x 12mm |
|
||||
| 3 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
|
||||
| 2 | `screw(M3_cs_cap_screw, 12)` | Screw M3 cs cap x 12mm |
|
||||
| 6 | `screw(M3_cs_cap_screw, 16)` | Screw M3 cs cap x 16mm |
|
||||
| 4 | `screw(M3_cs_cap_screw, 16)` | Screw M3 cs cap x 16mm |
|
||||
| 2 | `screw(M4_cap_screw, 16)` | Screw M4 cap x 16mm |
|
||||
| 2 | `screw(M4_cs_cap_screw, 20)` | Screw M4 cs cap x 20mm |
|
||||
| 26 | `washer(M2_washer)` | Washer M2 x 5mm x 0.3mm |
|
||||
| 31 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 23 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||
| 4 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
|
||||
|
||||
|
||||
@@ -5834,6 +5843,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 |
|
||||
@@ -5841,6 +5851,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 |
|
||||
@@ -5863,6 +5874,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: 154 KiB After Width: | Height: | Size: 152 KiB |
@@ -22,27 +22,36 @@ include <../vitamins/rails.scad>
|
||||
use <../utils/layout.scad>
|
||||
use <../vitamins/nut.scad>
|
||||
|
||||
length = 200;
|
||||
sheet = 3;
|
||||
pos = 1; //[-1 : 0.1 : 1]
|
||||
|
||||
function rail_carriages(rail) = [for(c = carriages) if(carriage_rail(c) == rail) c];
|
||||
|
||||
module rails()
|
||||
layout([for(l = carriages) carriage_width(l)], 20)
|
||||
layout([for(r = rails) carriage_width(rail_carriages(r)[0])], 20)
|
||||
rotate(-90) {
|
||||
carriage = carriages[$i];
|
||||
rail = carriage_rail(carriage);
|
||||
length = 200;
|
||||
rail = rails[$i];
|
||||
carriages = rail_carriages(rail);
|
||||
carriage = carriages[0];
|
||||
screw = rail_screw(rail);
|
||||
nut = screw_nut(screw);
|
||||
washer = screw_washer(screw);
|
||||
|
||||
rail_assembly(carriage, length, pos * carriage_travel(carriage, length) / 2, $i<2 ? grey(20) : "green", $i<2 ? grey(20) : "red");
|
||||
|
||||
if(len(carriages) > 1)
|
||||
translate([-carriage_travel(carriages[1], length) / 2, 0])
|
||||
carriage(carriages[1]);
|
||||
|
||||
rail_screws(rail, length, sheet + nut_thickness(nut, true) + washer_thickness(washer));
|
||||
|
||||
rail_hole_positions(rail, length, 0)
|
||||
translate_z(-sheet)
|
||||
vflip()
|
||||
nut_and_washer(nut, true);
|
||||
|
||||
echo(rail[0], (length - (rail_holes(rail, length) - 1) * rail_pitch(rail)) / 2);
|
||||
}
|
||||
|
||||
if($preview)
|
||||
|
@@ -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];
|
||||
|
@@ -53,7 +53,7 @@ function pulley_extent(type) = max(pulley_flange_dia(type), pulley_hub_dia(type)
|
||||
T_angle = 40;
|
||||
GT_r = 0.555;
|
||||
|
||||
module pulley(type, colour = silver) { //! Draw a pulley
|
||||
module pulley(type, colour = silver) { //! Draw a pulley, any children are placed above.
|
||||
teeth = pulley_teeth(type);
|
||||
od = pulley_od(type);
|
||||
|
||||
@@ -138,6 +138,10 @@ module pulley(type, colour = silver) { //! Draw a pulley
|
||||
else
|
||||
core();
|
||||
}
|
||||
|
||||
if($children)
|
||||
translate_z(pulley_height(type))
|
||||
children();
|
||||
}
|
||||
|
||||
module pulley_assembly(type, colour = silver) { //! Draw a pulley with its grub screws in place
|
||||
|
@@ -37,18 +37,19 @@ function rail_groove_width(type)=type[11]; //! Groove width
|
||||
|
||||
function rail_screw_height(type, screw) = rail_height(type) - rail_bore_depth(type) + screw_head_depth(screw, rail_hole(type)); //! Position screw taking into account countersink into counterbored hole
|
||||
|
||||
function carriage_length(type) = type[0]; //! Overall length
|
||||
function carriage_block_length(type) = type[1]; //! Length of the metal part
|
||||
function carriage_width(type) = type[2]; //! Width of carriage
|
||||
function carriage_height(type) = type[3]; //! Height of carriage
|
||||
function carriage_size(type) = [ type[0], type[2], type[3] ]; //! Size of carriage
|
||||
function carriage_clearance(type) = type[4]; //! Gap under the carriage
|
||||
function carriage_pitch_x(type) = type[5]; //! Screw hole x pitch
|
||||
function carriage_pitch_y(type) = type[6]; //! Screw hole y pitch
|
||||
function carriage_screw(type) = type[7]; //! Carriage screw type
|
||||
function carriage_rail(type) = type[8]; //! Rail type
|
||||
function carriage_length(type) = type[1]; //! Overall length
|
||||
function carriage_block_length(type) = type[2]; //! Length of the metal part
|
||||
function carriage_width(type) = type[3]; //! Width of carriage
|
||||
function carriage_height(type) = type[4]; //! Height of carriage
|
||||
function carriage_clearance(type) = type[5]; //! Gap under the carriage
|
||||
function carriage_pitch_x(type) = type[6]; //! Screw hole x pitch
|
||||
function carriage_pitch_y(type) = type[7]; //! Screw hole y pitch
|
||||
function carriage_screw(type) = type[8]; //! Carriage screw type
|
||||
function carriage_rail(type) = type[9]; //! Rail type
|
||||
|
||||
function carriage_screw_depth(type) = 2 * screw_radius(carriage_screw(type)); //! Carriage thread depth
|
||||
function carriage_travel(type, rail_length) = rail_length - carriage_length(type); //! How far the carriage can travel on a given length rail
|
||||
function carriage_size(type) = [ carriage_length(type), carriage_width(type), carriage_height(type) ]; //! Size of carriage
|
||||
|
||||
function rail_holes(type, length) = //! Number of holes in a rail given its `length`
|
||||
floor((length - 2 * rail_end(type)) / rail_pitch(type)) + 1;
|
||||
@@ -74,6 +75,8 @@ module carriage_hole_positions(type) { //! Position children over screw holes
|
||||
}
|
||||
|
||||
module carriage(type, end_colour = grey(20), wiper_colour = grey(20)) { //! Draw the specified carriage
|
||||
vitamin(str("carriage(", type[0], "_carriage): Linear rail carriage ", type[0]));
|
||||
|
||||
total_l = carriage_length(type);
|
||||
block_l = carriage_block_length(type);
|
||||
block_w = carriage_width(type);
|
||||
|
@@ -30,16 +30,19 @@ SSR15= [ "SSR15", 15, 12.5, 10, 60, 7.5, 4.5, 5.3, M4_cap_screw, M4_cs_cap_
|
||||
//
|
||||
// Carriages
|
||||
//
|
||||
// L L1 W H H1 C B
|
||||
MGN5_carriage = [ 16, 9.6, 12, 6, 1.5, 0, 8, M2_cap_screw, MGN5 ];
|
||||
MGN7C_carriage = [ 23, 14.3, 17, 8, 1.5, 8, 12, M2_cap_screw, MGN7 ];
|
||||
MGN9C_carriage = [ 29.7, 20.8, 20, 10, 2, 10, 15, M3_cap_screw, MGN9 ];
|
||||
MGN12C_carriage = [ 34.7, 21.7, 27, 13, 3, 15, 20, M3_cap_screw, MGN12 ];
|
||||
MGN12H_carriage = [ 45.4, 32.4, 27, 13, 3, 20, 20, M3_cap_screw, MGN12 ];
|
||||
MGN15C_carriage = [ 43.3, 27.7, 32, 16, 4, 20, 25, M3_cap_screw, MGN15 ];
|
||||
SSR15_carriage = [ 40.3, 23.3, 34, 24, 4.5, 0, 26, M4_cap_screw, SSR15 ];
|
||||
// L L1 W H H1 C B
|
||||
MGN5C_carriage = ["MGN5C", 16, 9.6, 12, 6, 1.5, 0, 8, M2_cap_screw, MGN5 ];
|
||||
MGN7C_carriage = ["MGN7C", 23, 14.3, 17, 8, 1.5, 8, 12, M2_cap_screw, MGN7 ];
|
||||
MGN7H_carriage = ["MGN7H", 30.8, 21.8, 17, 8, 1.5,13, 12, M2_cap_screw, MGN7 ];
|
||||
MGN9C_carriage = ["MGN9C", 29.7, 20.8, 20, 10, 2, 10, 15, M3_cap_screw, MGN9 ];
|
||||
MGN9H_carriage = ["MGN9H", 39.9, 29.9, 20, 10, 2, 16, 15, M3_cap_screw, MGN9 ];
|
||||
MGN12C_carriage = ["MGN12C", 34.7, 21.7, 27, 13, 3, 15, 20, M3_cap_screw, MGN12 ];
|
||||
MGN12H_carriage = ["MGN12H", 45.4, 32.4, 27, 13, 3, 20, 20, M3_cap_screw, MGN12 ];
|
||||
MGN15C_carriage = ["MGN15C", 43.3, 27.7, 32, 16, 4, 20, 25, M3_cap_screw, MGN15 ];
|
||||
SSR15_carriage = ["SSR15", 40.3, 23.3, 34, 24, 4.5, 0, 26, M4_cap_screw, SSR15 ];
|
||||
|
||||
rails = [MGN5, MGN7, MGN9, MGN12, MGN15, SSR15];
|
||||
|
||||
carriages = [MGN5_carriage, MGN7C_carriage, MGN9C_carriage, MGN12C_carriage, MGN12H_carriage, MGN15C_carriage, SSR15_carriage];
|
||||
carriages = [MGN5C_carriage, MGN7C_carriage, MGN7H_carriage, MGN9C_carriage, MGN9H_carriage, MGN12C_carriage, MGN12H_carriage, MGN12H_carriage, MGN15C_carriage, SSR15_carriage];
|
||||
|
||||
use <rail.scad>
|
||||
|
Reference in New Issue
Block a user