OpenScad - neues ATARI Falcon 030 Gehäuse entsteht
Verfasst: 27.01.2026 20:14
Ich möchte hier eine ganz andere Programmiersprache mit einem guten Beispiel mal beschreiben:
OpenScad (Freeware)
Mit dieser Software kann man anhand von Befehlen relativ schnell 3D Objekte erstellen, ideal für den 3D-Druck.
Im folgenden Beispiel beschreibe ich, wie man aus einem 1040STF Gehäuse ein Falcon030 Gehäuse zaubern kann.
Hintergrund ist dieser:
Ich habe einen F030 bekommen, bei dem der Vorbesitzer etliches vom Gehäuse abgesägt/gebrochen hat, um das Mainboard in ein 19" Gehäuse zu bekommen.
Da ich den wieder herstellen möchte, habe ich eine STL-Datei vom 1040ST gefunden.
Nun kann man im OpenScad auch STL Dateien importieren, diese ist dann zwar "da", aber nicht editierbar.
Was man aber machen kann, Objekte hinzufügen (addetiv) oder löschen (subtraktiv).
Dazu bin ich folgendermaßen vorgegangen:
Zuerst die 1040er Datei importiert,
Dann eine dünne Platte angelegt und so positioniert, daß die Löcher in der 1040ST Rückwand alle geschlossen sind.
Die beiden Objekte 1040ST und die dünne neue Rückwand dann per union() zusammengefügt.
Danach kommen in einer Difference() Schleife die Objekte, die von den beiden als union() definierten "abgezogen" werden.
Also anstatt ein Rechteck wird ein rechteckiges Loch erzeugt.
hier mal ein paar Bilder die das veranschaulichen:
hier das 1040ST Gehäuse Unterteil mit der (auf Abstand) gezeigten Platte die die Löcher verschliesst. dann die Platte auf die richtige Position gesetzt:
Da kann man sehen, daß die Löcher alle geschlossen sind, aber die Beschriftung nocht sichtbar ist, da diese 1mm heraussteht.
Also habe ich noch eine Platte in 1mm Stärke angelegt und diese genau auf die Schrift gesetzt. (Difference() ) so daß die Schrift auch entfernt wird.
Danach rechteckige Objekte angelegt um die neuen Löcher für Netzbuchse, Netzschalte, Rest, RS232 usw. angelegt und plaziert.
Da auch in der Difference() Schleife, werden diese Objekte auch als Löcher gezeichnet.
Es ist noch viel zutun um das F030 Gehäuse komplett fertigzustellen, aber es geht voran.
So sieht das ganze jetzt aus: Und der Code:
weiteres später
OpenScad (Freeware)
Mit dieser Software kann man anhand von Befehlen relativ schnell 3D Objekte erstellen, ideal für den 3D-Druck.
Im folgenden Beispiel beschreibe ich, wie man aus einem 1040STF Gehäuse ein Falcon030 Gehäuse zaubern kann.
Hintergrund ist dieser:
Ich habe einen F030 bekommen, bei dem der Vorbesitzer etliches vom Gehäuse abgesägt/gebrochen hat, um das Mainboard in ein 19" Gehäuse zu bekommen.
Da ich den wieder herstellen möchte, habe ich eine STL-Datei vom 1040ST gefunden.
Nun kann man im OpenScad auch STL Dateien importieren, diese ist dann zwar "da", aber nicht editierbar.
Was man aber machen kann, Objekte hinzufügen (addetiv) oder löschen (subtraktiv).
Dazu bin ich folgendermaßen vorgegangen:
Zuerst die 1040er Datei importiert,
Dann eine dünne Platte angelegt und so positioniert, daß die Löcher in der 1040ST Rückwand alle geschlossen sind.
Die beiden Objekte 1040ST und die dünne neue Rückwand dann per union() zusammengefügt.
Danach kommen in einer Difference() Schleife die Objekte, die von den beiden als union() definierten "abgezogen" werden.
Also anstatt ein Rechteck wird ein rechteckiges Loch erzeugt.
hier mal ein paar Bilder die das veranschaulichen:
hier das 1040ST Gehäuse Unterteil mit der (auf Abstand) gezeigten Platte die die Löcher verschliesst. dann die Platte auf die richtige Position gesetzt:
Da kann man sehen, daß die Löcher alle geschlossen sind, aber die Beschriftung nocht sichtbar ist, da diese 1mm heraussteht.
Also habe ich noch eine Platte in 1mm Stärke angelegt und diese genau auf die Schrift gesetzt. (Difference() ) so daß die Schrift auch entfernt wird.
Danach rechteckige Objekte angelegt um die neuen Löcher für Netzbuchse, Netzschalte, Rest, RS232 usw. angelegt und plaziert.
Da auch in der Difference() Schleife, werden diese Objekte auch als Löcher gezeichnet.
Es ist noch viel zutun um das F030 Gehäuse komplett fertigzustellen, aber es geht voran.
So sieht das ganze jetzt aus: Und der Code:
Code: Alles auswählen
//-----------------------------
// ATARI Falcon 030 Gehäuse
// Rekontruktion
// basierend auf dem 1040STF
// (C)01/2026 mega-hz
//-----------------------------
$fn = 50;
// NUR HILFSMITTEL!
// F030 Rückwand importieren
translate([70,95,80])
rotate([270,270,0])
color("Yellow")
import("F:/f030.svg", convexity=3);
//-----------------------------
// Rückwand
//-----------------------------
difference()
{
// 1040 und neue Blank Rückwand zusammenfügen
union()
{
// 1040STF Unterteil importieren
rotate([90,0,0])
color("White")
import("D:/3D Drucker Files/Atari1040ST_bottom_full.stl", convexity=3);
//Rückwand verschliessen
translate([15,-0.5,3])
rotate([90,0,0])
color("White")
cube([445,46, 3]);
}
// dünne Platte um die 1040 Beschriftung zu löschen
translate([15,0.6,3])
rotate([90,0,0])
color("White")
cube([445,46, 1.1]);
//-----------------------------
// Löcher
//-----------------------------
// Loch Reset Taster
translate(v = [40.75, -5, 11.5])
color("Green")
roundedcube([6.9, 9, 6.9], false, 0.25, "y");
// Loch Kaltgeräte Buchse(1.5mm höher als 1040)
translate(v = [64, -5, 21+1.5])
color("Green")
roundedcube([31.2, 9, 23,4], false, 2.5, "y");
// Loch Netzschalter(1.5mm höher als 1040)
translate(v = [128.8, -5, 28+1.5])
color("Green")
roundedcube([29, 9, 8,4], false, 0.25, "y");
// Loch LAN
translate(v = [138.8-27, 4, 16])
color("Yellow")
rotate([90,0,0])
cylinder(9, d=12);
// Loch Modem
translate(v = [138.8, -5, 9])
color("Yellow")
roundedcube([32.5, 9, 15], false, 0.5, "y");
}
//-----------------------------
// Beschriftungen
//-----------------------------
// Schrift RESET
translate(v = [49, -1, 4])
color("Green")
rotate([90,0,180])
linear_extrude(1)
text("RESET", font = "Monospac821 BT:style=Bold",size = 2.7);
// Schrift POWER Buchse
translate(v = [86, -1, 18])
color("Green")
rotate([90,0,180])
linear_extrude(1)
text("POWER", font = "Monospac821 BT:style=Bold",size = 2.7);
// Schrift LAN
translate(v = [114.8, -1, 4])
color("Green")
rotate([90,0,180])
linear_extrude(1)
text("LAN", font = "Monospac821 BT:style=Bold",size = 2.7);
// Schrift POWER Schalter
translate(v = [158, -1, 39])
color("Green")
rotate([90,0,180])
linear_extrude(1)
text("0 POWER 1", font = "Monospac821 BT:style=Bold",size = 2.7);
// Schrift RS232
translate(v = [160.8, -1, 4])
color("Green")
rotate([90,0,180])
linear_extrude(1)
text("RS232", font = "Monospac821 BT:style=Bold",size = 2.7);
// Higher definition curves
$fs = 0.01;
module roundedcube(size = [1, 1, 1], center = false, radius = 0.5, apply_to = "all") {
// If single value, convert to [x, y, z] vector
size = (size[0] == undef) ? [size, size, size] : size;
translate_min = radius;
translate_xmax = size[0] - radius;
translate_ymax = size[1] - radius;
translate_zmax = size[2] - radius;
diameter = radius * 2;
module build_point(type = "sphere", rotate = [0, 0, 0]) {
if (type == "sphere") {
sphere(r = radius);
} else if (type == "cylinder") {
rotate(a = rotate)
cylinder(h = diameter, r = radius, center = true);
}
}
obj_translate = (center == false) ?
[0, 0, 0] : [
-(size[0] / 2),
-(size[1] / 2),
-(size[2] / 2)
];
translate(v = obj_translate) {
hull() {
for (translate_x = [translate_min, translate_xmax]) {
x_at = (translate_x == translate_min) ? "min" : "max";
for (translate_y = [translate_min, translate_ymax]) {
y_at = (translate_y == translate_min) ? "min" : "max";
for (translate_z = [translate_min, translate_zmax]) {
z_at = (translate_z == translate_min) ? "min" : "max";
translate(v = [translate_x, translate_y, translate_z])
if (
(apply_to == "all") ||
(apply_to == "xmin" && x_at == "min") || (apply_to == "xmax" && x_at == "max") ||
(apply_to == "ymin" && y_at == "min") || (apply_to == "ymax" && y_at == "max") ||
(apply_to == "zmin" && z_at == "min") || (apply_to == "zmax" && z_at == "max")
) {
build_point("sphere");
} else {
rotate =
(apply_to == "xmin" || apply_to == "xmax" || apply_to == "x") ? [0, 90, 0] : (
(apply_to == "ymin" || apply_to == "ymax" || apply_to == "y") ? [90, 90, 0] :
[0, 0, 0]
);
build_point("cylinder", rotate);
}
}
}
}
}
}
}