i

Eigene Module

Eigene Module verwenden

Manche Objekte möchte man mehrfach verwenden. Dazu kann man in OpenSCAD eigene Module erstellen, die sich im Wesentlichen wie Unterprogramme verhalten.

Dadurch ergeben sich Vorteile:

  • Das Skript wird übersichtlicher
  • Objekte können leichter wiederverwendet werden
  • Objekte können durch Parameter variabel gehalten werden

Ein Modul ohne Parameter

180mm langer symmetrischer Träger[1]

Möchte man Objekte mit symmetrischen Eigenschaften erzeugen, so kann man sich einige Arbeit ersparen, indem man diese Symmetrie ausnutzt und nur einen Teil des Objektes generiert.

module viertelTraeger(){
    polygon(points=[[0,4],[30,4],[45,1],[45,0],[80,0],[80,5],[45.396,5],[30.396,8],[0,8]]);
}

Wenn du eine Skizze vorher exakt anfertigst, kannst du die Werte ablesen (klicke auf die Skizze, um sie zu vergößern):

Hierdurch wird zunächst ein Viertel des Objektes generiert:

Ein Viertel des 180mm langer symmetrischer Träger[3]

Dieser wird nun entsprechend gespiegelt, rotiert und extrudiert:

linear_extrude(1){
    // ganzer Träger bestehend aus:
    viertelTraeger();
    mirror([0,1,0]) viertelTraeger();   // Spiegelung nach "unten"
    mirror([1,0,0]) viertelTraeger();   // Spiegelung nach "links"
    rotate([0,0,180]) viertelTraeger(); // Punktspiegelung am Ursprung
}

Ein Modul mit Parametern

Haken[4]

Es soll ein Haken erzeugt werden. Dazu wurde folgende Skizze auf Papier gezeichnet (klicke auf das Bild, um es zu vergrößern):

Skizze eines Hakens mit Koordinaten[5]

Aufgabe 1: Haken ohne Parameter

Erstelle ein Modul (wie oben, ohne Parameter), das genau diesen Haken (in 2D) erzeugt. Klicke dazu auf die Skizze, damit du die Koordinaten ablesen kannst.

Deine Lösung sollte in etwa so aussehen - allerdings kannst du bei einem Polygon mit einem beliebigen Punkt starten...

module Haken(){
    polygon(points=[[0,8],[4,12],[4,-12],[0,-8]]);
    translate([0,12,0]) circle(r=4);
    translate([0,-12,0]) circle(r=4);
}
Haken();

Aufgabe 2: Haken mit Parameter

Manchmal möchte man Elemente in der Größe flexibel festlegen, ohne scale() oder resize() zu verwenden. Du kannst ein Modul auch mit Parametern versehen (wie bei einer Funktion in der Programmierung) und dann hinterher mit konkreten Werten für diese Parameter aufrufen.

Erstelle ein Modul Haken(b,h), so dass der Aufruf Haken(4,16); den gleichen Haken erzeugt, wie zuvor.
Zunächst: Damit du weißt, welche Bedeutung die Parameter b und h haben, klicke noch einmal auf die Skizze und werde dir darüber klar, dass alle Punkte und auch der Radius der Kreise nur von diesen Parametern abhängen.

Deine Lösung sollte in etwa so aussehen - allerdings kannst du bei einem Polygon mit einem beliebigen Punkt starten...

module Haken(b,h){
    polygon(points=[[0,h/2],[b,h/2+b],[b,-(h/2+b)],[0,-h/2]]);
    translate([0,h/2+b,0]) circle(r=b);
    translate([0,-(h/2+b),0]) circle(r=b);
}
Haken(4,16);

Anwendung: Maskenhalter

Komposition aus dem gesamten Träger und 3 Haken auf jeder Seite[6]

Es soll ein Maskenhalter für medizinische und FFP2-Masken erzeugt werden, um die Ohren ein wenig zu schonen.
Dabei sollen der Träger eine Höhe von 1mm und die Haken eine Höhe von 1,6mm haben.

Aufgabe 3: Module kombinieren

Verwende die oben erarbeiteten Module (mit oder ohne Parameter - ganz wie du willst), um den Maskenhalter wie dargestellt zu erzeugen. Die Farben spielen dabei keine Rolle.

Hier eine Lösung ohne Parameter:

$fn=100;

module viertelTraeger(){
    polygon(points=[[0,4],[30,4],[45,1],[45,0],[80,0],[80,5],[45.396,5],[30.396,8],[0,8]]);  
}

module Haken(){
    polygon(points=[[0,8],[4,12],[4,-12],[0,-8]]);
    translate([0,12,0]) circle(r=4);
    translate([0,-12,0]) circle(r=4);
}

color("#0077b6")linear_extrude(1){
    // ganzer Träger bestehend aus:
    viertelTraeger();
    mirror([0,1,0]) viertelTraeger();
    mirror([1,0,0]) viertelTraeger();
    rotate([0,0,180]) viertelTraeger();
}

color("#66b8a0")linear_extrude(1.6){
    // die Haken auf der rechten Seite
    translate([50+0,0,0]) Haken();
	translate([50+15,0,0]) Haken();
	translate([50+30,0,0]) Haken();
	// die Haken auf der linken Seite
    mirror([1,0,0]){
        translate([50+0,0,0]) Haken();
        translate([50+15,0,0]) Haken();
        translate([50+30,0,0]) Haken();
    }
}

Quellen

Suche

v
14.2.3.3.5
inf-schule.de/projekte/3d_druck/grundlage_cad/openscad/eigene_module
inf-schule.de/14.2.3.3.5
inf-schule.de/@/page/0u3cEAeSUSe5s7jG

Rückmeldung geben