Definition
Dieses Module erstellt asymmetrische Kreuzformen mit ab- oder eingerundeten Kanten. Generell eher für andere Module gedacht.
Übersicht über die Maße

(zum Vergrößern anklicken)
Legende
- bhoch − die Breite des vertikalen Balkens
- bquer − die Breite des horizontalen Balkens
- l1 − die Kantenlänge des oberen Balkens
- l2 − die Kantenlänge des rechten Balkens
- l3 − die Kantenlänge des unteren Balkens
- l4 − die Kantenlänge des linken Balkens
- Reinrunden − der Radius der Einrundung der inneren Ecke
- Rausrunden − der Radius der Abrundung der äüßeren Ecke
- pm − der Mittelpunkt des Quadrats, welches sich durch die Überlappung der Balken ergibt.
Wird Zentrierung gewünscht, so hat dieser Punkt den Vektor [0,0].
Die Form hat die Gesamthöhe von l1 + l3 + bhoch und die Gesamtbreite von l2 + l4 + bquer.
Parameter
| b_quer |
die Breite des horizontalen Balkens |
| b_hoch |
die Breite des vertikalen Balkens |
| l_1 |
die Kantenlänge des oberen Balkens |
| l_2 |
die Kantenlänge des rechten Balkens |
| l_3 |
die Kantenlänge des unteren Balkens |
| l_4 |
die Kantenlänge des linken Balkens |
| rEinrunden |
Der Radius der inneren Ecken |
| Optional; wenn ausgelassen werden die inneren Ecken nicht eingerundet. |
| rAbrunden |
Der Radius der abgerundeten äußeren Ecken |
| Optional; wenn ausgelassen werden diese nicht abgerundet. |
| fn |
Die Anzahl der Kanten, die einen gedachten Vollkreis bilden |
| Optional. Ein hoher Wert sorgt für glatte Rundungen, jedoch wird dann das Rendern deutlich länger dauern. |
| center |
gibt an, ob die Form auf dem Koordinatensystem zentriert werden soll. Optionale Angabe, Standard ist false. |
Datei und Abhängigkeiten
Datei
mod_2D.scad
Abhängigkeiten
keine
Beispiele
Beispiel 1: Aufruf ohne optionale Parameter
- bquer = 20;
- bhoch = 30;
- l1 = 25;
- l2 = 55;
- l3 = 45;
- l4 = 35;
-
- kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4);
die Kreuzform ohne Radien, nicht zentriert
Beispiel 2: Aufruf mit verrundeter Innenkante
- bquer = 20;
- bhoch = 30;
- l1 = 25;
- l2 = 55;
- l3 = 45;
- l4 = 35;
- rEin = 5;
-
- kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin);
Die inneren Ecken sind eingerundet.
Beispiel 3: Aufruf mit verrundeten Ecken
- bquer = 20;
- bhoch = 30;
- l1 = 25;
- l2 = 55;
- l3 = 45;
- l4 = 35;
- rEin = 5;
- rAus = 10;
- kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin,rAus);
alle Ecken eingerundet
Beispiel 4: Aufruf mit extra kleiner Anzahl an Polygonseiten
- bquer = 20;
- bhoch = 30;
- l1 = 25;
- l2 = 55;
- l3 = 45;
- l4 = 35;
- rEin = 5;
- rAus = 10;
- fn = 4;
-
- kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin,rAus,fn);
Eine kleine Anzahl an Polygonseiten sorgt für Schrägen
Beispiel 5: Aufruf mit allen Parametern, zentriert
- bquer = 20;
- bhoch = 30;
- l1 = 25;
- l2 = 55;
- l3 = 45;
- l4 = 35;
- rEin = 5;
- rAus = 10;
- fn = 144;
- center = true;
-
- kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin,rAus,fn, center);
Die Kreuzform ist zentriert und vollständig eingerundet.
Beispiel 6: Aufruf mit nicht passenden Parametern
- bquer = 20;
- bhoch = 30;
- l1 = 25;
- l2 = 55;
- l3 = 45;
- l4 = 35;
- rEin = 5;
- rAus = 50; // <===
- fn = 144;
- center = true;
-
- kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin,rAus,fn, center);
Sieht womöglich hübsch aus, ist aber unnütz: nicht korrespondierende Parameter.
Quellcode
- module kreuz_asym_r(b_quer, b_hoch, l_1, l_2, l_3, l_4, rEinrunden=0, rAbrunden=0, fn = 36, center=false)
- {
- // Verschieben?
- trans_X = center ? 0 : b_quer/2 + l_4;
- trans_Y = center ? 0 : b_hoch/2 + l_3;
-
- // Mittelpunkte innen
- summanden = [0,0,l_2,-1*l_4,0,0,l_1,-1*l_3];
-
- innenX = concat(
- [for (iIndex=[0:3])
- (1 - 2*(iIndex%2)) * ((b_quer/2) -rAbrunden) + summanden[iIndex]
- ]
- );
- innenY = concat(
- [for (iIndex=[4:7])
- (1 - 2*(iIndex%2)) * ((b_hoch/2) -rAbrunden) + summanden[iIndex]
- ]
- );
-
- // Mittelpunkte außen
- punkteAussen = concat(
- [for(x=[1,-1]) for(y=[1,-1])[x * (b_quer/2 +rEinrunden),
- y * (b_hoch/2 + rEinrunden)]]
- );
-
- // Winkel
- w_i = 360/fn;
-
- punkte = concat(
- [for(winkel = [270 : w_i : 360])
- [innenX[1] + rAbrunden*sin(winkel), innenY[2] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [0: w_i : 90])
- [innenX[0] + rAbrunden*sin(winkel), innenY[2] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [270 : -1*w_i : 180])
- [punkteAussen[0].x + rEinrunden*sin(winkel), punkteAussen[0].y + rEinrunden*cos(winkel)]],
-
- [for(winkel = [0 : w_i : 90])
- [innenX[2] + rAbrunden*sin(winkel), innenY[0] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [90 : w_i : 180])
- [innenX[2] + rAbrunden*sin(winkel), innenY[1] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [360 : -1*w_i : 270])
- [punkteAussen[1].x + rEinrunden*sin(winkel), punkteAussen[1].y + rEinrunden*cos(winkel)]],
-
- [for(winkel = [90 : w_i : 180])
- [innenX[0] + rAbrunden*sin(winkel), innenY[3] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [180 : w_i : 270])
- [innenX[1] + rAbrunden*sin(winkel), innenY[3] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [90 : -1*w_i : 0])
- [punkteAussen[3].x + rEinrunden*sin(winkel), punkteAussen[3].y + rEinrunden*cos(winkel)]],
-
- [for(winkel = [180 : w_i : 270])
- [innenX[3] + rAbrunden*sin(winkel), innenY[1] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [270 : w_i : 360])
- [innenX[3] + rAbrunden*sin(winkel), innenY[0] + rAbrunden*cos(winkel)]],
-
- [for(winkel = [180 : -1*w_i : 90])
- [punkteAussen[2].x + rEinrunden*sin(winkel), punkteAussen[2].y + rEinrunden*cos(winkel)]]
-
- );
- translate([trans_X,trans_Y]) {
- polygon(punkte);
- }
- }