Zum Inhalt springen

OpenSCAD Benutzerhandbuch/Debughilfen

Aus Wikibooks

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);
}

Vorlage:Multiple image

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);
}

Vorlage:Multiple image

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);
		}
	}
}

Vorlage:Multiple image

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);
		}
	}
}

Vorlage:Multiple image

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);