4 changed files with 115 additions and 0 deletions
@ -0,0 +1,16 @@ |
|||
module rc_car(base, tip, junction) { |
|||
polygon(points = [ |
|||
[base[0]/2, base[1]/2], |
|||
[base[0]/2, -base[1]/2], |
|||
[tip[0]/2, -base[1]/2-junction], |
|||
[tip[0]/2, -base[1]/2-junction-tip[1]], |
|||
[-tip[0]/2, -base[1]/2-junction-tip[1]], |
|||
[-tip[0]/2, -base[1]/2-junction], |
|||
[-base[0]/2, -base[1]/2], |
|||
[-base[0]/2, base[1]/2], |
|||
[-tip[0]/2, base[1]/2+junction], |
|||
[-tip[0]/2, base[1]/2+junction+tip[1]], |
|||
[tip[0]/2, base[1]/2+junction+tip[1]], |
|||
[tip[0]/2, base[1]/2+junction] |
|||
]); |
|||
} |
|||
@ -0,0 +1,40 @@ |
|||
module alveolar_reinforcement(bounding_box, thickness, height, alveolus_size) { |
|||
xstep = 2 * cos(30) * (thickness + sqrt(3) * alveolus_size / 2); |
|||
ystep = sin(30) * (thickness + sqrt(3) * alveolus_size / 2); |
|||
|
|||
xn = ceil((bounding_box[1][0] - bounding_box[0][0]) / xstep); |
|||
yn = ceil((bounding_box[1][1] - bounding_box[0][1]) / ystep); |
|||
origin = bounding_box[0]; |
|||
|
|||
// Bounding box debug |
|||
/* |
|||
#polygon(points = [ |
|||
[bounding_box[0][0], bounding_box[0][1]], |
|||
[bounding_box[1][0], bounding_box[0][1]], |
|||
[bounding_box[1][0], bounding_box[1][1]], |
|||
[bounding_box[0][0], bounding_box[1][1]] |
|||
]); |
|||
*/ |
|||
|
|||
difference() { |
|||
linear_extrude(height = height) { |
|||
children(); |
|||
} |
|||
for (y = [0:1:yn]) { |
|||
for (x = [0:1:xn]) { |
|||
posx = origin[0] + (x * xstep) + (y % 2) * xstep / 2; |
|||
posy = origin[1] + (y * ystep); |
|||
translate([posx, posy, height / 2 + thickness]) |
|||
cylinder(d = alveolus_size, h = height - thickness, center = true, $fn = 6); |
|||
} |
|||
} |
|||
} |
|||
|
|||
linear_extrude(height = height) { |
|||
difference() { |
|||
children(); |
|||
offset(-thickness) |
|||
children(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
module square_reinforcement(bounding_box, thickness, height, alveolus_size) { |
|||
step = alveolus_size+thickness; |
|||
xn = ceil((bounding_box[1][0] - bounding_box[0][0]) / step); |
|||
yn = ceil((bounding_box[1][1] - bounding_box[0][1]) / step); |
|||
origin = bounding_box[0]; |
|||
|
|||
// Bounding box debug |
|||
/* |
|||
#polygon(points = [ |
|||
[bounding_box[0][0], bounding_box[0][1]], |
|||
[bounding_box[1][0], bounding_box[0][1]], |
|||
[bounding_box[1][0], bounding_box[1][1]], |
|||
[bounding_box[0][0], bounding_box[1][1]] |
|||
]); |
|||
*/ |
|||
|
|||
difference() { |
|||
linear_extrude(height = height) { |
|||
children(); |
|||
} |
|||
for (y = [0:1:yn]) { |
|||
for (x = [0:1:xn]) { |
|||
posx = origin[0] + (x * step); |
|||
posy = origin[1] + (y * step); |
|||
translate([posx, posy, height / 2 + thickness]) |
|||
cube(size = [alveolus_size, alveolus_size, height - thickness], center = true); |
|||
} |
|||
} |
|||
} |
|||
|
|||
linear_extrude(height = height) { |
|||
difference() { |
|||
children(); |
|||
offset(-thickness) |
|||
children(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
use <3d/square_reinforcement.scad> |
|||
use <3d/alveolar_reinforcement.scad> |
|||
use <2d/rc_car.scad> |
|||
|
|||
// Size of the RC Car plate |
|||
base = [135, 200]; |
|||
tip = [50, 50]; |
|||
junction = 25; |
|||
|
|||
// Compute the bounding box size |
|||
size_x = base[0]; |
|||
size_y = base[1]+2*tip[1]+2*junction; |
|||
bounding_box = [[-size_x/2, -size_y/2], [size_x/2, size_y/2]]; |
|||
|
|||
translate([-100, 0, 0]) |
|||
square_reinforcement(bounding_box = bounding_box, thickness = 2, height = 10, alveolus_size = 30) |
|||
rc_car(base, tip, junction); |
|||
|
|||
translate([100, 0, 0]) |
|||
alveolar_reinforcement(bounding_box = bounding_box, thickness = 1, height = 10, alveolus_size = 15) |
|||
rc_car(base, tip, junction); |
|||
Loading…
Reference in new issue