^
brixelweb.de OpenSCAD-Menu
[ https://openscad.org/ ]


Kisten mit Rundungen selbst erstellen (mit variabler Eingabe)



Eine Kiste mit ein paar Zylindern und der Funktion "hull" ergibt eine griffige Kiste mit Rundungen. Beim Boden und beim Deckel hapert es jedoch noch mit den Rundungen.
Beginen wir mit dem Deckel?

Es werden nach der Eingabe der Außenmaße (X, Y), sowie dem Radius, vier Kugeln erzeugt und mit dem "hull" Befehl als eine geschlossene Form gestaltet.
Danach wird die untere Hälfte entfernt. So entsteht der obere Deckel mit Rundungen.
Die Eingabe ist recht einfach:
eckoben(Außenmaße X, Y, Radius); eingeben.

Ändere nur die rot gefärbten Zahlen im Script!

// cube_r_o.scad
// Variables Rechteck mit Rundung aussen/oben
$fn=50;
// breite = X-Achse
// laenge = Y-Achse
// radius = Höhe & Radius der Rundung

module eckoben (breite, laenge, radius) {
difference() {   
hull() {
translate([radius,radius,0])
sphere(radius);
translate([breite - radius,radius,0])
sphere(radius);
translate([radius, laenge - radius,0])
sphere(radius);
translate([breite - radius, laenge - radius,0])
sphere(radius);
} // hull
translate([0,0, -radius])
cube ([breite, laenge, radius]);
} // difference
} // module

eckoben (30, 55, 3); // X, Y, Radius oben


Nun geht es weiter.
Setzen wir mit dem Boden die Rundungen fort.

Es werden nach der Eingabe der Außenmaße (X, Y), sowie dem Radius, vier Kugeln erzeugt und mit dem "hull" Befehl als eine geschlossene Form gestaltet.
Danach wird die obere Hälfte entfernt. So entsteht der untere Boden mit Rundungen.
Die Eingabe ist recht einfach:
eckunten(Außenmaße X, Y, Radius); eingeben.

Im Gegensatz zum Deckel wird für den Boden nur die Zeile "translate([0,0, -radius])" entfernt.

Ändere nur die rot gefärbten Zahlen im Script!

// cube_r_u.scad
// Variables Rechteck mit Rundung aussen/oben
$fn=50;
// breite = X-Achse
// laenge = Y-Achse
// radius = Höhe & Radius der Rundung

module eckoben (breite, laenge, radius) {
difference() {   
hull() {
translate([radius,radius,0])
sphere(radius);
translate([breite - radius,radius,0])
sphere(radius);
translate([radius, laenge - radius,0])
sphere(radius);
translate([breite - radius, laenge - radius,0])
sphere(radius);
} // hull
cube ([breite, laenge, radius]);
} // difference
} // module

eckoben (30, 55, 3); // X, Y, Radius oben


Dosen mit Rundungen selbst erstellen (mit variabler Eingabe)


Eine runde Dose mit einer Kugel zu versehen, als Rundung, ist nicht schwer. Jedoch auch nicht immer schön anzusehen!
Ein flacher Deckel mit kleinerer Rundung sieht filigraner aus.
Beginen wir wieder mit dem Deckel?

Es wird ein Kreis mittels "rotate_extrude" zu einem Ring geformt, der über die hull-Funktion geschlossen wird. Die untere Hälfte wird wieder entfernt. Fertig ist der obere Teil als filigraner Deckel mit feinerer Rundung!
Die Eingabe ist recht einfach:
kreisoben(Durchmesser, Radius); eingeben.

Ändere nur die rot gefärbten Zahlen im Script!

// sphere_r_o.scad
// Variabler Deckel mit Rundung aussen/oben
$fn=50;
// durchmesser = des Zylinders
// radius = Höhe & Radius der Rundung

module kreisoben (durchmesser, radius) {
difference() {   
hull() {
rotate_extrude(convexity = 10)
translate([durchmesser - radius, 0, 0])
circle(r = radius);
} // hull
translate([0,0, -radius])
cylinder (h = radius, r = durchmesser);
} // difference
} // module

kreisoben (34, 4); // Durchmesser, Radius


Nun geht es bereits wieder weiter.
Setzen wir mit dem Boden die Rundungen fort.

Es wird ein Kreis mittels "rotate_extrude" zu einem Ring geformt, der über die hull-Funktion geschlossen wird. Die obere Hälfte wird entfernt. Fertig ist der untere Teil als feiner Boden mit kleiner Rundung!
Die Eingabe ist recht einfach:
kreisunten(Durchmesser, Radius); eingeben.

Ändere nur die rot gefärbten Zahlen im Script!

// sphere_r_u.scad
// Variabler Deckel mit Rundung aussen/unten
$fn=50;
// durchmesser = des Zylinders
// radius = Höhe & Radius der Rundung

module kreisunten (durchmesser, radius) {
difference() {   
hull() {
rotate_extrude(convexity = 10)
translate([durchmesser - radius, 0, 0])
circle(r = radius);
} // hull
cylinder (h = radius, r = durchmesser);
} // difference
} // module

kreisunten (34, 4); // Durchmesser, Radius


Bei allen Varianten, jeweils Deckel und Boden, ist die Eingabe flexibel gestaltet. Es können die Elemente innerhalb eines Scriptes mehrmals hergestellt werden, indem die Module einfach mit anderen Maßangaben aufgerufen werden.



Rundungen ohne "hull" erstellen (mit variabler Eingabe)

Da der Befehl "hull" sehr rechenintensiv ist, kann so ein Deckel doch auch mit anderen Mitteln gestaltet werden.

Wir beginnen einfach mit den bekannten vier Kugeln: in jede Ecke passend eine.

// version_2.scad
module eckeoben (breite, laenge, radius) {

translate([radius,radius,0])
sphere(radius);
translate([breite - radius,radius,0])
sphere(radius);
translate([radius, laenge - radius,0])
sphere(radius);
translate([breite - radius, laenge - radius,0])
sphere(radius);
} // Ende von module

translate([20,20,20])
eckeoben (40, 60, 5); // X, Y, Radius


Nun klemmen wir je einen Zylinder, der von Kugelmitte bis zur Kugelmitte reicht.

Mit den Kugeln zusammen sieht es dann bereits so aus:

Der rote Text im Script kam wieder neu hinzu

// version_2.scad
module eckeoben (breite, laenge, radius) {
translate([radius,radius,0])
sphere(radius);
translate([breite - radius,radius,0])
sphere(radius);
translate([radius, laenge - radius,0])
sphere(radius);
translate([breite - radius, laenge - radius,0])
sphere(radius);

translate([radius, radius,0])
rotate([0,90,0])
cylinder(h=breite- 2*radius, r = radius);
translate([radius, laenge-radius,0])
rotate([0,90,0])
cylinder(h=breite- 2*radius, r = radius);
translate([radius, radius,0])
rotate([-90,0,0])
cylinder(h=laenge- 2*radius, r = radius);    
translate([breite-radius, radius,0])
rotate([-90,0,0])
cylinder(h=laenge- 2*radius, r = radius); 
} // Ende von module

translate([20,20,20])
eckeoben (40, 60, 5); // X, Y, Radius


Von Kugelmitte bis zur Kugelmitte wiederum schließen wir das "mittlere Loch" mit einem Quader.

Eigentlich wäre jetzt alles fertig, bis auf ....

(Der rote Text im Script kam neu hinzu)

Je ein Deckel und ein Boden zusammen. Und jetzt?

// version_2.scad
module eckeoben (breite, laenge, radius) {
translate([radius,radius,0])
sphere(radius);
translate([breite - radius,radius,0])
sphere(radius);
translate([radius, laenge - radius,0])
sphere(radius);
translate([breite - radius, laenge - radius,0])
sphere(radius);

translate([radius, radius,0])
rotate([0,90,0])
cylinder(h=breite- 2*radius, r = radius);
translate([radius, laenge-radius,0])
rotate([0,90,0])
cylinder(h=breite- 2*radius, r = radius);
translate([radius, radius,0])
rotate([-90,0,0])
cylinder(h=laenge- 2*radius, r = radius);    
translate([breite-radius, radius,0])
rotate([-90,0,0])
cylinder(h=laenge- 2*radius, r = radius); 

translate([radius, radius, -radius])
cube ([breite -2*radius, laenge -2*radius, 2*radius]);
} // Ende von module

translate([20,20,20])
eckeoben (40, 60, 5); // X, Y, Radius


Nun müssen wir uns noch entscheiden: möchten wir einen Deckel oder einen Boden?

Dementsprechend wird die obere oder die untere Hälfte unseres Rundungmodells abgeschnitten

Über "union" fassen wir die 4 Kugeln, 4 Zylinder und den Quader zusammen zu einem Teil. Von diesem Ganzen ziehen wir mittels "difference" unseren Quader ab, der bestimmt ob es ein Deckel oder Boden wird.
Also ziehen wir unten den Quader ab, bleibt die obere Hälfte der Rundungen stehen: wir haben einen Deckel!
Der rote Text im Script kam neu hinzu.


Für den Boden wird nur eine Zeile (in blau) geändert:

} // Ende von union
translate([0, 0, -radius -0.001])
cube ([breite, laenge, radius+ 0.001]);

und zwar in:

translate([0, 0, 0.001])

... und schon haben wir einen Boden!

// version_2.scad
module eckeoben (breite, laenge, radius) {
difference() {   

union() {
translate([radius,radius,0])
sphere(radius);
translate([breite - radius,radius,0])
sphere(radius);
translate([radius, laenge - radius,0])
sphere(radius);
translate([breite - radius, laenge - radius,0])
sphere(radius);

translate([radius, radius,0])
rotate([0,90,0])
cylinder(h=breite- 2*radius, r = radius);
translate([radius, laenge-radius,0])
rotate([0,90,0])
cylinder(h=breite- 2*radius, r = radius);
translate([radius, radius,0])
rotate([-90,0,0])
cylinder(h=laenge- 2*radius, r = radius);    
translate([breite-radius, radius,0])
rotate([-90,0,0])
cylinder(h=laenge- 2*radius, r = radius); 

translate([radius, radius, -radius])
cube ([breite -2*radius, laenge -2*radius, 2*radius]);

} // Ende von union
translate([0, 0, -radius -0.001])
cube ([breite, laenge, radius+ 0.001]);
} // Ende von difference
} // Ende von module

translate([20,20,20])
eckeoben (40, 60, 5); // X, Y, Radius








www.brixelweb.de