mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-11 17:24:20 +02:00
added rounded_cube
This commit is contained in:
@@ -33,6 +33,7 @@ Some modules may depend on other modules. For example, the `polyline2d` module d
|
|||||||
- [hexagons](https://openhome.cc/eGossip/OpenSCAD/lib-hexagons.html)
|
- [hexagons](https://openhome.cc/eGossip/OpenSCAD/lib-hexagons.html)
|
||||||
|
|
||||||
- 3D
|
- 3D
|
||||||
|
- [rounded_cube](https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cube.html)
|
||||||
- [line3d](https://openhome.cc/eGossip/OpenSCAD/lib-line3d.html)
|
- [line3d](https://openhome.cc/eGossip/OpenSCAD/lib-line3d.html)
|
||||||
- [polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html)
|
- [polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html)
|
||||||
- [hull_polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-hull_polyline3d.html)
|
- [hull_polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-hull_polyline3d.html)
|
||||||
|
BIN
docs/images/lib-rounded_cube-1.JPG
Normal file
BIN
docs/images/lib-rounded_cube-1.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
docs/images/lib-rounded_cube-2.JPG
Normal file
BIN
docs/images/lib-rounded_cube-2.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
docs/images/lib-rounded_cube-3.JPG
Normal file
BIN
docs/images/lib-rounded_cube-3.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
44
docs/lib-rounded_cube.md
Normal file
44
docs/lib-rounded_cube.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# rounded_cube
|
||||||
|
|
||||||
|
Creates a cube in the first octant. When center is true, the cube is centered on the origin.
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
- `size` : Accepts a single value, cube with all sides this length. It also accepts 3 value array `[x, y, z]`, cube with dimensions `x`, `y` and `z`.
|
||||||
|
- `corner_r` : The corner is one-eight of a sphere. The `corner_r` parameter determines the sphere radius.
|
||||||
|
- `center` : `false` (default), 1st (positive) octant, one corner at (0,0,0). `true`, cube is centered at (0,0).
|
||||||
|
- `$fa`, `$fs`, `$fn` : Used to control the four quadrants. Check [the circle module](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#circle) for more details. The final fragments of a sphere will be a multiple of 4 to fit edges.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
include <rounded_cube.scad>;
|
||||||
|
|
||||||
|
rounded_cube(20, 5);
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
include <rounded_cube.scad>;
|
||||||
|
|
||||||
|
rounded_cube(
|
||||||
|
size = [50, 25, 15],
|
||||||
|
corner_r = 5,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
include <rounded_cube.scad>;
|
||||||
|
|
||||||
|
$fn = 8;
|
||||||
|
|
||||||
|
rounded_cube(
|
||||||
|
size = [50, 25, 15],
|
||||||
|
corner_r = 5,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
57
src/rounded_cube.scad
Normal file
57
src/rounded_cube.scad
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
* rounded_cube.scad
|
||||||
|
*
|
||||||
|
* Creates a rounded cube in the first octant.
|
||||||
|
* When center is true, the cube is centered on the origin.
|
||||||
|
*
|
||||||
|
* @copyright Justin Lin, 2017
|
||||||
|
* @license https://opensource.org/licenses/lgpl-3.0.html
|
||||||
|
*
|
||||||
|
* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cube.html
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
|
module rounded_cube(size, corner_r, center = false) {
|
||||||
|
x = len(size) == undef ? size : size[0];
|
||||||
|
y = len(size) == undef ? size : size[1];
|
||||||
|
z = len(size) == undef ? size : size[2];
|
||||||
|
|
||||||
|
frags = $fn > 0 ?
|
||||||
|
($fn >= 3 ? $fn : 3) :
|
||||||
|
max(min(360 / $fa, corner_r * 6.28318 / $fs), 5);
|
||||||
|
|
||||||
|
remain = frags % 4;
|
||||||
|
corner_frags = (remain / 4) > 0.5 ? frags - remain + 4 : frags - remain;
|
||||||
|
edge_d = corner_r * cos(180 / corner_frags);
|
||||||
|
|
||||||
|
half_x = x / 2;
|
||||||
|
half_y = y / 2;
|
||||||
|
half_z = z / 2;
|
||||||
|
|
||||||
|
half_l = half_x - edge_d;
|
||||||
|
half_w = half_y - edge_d;
|
||||||
|
half_h = half_z - edge_d;
|
||||||
|
|
||||||
|
half_cube_leng = size / 2;
|
||||||
|
half_leng = half_cube_leng - edge_d;
|
||||||
|
|
||||||
|
translate(center ? [0, 0, 0] : [half_x, half_y, half_z]) hull() {
|
||||||
|
translate([-half_l, -half_w, half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
translate([half_l, -half_w, half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
translate([half_l, half_w, half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
translate([-half_l, half_w, half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
|
||||||
|
translate([-half_l, -half_w, -half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
translate([half_l, -half_w, -half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
translate([half_l, half_w, -half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
translate([-half_l, half_w, -half_h])
|
||||||
|
sphere(corner_r, $fn = corner_frags);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user