modelled mortices in the top ends; added documentation of parameters.

This commit is contained in:
Simon Brooke 2026-05-28 16:59:30 +01:00
parent 8b2185d73b
commit c43cd06025
2 changed files with 55 additions and 20 deletions

View file

@ -42,14 +42,34 @@ This model is parameterised and is resizeable within limits, but if you vary any
Colours are for clarity only. Colours are for clarity only.
## Parameters
height=950, width=1500, nplanks=4, ndowels=4, plank_width=150, plank_gap=20, top_thickness=75, leg_section=100
The following parameters may be passed to the `bench` module:
| Parameter | Default | Documentation | Sensible range |
| ------------- | ------- | --------------------------------------------------------- | -------------- |
| height | 950 | height of bench top | 800-1100 |
| width | 1500 | overall width of the bench, excluding the end vice winder | 1200-2000 |
| nplanks | 4 | number of planks comprising the top | 2-5 |
| ndowels | 4 | number of dowels joining each adjacent plank pair | 2-8 |
| plank_width | 150 | width of each plank | 150-300 |
| plank_gap | 20 | gap between each pair of planks | 0-20 |
| top_thickness | 75 | thickness of the planks comprising the top | 60-100 |
| leg_section | 100 | thickness of the (square section) legs | 75-150 |
## Errata/todo: ## Errata/todo:
1. locking wedges and treenails are generally not present in this 1. locking wedges and treenails are generally not present in this
drawing; drawing;
2. mortices and holes for wedges and treenails are not all present; 2. mortices and holes for wedges and treenails are not all present;
3. two of the tapered mortices for the longitudinal braces are the 3. two of the tapered mortices for the longitudinal braces are the
wrong way round; wrong way round;
5. while all tenons are modelled, not all mortices are; where a tenon 4. while all tenons are modelled, not all mortices are; where a tenon
intersects an apparently solid piece, assume there is a mortice! intersects an apparently solid piece, assume there is a mortice!
5. screw threads are not yet modelled.
## Licence ## Licence

View file

@ -171,15 +171,19 @@ module top_plank(bench_width = 1500, plank_width= 150, top_thickness=75) {
}; };
} }
//top_plank(); module top_end(nplanks=4, plank_gap=20, plank_width=150, section=75) {
depth = (nplanks*plank_width) + (plank_gap * (nplanks - 1));
module top_end(depth=600, section=75) {
color("green") color("green")
cube([ depth, section, section]); difference() {
// todo: add mortices cube([ depth, section, section]);
for ( plank = [1:nplanks]) {
translate([(plank -1) * (plank_width + plank_gap), 0, 0])
top_plank_end_tenon( plank_width, section);
};
};
} }
module end_vice_cut( plank_width=150, width=300, top_thickness=75) { module end_vice_cut( plank_width=150, width=300, top_thickness=75) {
translate([plank_width * 0.375, 0, -1]) translate([plank_width * 0.375, 0, -1])
cube([plank_width/4, width, top_thickness + 2]); cube([plank_width/4, width, top_thickness + 2]);
@ -211,6 +215,10 @@ module vice_screw(depth=400) {
} }
} }
/**
* todo: the block doesn't get correctly centred in the slot if the
* plank_width isn't 150mm, so I've got geometry wrong.
*/
module end_vice( plank_width=150, width=300, top_thickness=75){ module end_vice( plank_width=150, width=300, top_thickness=75){
// the end vice block: this has exactly the section of the end // the end vice block: this has exactly the section of the end
// vice cut, so we'll use the same model (but much smaller width) // vice cut, so we'll use the same model (but much smaller width)
@ -218,8 +226,8 @@ module end_vice( plank_width=150, width=300, top_thickness=75){
translate([50 - (width/5), 0, 0]) translate([50 - (width/5), 0, 0])
end_vice_cut( plank_width, 50, top_thickness); end_vice_cut( plank_width, 50, top_thickness);
rotate([0, 0, 90]) rotate([0, 0, 90])
translate([width *1.1, 0 - plank_width/2, top_thickness/2]) translate([width *1.1, 0 - plank_width/2, top_thickness/2])
vice_screw(width); vice_screw(width);
} }
module bench_top( nplanks=4, ndowels = 4, plank_gap=20, bench_width=1500, plank_width=150, top_thickness=75) { module bench_top( nplanks=4, ndowels = 4, plank_gap=20, bench_width=1500, plank_width=150, top_thickness=75) {
@ -244,10 +252,13 @@ module bench_top( nplanks=4, ndowels = 4, plank_gap=20, bench_width=1500, plank_
} }
} }
} }
//module top_end(nplanks=4, plank_gap=20, plank_width=150, section=75) {
translate([0, 1, 0]) translate([0, 1, 0])
top_end((plank_width * nplanks)+(plank_gap * (nplanks - 1)), top_thickness); top_end( nplanks, plank_gap, plank_width, top_thickness);
translate([ 0, bench_width - (top_thickness +1), 0]) translate([ 0, bench_width - 1, top_thickness])
top_end((plank_width * nplanks)+(plank_gap * (nplanks - 1)), top_thickness); rotate([ 180, 0, 0])
top_end( nplanks, plank_gap, plank_width, top_thickness);
} }
@ -305,14 +316,14 @@ module front_vice( width=150, height=800, depth=400) {
color("fuchsia") color("fuchsia")
translate([0-(depth*0.8), (width/2)-(width/12), width/2]) translate([0-(depth*0.8), (width/2)-(width/12), width/2])
difference() { difference() {
cube([depth, width/6, width/2]); cube([depth, width/6, 75]);
for( hole_pair=[1:5]) { for( hole_pair=[1:5]) {
translate([25+(depth/10 * hole_pair), width/3, width/6]) translate([25+(depth/10 * hole_pair), 50, 25])
rotate([90,0,0]) rotate([90,0,0])
cylinder(width/2, r=12.5); cylinder(width/2, r=12.5);
translate([(depth/10 * hole_pair), width/3, width/3]) translate([(depth/10 * hole_pair), 50, 50])
rotate([90,0,0]) rotate([90,0,0])
cylinder(width/2, r=12.5); cylinder(width/2, r=12.5);
} }
}; };
translate([(depth*0.22), width/2, height * 0.75]) translate([(depth*0.22), width/2, height * 0.75])
@ -334,4 +345,8 @@ module bench( height=950, width=1500, nplanks=4, ndowels=4, plank_width=150, pla
//translate([0, 0, 875]) //translate([0, 0, 875])
// bench_top(); // bench_top();
bench(width=1700); bench();
translate([1000, 0, 0])
bench(width=1700, nplanks=3, plank_width = 200);
//legs();