5 changed files with 72 additions and 1 deletions
@ -0,0 +1,8 @@ |
|||
# A decorative pattern |
|||
|
|||
This example shows how to build a box, whose top is filled with a decorative pattern. |
|||
|
|||
## Showcase |
|||
|
|||
 |
|||
 |
|||
@ -0,0 +1,63 @@ |
|||
// First, include the module |
|||
use <../../pattern.scad> |
|||
|
|||
// Define the base shape: a curvy bean |
|||
module bean(r1, r2, spacing, h1, h2) { |
|||
translate([ -spacing / 2, 0, 0 ]) circle(r = r1, center = true); |
|||
translate([ spacing / 2, 0, 0 ]) circle(r = r1, center = true); |
|||
difference() { |
|||
square([ spacing, h1 * 2 ], center = true); |
|||
translate([0, h2, 0]) circle(r = r2, center = true); |
|||
translate([0, -h2, 0]) circle(r = r2, center = true); |
|||
} |
|||
} |
|||
|
|||
module bean_pattern(bounding_box, r1 = 5, r2 = 10, spacing = 20, margin = 1) { |
|||
h2 = sqrt(pow(r1 + r2, 2) - pow(spacing / 2, 2)); // Pythagore theorem |
|||
h1 = h2 * r1 / (r2 + r1); // Thales theorem |
|||
distance = h2 - r2 + margin + spacing / 2 + r1; |
|||
|
|||
// Define our moves: how the pattern is sprayed |
|||
moves = [ |
|||
[ r1 * 2 + spacing + 2 * (h2 - r2 + margin), 0 ], |
|||
[ 0, r1 * 2 + spacing + 2 * (h2 - r2 + margin) ], |
|||
]; |
|||
|
|||
spray_pattern(bounding_box, moves) { |
|||
// four beans arranged in a way the pattern repeat itself |
|||
bean(r1, r2, spacing, h1, h2); |
|||
translate([ 0, distance ]) rotate([0, 0, 90]) bean(r1, r2, spacing, h1, h2); |
|||
translate([ distance, distance ]) bean(r1, r2, spacing, h1, h2); |
|||
translate([ distance, 0 ]) rotate([0, 0, 90]) bean(r1, r2, spacing, h1, h2); |
|||
} |
|||
} |
|||
|
|||
// Instanciate the base shape, once. |
|||
translate([-100, -100, 0]) |
|||
bean_pattern([[0,0],[10,10]]); |
|||
|
|||
// The size of our box that will receive the decorative pattern |
|||
margin = 5; |
|||
width = 110; |
|||
length = 210; |
|||
|
|||
// Define the boundaries: the area to spray is defined by a rectangle |
|||
bounding_box = [ |
|||
[ margin, margin ], // Lower left corner |
|||
[ length + margin, width + margin ] // upper right corner |
|||
]; |
|||
|
|||
scale([ 1, 1, -1 ]) // Flip on z axis |
|||
difference () { |
|||
// The box |
|||
cube([ length + 2 * margin, width + 2 * margin, 20 ]); |
|||
|
|||
// A linear extrusion of the pattern |
|||
linear_extrude(3, center=true, convexity = 4) { // Due to the bean shape, convexity needs to be set |
|||
intersection () { // crop the pattern to the final size, leaving a margin around |
|||
translate(bounding_box[0]) |
|||
square(size = [ length, width ]); |
|||
bean_pattern(bounding_box); |
|||
} |
|||
} |
|||
} |
|||
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 28 KiB |
Loading…
Reference in new issue