1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-09 06:31:32 +02:00

Compare commits

..

7 Commits

Author SHA1 Message Date
Chris Palmer
f573a91a09 Removed redundant rounded_rectangle center = false. 2021-02-08 09:41:07 +00:00
Chris Palmer
d75aff2ccd rounded_retangle() centre now defaults to false. 2021-02-08 09:24:00 +00:00
Chris Palmer
491d85156c Merge branch 'martinbudden-rounded_cubes' 2021-02-08 08:29:50 +00:00
Chris Palmer
c89ce6843f Updated images and readme. 2021-02-08 08:29:08 +00:00
Chris Palmer
1915dae034 Merge branch 'rounded_cubes' of https://github.com/martinbudden/NopSCADlib into martinbudden-rounded_cubes 2021-02-07 22:17:22 +00:00
Martin Budden
c4fe1d1098 Added assertion to check r value. Used extrud_if. 2021-02-07 07:29:02 +00:00
Martin Budden
22b7aa956c Renamed rounded_rectangle_* to rounded_cube_*. 2021-02-02 17:32:44 +00:00
23 changed files with 56 additions and 45 deletions

View File

@@ -227,7 +227,7 @@ module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
translate_z(-box_profile_overlap(type)) difference() {
tw = w + 2 * outset;
td = d + 2 * outset;
rounded_rectangle([tw, td, feet ? foot_height : height], box_corner_rad(type), false);
rounded_rectangle([tw, td, feet ? foot_height : height], box_corner_rad(type));
//
// Remove edges between the feet
//
@@ -264,7 +264,7 @@ module box_bezel(type, bottom) { //! Generates top and bottom bezel STLs
// recess for top / bottom panel
//
translate_z(cgap)
rounded_rectangle([w + bezel_clearance, d + bezel_clearance, height], inner_r + bezel_clearance / 2, false);
rounded_rectangle([w + bezel_clearance, d + bezel_clearance, height], inner_r + bezel_clearance / 2);
//
// leave plastic over the corner profiles
//

View File

@@ -116,10 +116,10 @@ module MT3608_carrier_stl() { //! Generate the STL for an MT3608 carrier, two re
difference() {
hull() {
translate([offset, 0, height - eps / 2])
rounded_rectangle([width, pcb_width - 2, eps], 1);
rounded_rectangle([width, pcb_width - 2, eps], 1, true);
translate_z(eps / 2)
rounded_rectangle([width, pcb_width - 2, eps], 1);
rounded_rectangle([width, pcb_width - 2, eps], 1, true);
}
for(side = [-1, 1])
hull() {

View File

@@ -44,7 +44,7 @@ module door_latch_stl() { //! Generates the STL for the printed part
difference() {
union() {
hull() {
rounded_rectangle([length, width, thickness - tan(30) * (width - ridge) / 2], rad, center = false);
rounded_rectangle([length, width, thickness - tan(30) * (width - ridge) / 2], rad);
translate_z(thickness / 2)
cube([length, ridge, thickness], center = true);

View File

@@ -182,7 +182,7 @@ module pbox(type) { //! Generate the STL for the main case
if(ledge_h)
translate_z(top_thickness + height - ledge_h)
difference() {
rounded_rectangle([pbox_width(type) + 2 * outset, pbox_depth(type) + 2 * outset, ledge_h], 1, center = false);
rounded_rectangle([pbox_width(type) + 2 * outset, pbox_depth(type) + 2 * outset, ledge_h], 1);
hull() {
linear_extrude(ledge_h + eps)

View File

@@ -110,7 +110,7 @@ module psu_shroud(type, cable_d, name, cables = 1) { //! Generate the STL file f
stl(str("psu_shroud_", name)) {
// base and sides
translate([centre_x, -centre_y]) {
rounded_rectangle([depth - eps, width - eps, top], rad, center = false);
rounded_rectangle([depth - eps, width - eps, top], rad);
linear_extrude(height)
difference() {

View File

@@ -71,7 +71,7 @@ module ssr_shroud(type, cable_d, name) { //! Generate the STL file for a spec
stl(str("ssr_shroud_", name)) {
// base and sides
translate([center_x, 0]) {
rounded_rectangle([depth - eps, width - eps, top], rad, center = false);
rounded_rectangle([depth - eps, width - eps, top], rad);
linear_extrude(height) difference() {
round(or = wall / 2 - eps, ir = 0) difference() {

View File

@@ -6236,9 +6236,10 @@ Rectangle with rounded corners.
### Modules
| Module | Description |
|:--- |:--- |
| `rounded_rectangle(size, r, center = true, xy_center = true)` | Like `cube()` but corners rounded in XY plane and separate centre options for xy and z. |
| `rounded_rectangle_xz(size, r, center = true, xy_center = true)` | Like `cube()` but corners rounded in XZ plane and separate centre options for xy and z. |
| `rounded_rectangle_yz(size, r, center = true, xy_center = true)` | Like `cube()` but corners rounded in YX plane and separate centre options for xy and z. |
| `rounded_cube_xy(size, r = 0, xy_center = false, z_center = false)` | Like `cube()` but corners rounded in XY plane and separate centre options for xy and z. |
| `rounded_cube_xz(size, r = 0, xy_center = false, z_center = false)` | Like `cube()` but corners rounded in XZ plane and separate centre options for xy and z. |
| `rounded_cube_yz(size, r = 0, xy_center = false, z_center = false)` | Like `cube()` but corners rounded in YX plane and separate centre options for xy and z. |
| `rounded_rectangle(size, r, center = false, xy_center = true)` | Like `cube()` but corners rounded in XY plane and separate centre options for xy and z. |
| `rounded_square(size, r, center = true)` | Like `square()` but with with rounded corners |
![rounded_rectangle](tests/png/rounded_rectangle.png)

View File

@@ -46,7 +46,7 @@ module widget(thickness) {
module widget_stl() {
stl("widget")
union() {
rounded_rectangle([30, 30, 3], 2);
rounded_rectangle([30, 30, 3], 2, true);
render() insert_boss(insert, height, 2.2);
}

View File

@@ -56,7 +56,7 @@ module horiholes_stl(t = thickness) {
}
if(t == thickness)
translate([length / 2, 0])
rounded_rectangle([length + 2 * overlap_x, thickness + 2 * overlap_y, 2], 5);
rounded_rectangle([length + 2 * overlap_x, thickness + 2 * overlap_y, 2], 5, true);
}
module horiholes() {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -27,10 +27,13 @@ module rounded_rectangles() {
rounded_rectangle([30, 20, 10], 3);
translate([80, 0])
rounded_rectangle_xz([30, 20, 10], 3);
rounded_cube_xy([30, 20, 10], 3);
translate([120, 0])
rounded_rectangle_yz([30, 20, 10], 3);
rounded_cube_xz([30, 20, 10], 3);
translate([160, 0])
rounded_cube_yz([30, 20, 10], 3);
}
rounded_rectangles();

View File

@@ -22,26 +22,33 @@
//
module rounded_square(size, r, center = true) //! Like `square()` but with with rounded corners
{
assert(r < min(size.x, size.y) / 2);
$fn = r2sides4n(r);
offset(r) offset(-r) square(size, center = center);
}
module rounded_rectangle(size, r, center = true, xy_center = true) //! Like `cube()` but corners rounded in XY plane and separate centre options for xy and z.
module rounded_rectangle(size, r, center = false, xy_center = true) //! Like `cube()` but corners rounded in XY plane and separate centre options for xy and z.
{
linear_extrude(size.z, center = center)
extrude_if(size.z, center = center)
rounded_square([size.x, size.y], r, xy_center);
}
module rounded_rectangle_xz(size, r, center = true, xy_center = true) //! Like `cube()` but corners rounded in XZ plane and separate centre options for xy and z.
module rounded_cube_xy(size, r = 0, xy_center = false, z_center = false) //! Like `cube()` but corners rounded in XY plane and separate centre options for xy and z.
{
translate([xy_center ? 0 : size.x / 2, xy_center ? 0 : size.y / 2, center ? 0 : size.z / 2])
rotate([90, 0, 0])
rounded_rectangle([size.x, size.z, size.y], r, center = true, xy_center = true);
extrude_if(size.z, center = z_center)
rounded_square([size.x, size.y], r, xy_center);
}
module rounded_rectangle_yz(size, r, center = true, xy_center = true) //! Like `cube()` but corners rounded in YX plane and separate centre options for xy and z.
module rounded_cube_xz(size, r = 0, xy_center = false, z_center = false) //! Like `cube()` but corners rounded in XZ plane and separate centre options for xy and z.
{
translate([xy_center ? 0 : size.x / 2, xy_center ? 0 : size.y / 2, center ? 0 : size.z / 2])
rotate([90, 0, 90])
rounded_rectangle([size.y, size.z, size.x], r, center = true, xy_center = true);
translate([xy_center ? 0 : size.x / 2, xy_center ? 0 : size.y / 2, z_center ? 0 : size.z / 2])
rotate([90, 0, 0])
rounded_cube_xy([size.x, size.z, size.y], r, xy_center = true, z_center = true);
}
module rounded_cube_yz(size, r = 0, xy_center = false, z_center = false) //! Like `cube()` but corners rounded in YX plane and separate centre options for xy and z.
{
translate([xy_center ? 0 : size.x / 2, xy_center ? 0 : size.y / 2, z_center ? 0 : size.z / 2])
rotate([90, 0, 90])
rounded_cube_xy([size.y, size.z, size.x], r, xy_center = true, z_center = true);
}

View File

@@ -31,15 +31,15 @@ module rounded_right_triangle(x, y, z, fillet, center = true, offset = false) {
hull() {
translate([0, fillet, size.z / 2])
rotate([90, 90, 0])
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, center = false, xy_center = false);
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, xy_center = false);
translate([0, size.y, size.z / 2])
rotate([90, 90, 0])
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, center = false, xy_center = false);
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, xy_center = false);
translate([fillet, 0, size.z / 2])
rotate([0, 90, 0])
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, center = false, xy_center = false);
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, xy_center = false);
translate([size.x, 0, size.z / 2])
rotate([0, 90, 0])
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, center = false, xy_center = false);
rounded_rectangle([size.z, 2 * fillet, eps], fillet - eps, xy_center = false);
}
}

View File

@@ -128,7 +128,7 @@ module battery_contact(type, pos = true) { //! Draw a positive or negative batte
t = contact_thickness(type);
color("silver") {
rounded_rectangle([contact_width(type), h, t], r = 1, center = false);
rounded_rectangle([contact_width(type), h, t], r = 1);
translate([0, -h / 2, t])
rotate([90, 0, 0])

View File

@@ -47,7 +47,7 @@ module square_button(type, colour = "yellow") { //! Draw square button with spec
stem = square_button_cap_stem(type);
color(grey(20)) {
rounded_rectangle([w, w, h - 0.5], r = wall, center = false);
rounded_rectangle([w, w, h - 0.5], r = wall);
for(x = [-1, 1], y = [-1, 1])
translate([x * pitch, y * pitch])

View File

@@ -37,7 +37,7 @@ module camera_lens(type, offset = 0, show_lens = true) //! Draw the lens stack,
r = p[1] + offset;
app = p[2];
if(size.x)
rounded_rectangle(size + [2 * offset, 2 * offset, round_to_layer(offset)], r, center = false);
rounded_rectangle(size + [2 * offset, 2 * offset, round_to_layer(offset)], r);
else
if (show_lens)
translate_z(size.y)
@@ -72,7 +72,7 @@ module camera(type, show_lens = true) { //! Draw specified PCB camera
pos = camera_connector_pos(type);
color(grey(20))
translate(pos)
rounded_rectangle(conn, 0.5, center = false);
rounded_rectangle(conn, 0.5);
flex = [5, 0.1];
color("orange")

View File

@@ -326,7 +326,7 @@ module panel_USBA() { //! Draw a panel mount USBA connector
dx = (length2 / 2 - r2);
dy = (width / 2 - r1);
translate_z(l)
rounded_rectangle([length2, width, 1], r = r1, center = false);
rounded_rectangle([length2, width, 1], r = r1);
translate([-dx, -dy, height2 - r2])
rotate([90, 0, 0])

View File

@@ -80,7 +80,7 @@ module display(type) { //! Draw specified display
translate_z(display_ts_thickness(type)) {
difference() {
color("silver")
rounded_rectangle([w, h, t], 0.5, center = false);
rounded_rectangle([w, h, t], 0.5);
color("black")
translate([aperture[0].x, aperture[0].y, - eps])

View File

@@ -59,7 +59,7 @@ module panel_meter_button(type) { //! Draw panel meter button
color(pmeter_button_colour(type))
translate(pmeter_button_pos(type))
if(size.x)
rounded_rectangle(pmeter_button_size(type), r, center = false);
rounded_rectangle(pmeter_button_size(type), r);
else
cylinder(r = r, h = size.z);
}
@@ -93,8 +93,8 @@ module panel_meter(type) { //! Draw panel mounted LCD meter module
difference() {
if(is_list(bevel))
hull() {
rounded_rectangle([bezel.x - 2 * bevel.x, bezel.y - 2 * bevel.x, bezel.z], r - bevel.x, center = false);
rounded_rectangle([bezel.x, bezel.y, bevel[1]], r, center = false);
rounded_rectangle([bezel.x - 2 * bevel.x, bezel.y - 2 * bevel.x, bezel.z], r - bevel.x);
rounded_rectangle([bezel.x, bezel.y, bevel[1]], r);
}
else
hull() {
@@ -111,7 +111,7 @@ module panel_meter(type) { //! Draw panel mounted LCD meter module
cube([ap.x + ap.z, ap.y + ap.z, eps], center = true);
translate_z(bezel.z + eps)
rounded_rectangle([ap.x, ap.y, bezel.z * 2], r, center = true);
rounded_rectangle([ap.x, ap.y, bezel.z * 2], r, true);
}
}
//

View File

@@ -126,7 +126,7 @@ module usb_A(h, v_flange_l, bar, cutout) {
if(cutout)
rotate([90, 0, 90])
rounded_rectangle([w + 2 * v_flange_h + 2 * panel_clearance,
h + 2 * h_flange_h + 2 * panel_clearance, 100], r = cnc_bit_r, center = false);
h + 2 * h_flange_h + 2 * panel_clearance, 100], r = cnc_bit_r);
else {
color("silver") rotate([0, 90, 0]) {
linear_extrude(l, center = true)

View File

@@ -62,7 +62,7 @@ module sk_bracket(type) { //! SK shaft support bracket
}
for(x = [W / 2 - 2 * fillet, -W / 2 + 2 * fillet])
translate([x, G / 2, 0])
rounded_rectangle([4 * fillet, G, L], fillet);
rounded_rectangle([4 * fillet, G, L], fillet, true);
}
translate([0, -h, -L /2])

View File

@@ -56,10 +56,10 @@ module transformer(type) { //! Draw specified transformer
}
color("white") {
color("white")
translate_z(tx_lamination_height(type) / 2 + tx_bobbin_offset(type) / 2)
rounded_rectangle([tx_bobbin_width(type), tx_depth(type), tx_bobbin_height(type)], r = tx_bobbin_radius(type));
}
rounded_rectangle([tx_bobbin_width(type), tx_depth(type), tx_bobbin_height(type)], tx_bobbin_radius(type), true);
terminal_height = tx_height(type) - tx_lamination_height(type);
if(terminal_height)

View File

@@ -62,7 +62,7 @@ module ziptie(type, r, t = 0) //! Draw specified ziptie wrapped around radius `r
translate([lx, -r])
rotate([90, 0, 0])
union() {
rounded_rectangle(latch, 0.5, center = false);
rounded_rectangle(latch, 0.5);
translate_z((latch.z + 1) / 2)
cube([ziptie_thickness(type), ziptie_width(type), latch.z + 1], center = true);