OpenSCAD Benutzerhandbuch/Debughilfen
Modifikator-Zeichen
[Bearbeiten]Modifikator-Zeichen verändern das Aussehen oder Verhalten von Kind-Objekten. Sie sind besonders nützlich beim Debuggen, um bestimmte Objekte hervorzuheben oder temporär aus dem Rendering auszuschließen.
Fortgeschrittenes Konzept
[Bearbeiten]OpenSCAD nutzt verschiedene Bibliotheken – das kann zu leichten Inkonsistenzen im Vorschaumodus (F5) führen:
- Klassische Transformationen ("translate", "rotate", "scale", "mirror", "multmatrix") werden in der Vorschau über OpenGL gerendert.
- Fortgeschrittene Transformationen wie "resize" führen dagegen eine echte CGAL-Operation durch – sie verändern also das Geometrieobjekt selbst, nicht nur seine Darstellung.
Das wirkt sich besonders auf die Modifikator-Zeichen "#" und "%" aus: Beim "resize" wird z. B. oft das ursprüngliche, nicht das skalierte Objekt hervorgehoben – während bei "scale" das transformierte Objekt angezeigt wird.
Wichtig: Die Farbänderungen durch Modifikatoren erscheinen nur in der Vorschau (F5) – nicht im finalen Rendern (F6, CGAL).
Hintergrund-Modifikator ("%")
[Bearbeiten]Ignoriert den Teilbaum beim normalen Rendering und zeigt ihn stattdessen transparent grau an. Alle Transformationen werden weiterhin angewendet – aber das Objekt hat keine Wirkung auf boolesche Operationen!
Verwendung:
% { ... }
Beispiel:
difference() {
cylinder(h = 12, r=5, center = true, $fn=100);
// Dieser Zylinder wird abgezogen
rotate([90,0,0]) cylinder(h = 15, r=1, center = true, $fn=100);
// Dieser Zylinder wird NUR angezeigt – NICHT abgezogen!
%rotate([0,90,0]) cylinder(h = 15, r=3, center = true, $fn=100);
}
Debug-Modifikator ("#")
[Bearbeiten]Zeigt das Objekt normal an – zusätzlich aber auch transparent rosa als „Geisterbild“. Ideal, um Zwischenergebnisse zu prüfen.
Verwendung:
# { ... }
Beispiel:
difference() {
cylinder(h = 12, r=5, center = true, $fn=100);
// Beide abgezogenen Zylinder werden zusätzlich rosa angezeigt
#rotate([90,0,0]) cylinder(h = 15, r=1, center = true, $fn=100);
#rotate([0,90,0]) cylinder(h = 15, r=3, center = true, $fn=100);
}
Wurzel-Modifikator ("!")
[Bearbeiten]Ignoriert alles außerhalb dieses Teilbaums und verwendet ihn als neues Hauptobjekt.
Verwendung:
! { ... }
Beispiel:
difference() {
cube(10, center = true);
translate([0, 0, 5]) {
!rotate([90, 0, 0]) {
#cylinder(r = 2, h = 20, center = true, $fn = 40);
}
}
}
Deaktivierungs-Modifikator ("*")
[Bearbeiten]Ignoriert den gesamten Teilbaum – als wäre er auskommentiert. Im Gegensatz zu "//" oder "/* */" versteht dieser Modifikator die Baumstruktur – du kannst ganze Blöcke auf einen Klick deaktivieren.
Verwendung:
* { ... }
Beispiel:
difference() {
cube(10, center = true);
translate([0, 0, 5]) {
rotate([0, 90, 0]) {
cylinder(r = 2, h = 20, center = true, $fn = 40);
}
// Dieser Teil wird komplett ignoriert
*rotate([90, 0, 0]) {
#cylinder(r = 2, h = 20, center = true, $fn = 40);
}
}
}
Echo-Anweisungen
[Bearbeiten]Mit "echo()" kannst du Werte in die Konsole ausgeben – ideal zum Debuggen.
- Zahlen werden auf 5 signifikante Stellen gerundet.
- Nützlicher Trick: "echo(var=var)" zeigt Name und Wert übersichtlich an.
Beispiele:
my_h = 50;
my_r = 100;
echo("Dies ist ein Zylinder mit h=", my_h, " und r=", my_r);
echo(my_h = my_h, my_r = my_r); // → ECHO: my_h = 50, my_r = 100
cylinder(h = my_h, r = my_r);