Optimizations and bug-fixes in edge modification.

This commit is contained in:
Shy 2024-01-20 08:50:59 +01:00
parent 0966e4eb00
commit acdb35acaa
2 changed files with 91 additions and 82 deletions

View file

@ -445,47 +445,6 @@ module outer() {
} }
} }
} }
}
/*************************************************************************
* Die Hülle. *
*************************************************************************/
module body_back() {
if (rounded_edges || beveled_edges) {
difference() {
union () {
outer();
}
color(color_top)
translate([0, 0, -0.1])
minkowski() {
linear_extrude(height=0.1) {
import("./svg/back outline.svg");
}
$fn = $preview ? 4 : 8;
if (beveled_edges) {
// Abgeschrägte Kanten.
cylinder(h=4, r1=1.5, r2=0);
} else {
// Abgerundete Kanten.
// Dafür generieren wir im folgenden einen konkaven Kegel.
union() {
curve = [1.34, 1.07, 0.84, 0.63, 0.46, 0.32, 0.2, 0.11, 0.05, 0.01, 0];
for (i = [0:len(curve)-2]) {
translate([0, 0, i*0.5])
cylinder(h=0.5, r1=curve[i], r2=curve[i+1]);
}
}
}
}
}
} else {
outer();
}
// Stützen für die Analog sticks. // Stützen für die Analog sticks.
if (stick_support) { if (stick_support) {
@ -511,6 +470,52 @@ module body_back() {
} }
} }
}
// Maske, um angerundete oder abgeschrägte Außenkanten zu schneiden.
module edge_cut() {
minkowski() {
linear_extrude(height=0.1) {
import("./svg/back outline.svg");
}
$fn = $preview ? 4 : 8;
if (beveled_edges) {
// Abgeschrägte Kanten.
cylinder(h=4, r1=1.5, r2=0);
} else {
// Abgerundete Kanten.
// Dafür generieren wir im folgenden einen konkaven Kegel.
union() {
curve = [1.34, 1.07, 0.84, 0.63, 0.46, 0.32, 0.2, 0.11, 0.05, 0.01, 0];
for (i = [0:len(curve)-2]) {
translate([0, 0, i*0.5])
cylinder(h=0.5, r1=curve[i], r2=curve[i+1]);
}
}
}
}
}
/*************************************************************************
* Die Hülle. *
*************************************************************************/
module body_back() {
if (rounded_edges || beveled_edges) {
difference() {
union () {
outer();
}
translate([0, 0, -0.1])
edge_cut();
}
} else {
outer();
}
// Schäfte für die Bohrungen. // Schäfte für die Bohrungen.
color(color_drills) color(color_drills)
for (i = [0:3]) { for (i = [0:3]) {

View file

@ -200,6 +200,28 @@ module border_pcb_cutouts() {
cube([4, 1, 1.5]); cube([4, 1, 1.5]);
} }
// Kleine Streben zwischen Decke und Rand.
module border_strut(width, length, height) {
x = width/2;
y = length/2;
polyhedron(points = [
[-x, -y, 0],
[x, -y, 0],
[x, y, 0],
[-x, y, 0],
[-x, y, height],
[x, y, height]
], faces = [
[0, 1, 2, 3],
[1, 5, 2],
[2, 5, 4, 3],
[3, 4, 0],
[0, 4, 5, 1]
]);
}
// Die äußeren Teile: Front und Ränder. // Die äußeren Teile: Front und Ränder.
module outer() { module outer() {
// Decke. // Decke.
@ -306,26 +328,29 @@ module outer() {
} }
// Kleine Streben zwischen Decke und Rand. // Maske, um angerundete oder abgeschrägte Außenkanten zu schneiden.
module border_strut(width, length, height) { module edge_cut() {
x = width/2; minkowski() {
y = length/2; linear_extrude(height=0.1) {
import("./svg/front outline.svg");
polyhedron(points = [ }
[-x, -y, 0],
[x, -y, 0],
[x, y, 0],
[-x, y, 0],
[-x, y, height],
[x, y, height]
], faces = [
[0, 1, 2, 3],
[1, 5, 2],
[2, 5, 4, 3],
[3, 4, 0],
[0, 4, 5, 1]
]);
$fn = $preview ? 4 : 8;
if (beveled_edges) {
// Abgeschrägte Kanten.
cylinder(h=4, r1=1.5, r2=0);
} else {
// Abgerundete Kanten.
// Dafür generieren wir im folgenden einen konkaven Kegel.
union() {
curve = [1.34, 1.07, 0.84, 0.63, 0.46, 0.32, 0.2, 0.11, 0.05, 0.01, 0];
for (i = [0:len(curve)-2]) {
translate([0, 0, i*0.5])
cylinder(h=0.5, r1=curve[i], r2=curve[i+1]);
}
}
}
}
} }
@ -341,29 +366,8 @@ module casing_front() {
outer(); outer();
} }
color(color_top)
translate([0, 0, -0.1]) translate([0, 0, -0.1])
minkowski() { edge_cut();
linear_extrude(height=0.1) {
import("./svg/front outline.svg");
}
$fn = $preview ? 4 : 8;
if (beveled_edges) {
// Abgeschrägte Kanten.
cylinder(h=4, r1=1.5, r2=0);
} else {
// Abgerundete Kanten.
// Dafür generieren wir im folgenden einen konkaven Kegel.
union() {
curve = [1.34, 1.07, 0.84, 0.63, 0.46, 0.32, 0.2, 0.11, 0.05, 0.01, 0];
for (i = [0:len(curve)-2]) {
translate([0, 0, i*0.5])
cylinder(h=0.5, r1=curve[i], r2=curve[i+1]);
}
}
}
}
} }
} else { } else {
outer(); outer();