Kurzdokumentation meiner OpenSCAD-Module

kreuz_asym_r()

Definition

Dieses Module erstellt asymmetrische Kreuzformen mit ab- oder eingerundeten Kanten. Generell eher für andere Module gedacht.

Übersicht über die Maße

Skizze für die Übersicht der Maße
(zum Vergrößern anklicken)

Legende

  1. bhoch − die Breite des vertikalen Balkens
  2. bquer − die Breite des horizontalen Balkens
  3. l1 − die Kantenlänge des oberen Balkens
  4. l2 − die Kantenlänge des rechten Balkens
  5. l3 − die Kantenlänge des unteren Balkens
  6. l4 − die Kantenlänge des linken Balkens
  7. Reinrunden − der Radius der Einrundung der inneren Ecke
  8. Rausrunden − der Radius der Abrundung der äüßeren Ecke
  9. 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

  1. bquer = 20;
  2. bhoch = 30;
  3. l1 = 25;
  4. l2 = 55;
  5. l3 = 45;
  6. l4 = 35;
  7.  
  8. kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4);

die Kreuzform ohne Radien, nicht zentriert
die Kreuzform ohne Radien, nicht zentriert

Beispiel 2: Aufruf mit verrundeter Innenkante

  1. bquer = 20;
  2. bhoch = 30;
  3. l1 = 25;
  4. l2 = 55;
  5. l3 = 45;
  6. l4 = 35;
  7. rEin = 5;
  8.  
  9. kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin);

Die inneren Ecken sind eingerundet.
Die inneren Ecken sind eingerundet.

Beispiel 3: Aufruf mit verrundeten Ecken

  1. bquer = 20;
  2. bhoch = 30;
  3. l1 = 25;
  4. l2 = 55;
  5. l3 = 45;
  6. l4 = 35;
  7. rEin = 5;
  8. rAus = 10;
  9. kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin,rAus);

alle Ecken eingerundet
alle Ecken eingerundet

Beispiel 4: Aufruf mit extra kleiner Anzahl an Polygonseiten

  1. bquer = 20;
  2. bhoch = 30;
  3. l1 = 25;
  4. l2 = 55;
  5. l3 = 45;
  6. l4 = 35;
  7. rEin = 5;
  8. rAus = 10;
  9. fn = 4;
  10.  
  11. kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin,rAus,fn);

Eine kleine Anzahl an Polygonseiten sorgt für Schrägen
Eine kleine Anzahl an Polygonseiten sorgt für Schrägen

Beispiel 5: Aufruf mit allen Parametern, zentriert

  1. bquer = 20;
  2. bhoch = 30;
  3. l1 = 25;
  4. l2 = 55;
  5. l3 = 45;
  6. l4 = 35;
  7. rEin = 5;
  8. rAus = 10;
  9. fn = 144;
  10. center = true;
  11.  
  12. kreuz_asym_r(bquer,bhoch,l1,l2,l3,l4,rEin,rAus,fn, center);

Die Kreuzform ist zentriert und vollständig eingerundet.
Die Kreuzform ist zentriert und vollständig eingerundet.

Beispiel 6: Aufruf mit nicht passenden Parametern

  1. bquer = 20;
  2. bhoch = 30;
  3. l1 = 25;
  4. l2 = 55;
  5. l3 = 45;
  6. l4 = 35;
  7. rEin = 5;
  8. rAus = 50; // <===
  9. fn = 144;
  10. center = true;
  11.  
  12. 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.
Sieht womöglich hübsch aus, ist aber unnütz: nicht korrespondierende Parameter.

Quellcode

  1. module kreuz_asym_r(b_quer, b_hoch, l_1, l_2, l_3, l_4, rEinrunden=0, rAbrunden=0, fn = 36, center=false)
  2. {
  3. // Verschieben?
  4. trans_X = center ? 0 : b_quer/2 + l_4;
  5. trans_Y = center ? 0 : b_hoch/2 + l_3;
  6.  
  7. // Mittelpunkte innen
  8. summanden = [0,0,l_2,-1*l_4,0,0,l_1,-1*l_3];
  9.  
  10. innenX = concat(
  11. [for (iIndex=[0:3])
  12. (1 - 2*(iIndex%2)) * ((b_quer/2) -rAbrunden) + summanden[iIndex]
  13. ]
  14. );
  15. innenY = concat(
  16. [for (iIndex=[4:7])
  17. (1 - 2*(iIndex%2)) * ((b_hoch/2) -rAbrunden) + summanden[iIndex]
  18. ]
  19. );
  20.  
  21. // Mittelpunkte außen
  22. punkteAussen = concat(
  23. [for(x=[1,-1]) for(y=[1,-1])[x * (b_quer/2 +rEinrunden),
  24. y * (b_hoch/2 + rEinrunden)]]
  25. );
  26.  
  27. // Winkel
  28. w_i = 360/fn;
  29.  
  30. punkte = concat(
  31. [for(winkel = [270 : w_i : 360])
  32. [innenX[1] + rAbrunden*sin(winkel), innenY[2] + rAbrunden*cos(winkel)]],
  33.  
  34. [for(winkel = [0: w_i : 90])
  35. [innenX[0] + rAbrunden*sin(winkel), innenY[2] + rAbrunden*cos(winkel)]],
  36.  
  37. [for(winkel = [270 : -1*w_i : 180])
  38. [punkteAussen[0].x + rEinrunden*sin(winkel), punkteAussen[0].y + rEinrunden*cos(winkel)]],
  39.  
  40. [for(winkel = [0 : w_i : 90])
  41. [innenX[2] + rAbrunden*sin(winkel), innenY[0] + rAbrunden*cos(winkel)]],
  42.  
  43. [for(winkel = [90 : w_i : 180])
  44. [innenX[2] + rAbrunden*sin(winkel), innenY[1] + rAbrunden*cos(winkel)]],
  45.  
  46. [for(winkel = [360 : -1*w_i : 270])
  47. [punkteAussen[1].x + rEinrunden*sin(winkel), punkteAussen[1].y + rEinrunden*cos(winkel)]],
  48.  
  49. [for(winkel = [90 : w_i : 180])
  50. [innenX[0] + rAbrunden*sin(winkel), innenY[3] + rAbrunden*cos(winkel)]],
  51.  
  52. [for(winkel = [180 : w_i : 270])
  53. [innenX[1] + rAbrunden*sin(winkel), innenY[3] + rAbrunden*cos(winkel)]],
  54.  
  55. [for(winkel = [90 : -1*w_i : 0])
  56. [punkteAussen[3].x + rEinrunden*sin(winkel), punkteAussen[3].y + rEinrunden*cos(winkel)]],
  57.  
  58. [for(winkel = [180 : w_i : 270])
  59. [innenX[3] + rAbrunden*sin(winkel), innenY[1] + rAbrunden*cos(winkel)]],
  60.  
  61. [for(winkel = [270 : w_i : 360])
  62. [innenX[3] + rAbrunden*sin(winkel), innenY[0] + rAbrunden*cos(winkel)]],
  63.  
  64. [for(winkel = [180 : -1*w_i : 90])
  65. [punkteAussen[2].x + rEinrunden*sin(winkel), punkteAussen[2].y + rEinrunden*cos(winkel)]]
  66.  
  67. );
  68. translate([trans_X,trans_Y]) {
  69. polygon(punkte);
  70. }
  71. }