mirror of
https://github.com/nophead/NopSCADlib.git
synced 2025-09-26 06:59:01 +02:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1dbfafd366 | ||
|
68b3dfb098 | ||
|
25dceee20a | ||
|
d70ddf5359 | ||
|
70b60522ce | ||
|
ecba7eaea4 | ||
|
f751dd9a73 | ||
|
3f359f6839 | ||
|
3e5947c161 | ||
|
17ebf36e27 |
BIN
libtest.png
BIN
libtest.png
Binary file not shown.
Before Width: | Height: | Size: 839 KiB After Width: | Height: | Size: 848 KiB |
@@ -52,6 +52,7 @@ use <tests/circlips.scad>
|
|||||||
use <tests/components.scad>
|
use <tests/components.scad>
|
||||||
use <tests/d_connectors.scad>
|
use <tests/d_connectors.scad>
|
||||||
use <tests/displays.scad>
|
use <tests/displays.scad>
|
||||||
|
use <tests/drag_chain.scad>
|
||||||
use <tests/extrusions.scad>
|
use <tests/extrusions.scad>
|
||||||
use <tests/extrusion_brackets.scad>
|
use <tests/extrusion_brackets.scad>
|
||||||
use <tests/fans.scad>
|
use <tests/fans.scad>
|
||||||
@@ -417,8 +418,12 @@ translate([x4 + 200, belts_y + 58]) {
|
|||||||
|
|
||||||
translate([0, 60])
|
translate([0, 60])
|
||||||
opengrab_test();
|
opengrab_test();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
translate([x4 + 175, belts_y, -20])
|
||||||
|
drag_chains();
|
||||||
|
|
||||||
translate([x4, rails_y + 130])
|
translate([x4, rails_y + 130])
|
||||||
rails();
|
rails();
|
||||||
|
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
//!
|
//!
|
||||||
//! Each link has a maximum bend angle of 45°, so the mininium radius is proportional to the link length.
|
//! Each link has a maximum bend angle of 45°, so the mininium radius is proportional to the link length.
|
||||||
//!
|
//!
|
||||||
//! The travel prpoery is how far it can move in each direction, i.e. half the maximum travel if the chain is mounted in the middle of the travel.
|
//! The travel property is how far it can move in each direction, i.e. half the maximum travel if the chain is mounted in the middle of the travel.
|
||||||
//
|
//
|
||||||
|
|
||||||
include <../core.scad>
|
include <../core.scad>
|
||||||
|
@@ -117,9 +117,13 @@ module ribbon_clamp_fastened_assembly(ways, thickness, screw = screw) { //! Clam
|
|||||||
|
|
||||||
module ribbon_clamp_20_stl() ribbon_clamp(20);
|
module ribbon_clamp_20_stl() ribbon_clamp(20);
|
||||||
module ribbon_clamp_8_2_stl() ribbon_clamp(8, M2_dome_screw);
|
module ribbon_clamp_8_2_stl() ribbon_clamp(8, M2_dome_screw);
|
||||||
|
module ribbon_clamp_7_2_stl() ribbon_clamp(8, M2_dome_screw);
|
||||||
|
|
||||||
//! * Place inserts into the holes and press home with a soldering iron with a conical bit heated to 200°C.
|
//! * Place inserts into the holes and press home with a soldering iron with a conical bit heated to 200°C.
|
||||||
module ribbon_clamp_20_assembly() ribbon_clamp_assembly(20);
|
module ribbon_clamp_20_assembly() ribbon_clamp_assembly(20);
|
||||||
|
|
||||||
//! * Place inserts into the holes and press home with a soldering iron with a conical bit heated to 200°C.
|
//! * Place inserts into the holes and press home with a soldering iron with a conical bit heated to 200°C.
|
||||||
module ribbon_clamp_8_2_assembly() ribbon_clamp_assembly(8, M2_dome_screw);
|
module ribbon_clamp_8_2_assembly() ribbon_clamp_assembly(8, M2_dome_screw);
|
||||||
|
|
||||||
|
//! * Place inserts into the holes and press home with a soldering iron with a conical bit heated to 200°C.
|
||||||
|
module ribbon_clamp_7_2_assembly() ribbon_clamp_assembly(8, M2_dome_screw);
|
||||||
|
16
readme.md
16
readme.md
@@ -296,11 +296,18 @@ Models of radial blowers.
|
|||||||
| ```blower_wall(type)``` | Side wall thickness |
|
| ```blower_wall(type)``` | Side wall thickness |
|
||||||
| ```blower_width(type)``` | Width of enclosing rectangle |
|
| ```blower_width(type)``` | Width of enclosing rectangle |
|
||||||
|
|
||||||
|
### Functions
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```blower_casing_is_square(type)``` | True for square radial fans, false for spiral shape radial blowers |
|
||||||
|
| ```blower_exit_offset(type)``` | Offset of exit's centre from the edge |
|
||||||
|
|
||||||
### Modules
|
### Modules
|
||||||
| Module | Description |
|
| Module | Description |
|
||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```blower(type)``` | Draw specified blower |
|
| ```blower(type)``` | Draw specified blower |
|
||||||
| ```blower_hole_positions(type)``` | Translate children to screw hole positions |
|
| ```blower_hole_positions(type)``` | Translate children to screw hole positions |
|
||||||
|
| ```blower_square(type)``` | Draw a square blower |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -309,8 +316,11 @@ Models of radial blowers.
|
|||||||
| ---:|:--- |:---|
|
| ---:|:--- |:---|
|
||||||
| 1 | ```blower(PE4020)``` | Blower Pengda Technology 4020 |
|
| 1 | ```blower(PE4020)``` | Blower Pengda Technology 4020 |
|
||||||
| 1 | ```blower(RB5015)``` | Blower Runda RB5015 |
|
| 1 | ```blower(RB5015)``` | Blower Runda RB5015 |
|
||||||
|
| 4 | ```screw(M2_cap_screw, 8)``` | Screw M2 cap x 8mm |
|
||||||
| 3 | ```screw(M3_cap_screw, 20)``` | Screw M3 cap x 20mm |
|
| 3 | ```screw(M3_cap_screw, 20)``` | Screw M3 cap x 20mm |
|
||||||
| 2 | ```screw(M4_cap_screw, 25)``` | Screw M4 cap x 25mm |
|
| 2 | ```screw(M4_cap_screw, 25)``` | Screw M4 cap x 25mm |
|
||||||
|
| 1 | ```blower(BL40x10)``` | Square radial 4010 |
|
||||||
|
| 4 | ```washer(M2_washer)``` | Washer M2 x 5mm x 0.3mm |
|
||||||
| 3 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
| 3 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
||||||
| 2 | ```washer(M4_washer)``` | Washer M4 x 9mm x 0.8mm |
|
| 2 | ```washer(M4_washer)``` | Washer M4 x 9mm x 0.8mm |
|
||||||
|
|
||||||
@@ -4548,7 +4558,7 @@ Parametric cable drag chain to limit the bend radius of a cable run.
|
|||||||
|
|
||||||
Each link has a maximum bend angle of 45°, so the mininium radius is proportional to the link length.
|
Each link has a maximum bend angle of 45°, so the mininium radius is proportional to the link length.
|
||||||
|
|
||||||
The travel prpoery is how far it can move in each direction, i.e. half the maximum travel if the chain is mounted in the middle of the travel.
|
The travel property is how far it can move in each direction, i.e. half the maximum travel if the chain is mounted in the middle of the travel.
|
||||||
|
|
||||||
|
|
||||||
[printed/drag_chain.scad](printed/drag_chain.scad) Implementation.
|
[printed/drag_chain.scad](printed/drag_chain.scad) Implementation.
|
||||||
@@ -6047,11 +6057,11 @@ Global constants, functions and modules. This file is used directly or indirectl
|
|||||||
| ```circle4n(r, d = undef)``` | Circle with multiple of 4 vertices |
|
| ```circle4n(r, d = undef)``` | Circle with multiple of 4 vertices |
|
||||||
| ```ellipse(xr, yr)``` | Draw an ellipse |
|
| ```ellipse(xr, yr)``` | Draw an ellipse |
|
||||||
| ```extrude_if(h, center = true)``` | Extrudes 2D object to 3D when ```h``` is nonzero, otherwise leaves it 2D |
|
| ```extrude_if(h, center = true)``` | Extrudes 2D object to 3D when ```h``` is nonzero, otherwise leaves it 2D |
|
||||||
| ```hflip()``` | Invert children by doing a 180° flip around the Y axis |
|
| ```hflip(flip=true)``` | Invert children by doing a 180° flip around the Y axis |
|
||||||
| ```right_triangle(width, height, h, center = true)``` | A right angled triangle with the 90° corner at the origin. 3D when ```h``` is nonzero, otherwise 2D |
|
| ```right_triangle(width, height, h, center = true)``` | A right angled triangle with the 90° corner at the origin. 3D when ```h``` is nonzero, otherwise 2D |
|
||||||
| ```semi_circle(r, d = undef)``` | A semi circle in the positive Y domain |
|
| ```semi_circle(r, d = undef)``` | A semi circle in the positive Y domain |
|
||||||
| ```translate_z(z)``` | Shortcut for Z only translations |
|
| ```translate_z(z)``` | Shortcut for Z only translations |
|
||||||
| ```vflip()``` | Invert children by doing a 180° flip around the X axis |
|
| ```vflip(flip=true)``` | Invert children by doing a 180° flip around the X axis |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@@ -39,7 +39,7 @@ module belt_test() {
|
|||||||
screw = find_screw(hs_cs_cap, pulley_bore(pulley));
|
screw = find_screw(hs_cs_cap, pulley_bore(pulley));
|
||||||
insert = screw_insert(screw);
|
insert = screw_insert(screw);
|
||||||
|
|
||||||
rotate([0, flip ? 180 : 0, 0]) {
|
hflip(flip) {
|
||||||
pulley_assembly(pulley);
|
pulley_assembly(pulley);
|
||||||
translate_z(pulley_height(pulley) + pulley_offset(pulley) + screw_head_depth(screw, pulley_bore(pulley)))
|
translate_z(pulley_height(pulley) + pulley_offset(pulley) + screw_head_depth(screw, pulley_bore(pulley)))
|
||||||
screw(screw, 20);
|
screw(screw, 20);
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 49 KiB |
Binary file not shown.
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 106 KiB |
@@ -39,8 +39,8 @@ function r2sides4n(r) = floor((r2sides(r) + 3) / 4) * 4;
|
|||||||
function limit(x, min, max) = max(min(x, max), min); //! Force x in range min <= x <= max
|
function limit(x, min, max) = max(min(x, max), min); //! Force x in range min <= x <= max
|
||||||
|
|
||||||
module translate_z(z) translate([0, 0, z]) children(); //! Shortcut for Z only translations
|
module translate_z(z) translate([0, 0, z]) children(); //! Shortcut for Z only translations
|
||||||
module vflip() rotate([180, 0, 0]) children(); //! Invert children by doing a 180° flip around the X axis
|
module vflip(flip=true) rotate([flip ? 180 : 0, 0, 0]) children(); //! Invert children by doing a 180° flip around the X axis
|
||||||
module hflip() rotate([0, 180, 0]) children(); //! Invert children by doing a 180° flip around the Y axis
|
module hflip(flip=true) rotate([0, flip ? 180: 0, 0]) children(); //! Invert children by doing a 180° flip around the Y axis
|
||||||
module ellipse(xr, yr) scale([1, yr / xr]) circle4n(xr); //! Draw an ellipse
|
module ellipse(xr, yr) scale([1, yr / xr]) circle4n(xr); //! Draw an ellipse
|
||||||
|
|
||||||
function slice_str(str, start, end, s ="") = start >= end ? s : slice_str(str, start + 1, end, str(s, str[start])); // Helper for slice()
|
function slice_str(str, start, end, s ="") = start >= end ? s : slice_str(str, start + 1, end, str(s, str[start])); // Helper for slice()
|
||||||
|
@@ -22,6 +22,8 @@
|
|||||||
//
|
//
|
||||||
include <../utils/core/core.scad>
|
include <../utils/core/core.scad>
|
||||||
use <../utils/rounded_cylinder.scad>
|
use <../utils/rounded_cylinder.scad>
|
||||||
|
use <../utils/quadrant.scad>
|
||||||
|
use <screw.scad>
|
||||||
|
|
||||||
function blower_length(type) = type[2]; //! Length of enclosing rectangle
|
function blower_length(type) = type[2]; //! Length of enclosing rectangle
|
||||||
function blower_width(type) = type[3]; //! Width of enclosing rectangle
|
function blower_width(type) = type[3]; //! Width of enclosing rectangle
|
||||||
@@ -39,8 +41,87 @@ function blower_top(type) = type[14]; //! Thickness of the top
|
|||||||
function blower_wall(type) = type[15]; //! Side wall thickness
|
function blower_wall(type) = type[15]; //! Side wall thickness
|
||||||
function blower_lug(type) = type[16]; //! Height of the lugs
|
function blower_lug(type) = type[16]; //! Height of the lugs
|
||||||
|
|
||||||
|
function blower_casing_is_square(type) = len(blower_screw_holes(type)) > 3; //! True for square radial fans, false for spiral shape radial blowers
|
||||||
|
function blower_exit_offset(type) = blower_casing_is_square(type) ? blower_length(type) / 2 : blower_exit(type) / 2; //! Offset of exit's centre from the edge
|
||||||
|
|
||||||
fan_colour = grey(20);
|
fan_colour = grey(20);
|
||||||
|
|
||||||
|
module blower_fan(type, casing_is_square) {
|
||||||
|
module squarish(s, n) {
|
||||||
|
polygon([
|
||||||
|
for(i = [0 : n]) [i * s.x / n, s.y + (i % 2) * eps],
|
||||||
|
for(i = [0 : n]) [s.x - i * s.x / n, (i % 2) * eps],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
depth = blower_depth(type);
|
||||||
|
blade_ir = blower_hub(type) / 2 + 0.5; // slight gap between main part of blades and hub
|
||||||
|
blade_len = casing_is_square
|
||||||
|
? (blower_bore(type) - 1) / 2 - blade_ir // fan constrained by bore hole
|
||||||
|
: blower_width(type) - blower_axis(type).x- blower_wall(type) - blade_ir; // fan extends to casing
|
||||||
|
blade_thickness = 0.75;
|
||||||
|
blade_count = 25;
|
||||||
|
|
||||||
|
base_offset = 1;
|
||||||
|
translate([blower_axis(type).x, blower_axis(type).y, blower_base(type) + base_offset])
|
||||||
|
linear_extrude(blower_hub_height(type) - 0.5 - blower_base(type) - base_offset, center = false, convexity = 4, twist = -30, slices = round(depth / 2))
|
||||||
|
for(i = [0 : blade_count - 1])
|
||||||
|
rotate((360 * i) / blade_count)
|
||||||
|
translate([blade_ir, -blade_thickness / 2])
|
||||||
|
squarish([blade_len, blade_thickness], round(blade_len / 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
module blower_square(type) { //! Draw a square blower
|
||||||
|
width = blower_width(type);
|
||||||
|
depth = blower_depth(type);
|
||||||
|
wall = blower_wall(type);
|
||||||
|
hole_pitch = (blower_screw_holes(type)[1].x - blower_screw_holes(type)[0].x) / 2;
|
||||||
|
corner_radius = width / 2 - hole_pitch;
|
||||||
|
corner_inset = (width - blower_exit(type)) / 2;
|
||||||
|
|
||||||
|
module square_inset_corners(remove_center = false)
|
||||||
|
difference() {
|
||||||
|
//overall outside
|
||||||
|
square([width, width], center = false);
|
||||||
|
|
||||||
|
if (remove_center) {
|
||||||
|
// cut out the inside, leaving the corners
|
||||||
|
translate([corner_inset + wall, -eps])
|
||||||
|
square([width - 2 * (wall + corner_inset), width - wall + eps], center = false);
|
||||||
|
|
||||||
|
translate([wall, corner_inset + wall])
|
||||||
|
square([width - 2 * wall, width - 2 * (wall + corner_inset)], center = false);
|
||||||
|
} else {
|
||||||
|
// cut out the bore for the fan
|
||||||
|
translate(blower_axis(type))
|
||||||
|
circle(d = blower_bore(type));
|
||||||
|
}
|
||||||
|
// corner inset
|
||||||
|
translate([width / 2, width / 2])
|
||||||
|
for(i = [0 : 3])
|
||||||
|
rotate(i * 90)
|
||||||
|
translate([-width / 2 - eps, -width/ 2 - eps])
|
||||||
|
quadrant(corner_inset, corner_inset - corner_radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
base_height = blower_base(type);
|
||||||
|
linear_extrude(base_height)
|
||||||
|
difference () {
|
||||||
|
rounded_square([width, width], corner_radius, center = false);
|
||||||
|
|
||||||
|
blower_hole_positions(type)
|
||||||
|
circle(d = blower_screw_hole(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
translate_z(base_height)
|
||||||
|
linear_extrude(depth - base_height)
|
||||||
|
square_inset_corners(remove_center = true);
|
||||||
|
|
||||||
|
translate_z(depth - base_height)
|
||||||
|
linear_extrude(blower_top(type))
|
||||||
|
square_inset_corners();
|
||||||
|
}
|
||||||
|
|
||||||
module blower(type) { //! Draw specified blower
|
module blower(type) { //! Draw specified blower
|
||||||
length = blower_length(type);
|
length = blower_length(type);
|
||||||
width = blower_width(type);
|
width = blower_width(type);
|
||||||
@@ -70,55 +151,63 @@ module blower(type) { //! Draw specified blower
|
|||||||
|
|
||||||
vitamin(str("blower(", type[0], "): ", type[1]));
|
vitamin(str("blower(", type[0], "): ", type[1]));
|
||||||
|
|
||||||
|
is_square = blower_casing_is_square(type); // Description starts with square!
|
||||||
color(fan_colour) {
|
color(fan_colour) {
|
||||||
// screw lugs
|
if (is_square) {
|
||||||
linear_extrude(blower_lug(type), center = false)
|
blower_square(type);
|
||||||
for(hole = blower_screw_holes(type))
|
} else {
|
||||||
difference() {
|
// screw lugs
|
||||||
hull() {
|
linear_extrude(blower_lug(type), center = false)
|
||||||
|
for(hole = blower_screw_holes(type))
|
||||||
|
difference() {
|
||||||
|
hull() {
|
||||||
|
translate(hole)
|
||||||
|
circle(d = blower_screw_hole(type) + 2 * blower_wall(type));
|
||||||
|
|
||||||
|
translate(blower_axis(type))
|
||||||
|
circle(d = blower_screw_hole(type) + 2 * blower_wall(type) + 7);
|
||||||
|
}
|
||||||
translate(hole)
|
translate(hole)
|
||||||
circle(d = blower_screw_hole(type) + 2 * blower_wall(type));
|
circle(d = blower_screw_hole(type));
|
||||||
|
|
||||||
translate(blower_axis(type))
|
shape(true);
|
||||||
circle(d = blower_screw_hole(type) + 2 * blower_wall(type) + 7);
|
}
|
||||||
}
|
|
||||||
translate(hole)
|
|
||||||
circle(d = blower_screw_hole(type));
|
|
||||||
|
|
||||||
shape(true);
|
*%square([length, width]);
|
||||||
}
|
|
||||||
// rotor
|
|
||||||
translate(concat(blower_axis(type), [blower_base(type) + 1]))
|
|
||||||
rounded_cylinder(r = blower_hub(type) / 2, h = blower_hub_height(type) - blower_base(type) - 1, r2 = 1);
|
|
||||||
|
|
||||||
*%square([length, width]);
|
// base
|
||||||
|
linear_extrude(blower_base(type))
|
||||||
// base
|
|
||||||
linear_extrude(blower_base(type))
|
|
||||||
difference() {
|
|
||||||
shape();
|
|
||||||
|
|
||||||
translate(concat(blower_axis(type), [blower_base(type)]))
|
|
||||||
circle(d = 2);
|
|
||||||
}
|
|
||||||
// sides
|
|
||||||
linear_extrude(depth)
|
|
||||||
difference() {
|
|
||||||
shape();
|
|
||||||
|
|
||||||
offset(-blower_wall(type))
|
|
||||||
shape(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// top
|
|
||||||
translate_z(depth -blower_top(type))
|
|
||||||
linear_extrude(blower_top(type))
|
|
||||||
difference() {
|
difference() {
|
||||||
shape();
|
shape();
|
||||||
|
|
||||||
translate(concat(blower_axis(type), [blower_base(type)]))
|
translate(concat(blower_axis(type), [blower_base(type)]))
|
||||||
circle(d = blower_bore(type));
|
circle(d = 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sides
|
||||||
|
linear_extrude(depth)
|
||||||
|
difference() {
|
||||||
|
shape();
|
||||||
|
|
||||||
|
offset(-blower_wall(type))
|
||||||
|
shape(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// top
|
||||||
|
translate_z(depth -blower_top(type))
|
||||||
|
linear_extrude(blower_top(type))
|
||||||
|
difference() {
|
||||||
|
shape();
|
||||||
|
|
||||||
|
translate(concat(blower_axis(type), [blower_base(type)]))
|
||||||
|
circle(d = blower_bore(type));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// rotor
|
||||||
|
translate(concat(blower_axis(type), [blower_base(type) + 1]))
|
||||||
|
rounded_cylinder(r = blower_hub(type) / 2, h = blower_hub_height(type) - blower_base(type) - 1, r2 = 1);
|
||||||
|
|
||||||
|
blower_fan(type, is_square);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,10 +16,16 @@
|
|||||||
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||||
// If not, see <https://www.gnu.org/licenses/>.
|
// If not, see <https://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
// l w d b s h a s s e h b t w l
|
||||||
|
// e i e o c u x c c x u a o a u
|
||||||
|
// n d p r r b i r r i b s p l g
|
||||||
|
// g t t e e s e e t e l
|
||||||
|
// t h h w d w w t
|
||||||
|
// h h s t t
|
||||||
|
RB5015 = ["RB5015", "Blower Runda RB5015", 51.3, 51, 15, 31.5, M4_cap_screw, 26, [27.3, 25.4], 4.5, [[4.3, 45.4], [47.3,7.4]], 20, 14, 1.5, 1.3, 1.2, 15];
|
||||||
|
PE4020 = ["PE4020", "Blower Pengda Technology 4020", 40, 40, 20, 27.5, M3_cap_screw, 22, [21.5, 20 ], 3.2, [[37,3],[3,37],[37,37]], 29.3, 17, 1.7, 1.2, 1.3, 13];
|
||||||
|
BL40x10 =["BL40x10","Square radial 4010", 40, 40,9.5, 27, M2_cap_screw, 16, [24, 20 ], 2.4, [[2,2],[38,2],[2,38],[38,38]], 30 , 9.5, 1.5, 1.5, 1.1, 1.5];
|
||||||
|
|
||||||
RB5015 = ["RB5015", "Blower Runda RB5015", 51.3, 51, 15, 31.5, M4_cap_screw, 26, [27.3, 25.4], 4.5, [[4.3, 45.4], [47.3,7.4]], 20, 14, 1.5, 1.3, 1.2, 15];
|
blowers = [BL40x10, PE4020, RB5015];
|
||||||
PE4020 = ["PE4020", "Blower Pengda Technology 4020", 40, 40, 20, 27.5, M3_cap_screw, 22, [21.5, 20 ], 3.2, [[37,3],[3,37],[37,37]], 29.3, 17, 1.7, 1.2, 1.3, 13];
|
|
||||||
|
|
||||||
blowers = [PE4020, RB5015];
|
|
||||||
|
|
||||||
use <blower.scad>
|
use <blower.scad>
|
||||||
|
Reference in New Issue
Block a user