OpenSCAD Tutorial am Beispiel eines Bausteins

In dieser Rubrik Entwicklung, Konstruktion, Design uvm. auslassen

Moderator: webmaster

Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Hallo zusammen,

da unser Webmaster schon mal darum gebeten hatte, hier ein Thread zum Thema OpenSCAD.

Ich werde hier die Entwicklung meines Bausteines präsentieren, damit wir nicht auf das fertige Modell warten müssen, anhand der aktuell vorliegenden Daten. Bitte also nicht wundern, wenn sich das Teil noch im DRAFT Modus befindet.

@Webmaster : Leider kann unser Forum nur Bilder hochladen, ich kann also die Files nur als Beiträge posten. Vielleicht kann man das ja noch mal ändern, damit man wenigstens txt files hochladen kann.

Ich habe den Code etwas dokumentiert, damit etwas verständlich wird, was er tut.
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:20, insgesamt 2-mal geändert.
Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Dies ist eine Hilf Bibliothek die ich Stück für Stück aufbaue um Funktionen zu hinterlegen, die ich immer mal wieder in OpenSCAD benötige.

Code: Alles auswählen

// -----------------------------------------------------------------------------------------
// Gruppe : Utilities
// Datei : Utilities
// Beschreibung : Sammlung verschiedener Funktionen, die ich oft nutze. 
// Abhängigkeiten : Keine
// Release Version : 0.3
// Release Date : 04.02.2021
// Editor : OpenSCAD
// -----------------------------------------------------------------------------------------
// Autor siegfried.riehle@gmail.com
// Lizenz :  GNU Public License
// Der Programm Code kann frei verwendet und modifiziert werden. Der Code wird ohne 
// Gewährleistung oder Anspruch auf korrekte Funktionalität überlassen. 
// Bei Weitergabe, ist ein Hinweis auf den Original Autor im Source Code zu hinterlassen.
// -----------------------------------------------------------------------------------------


//Erzeugt ein KuchenSegment
module Pie(r=10, start_angle=0, end_angle=45)
{
  polygon(pie(r, start_angle, end_angle));

  function pie(r=40, a1=0, a2=150) =
    let(start = a1%360)
    let(end = (a2%360-start)>=0?a2%360:a2%360+360)
    let(fa = $fn==0?$fa:360/$fn)
    let(step = (end-start)/ceil((end-start)/fa)- 1e-7)
    r*[[0,0], for(i=[start:step:end]) [cos(i), sin(i)]];
}

//Erzeugt einen Donut oder ein TeilausSchnitt davon. 
module Donut(durchmesser, hoehe, angle) {
    $fa = 1;
    $fs = 0.4;
    wheel_radius = durchmesser / 2;
    tyre_diameter = hoehe;
    rotate_extrude(angle=angle) {
        translate([wheel_radius - tyre_diameter/2, 0])
            circle(d=tyre_diameter);
    }
}
Dateianhänge
Utilities.txt
(1.53 KiB) 403-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:23, insgesamt 2-mal geändert.
Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Das hier ist der Steckring für die GrundPlatte.

Code: Alles auswählen

// -----------------------------------------------------------------------------------------
// Gruppe : Gravitrax
// Datei : SteckRing
// Beschreibung : HalteRing für Gravitrax Grundstein. 
// Abhängigkeiten : Kann nur mit <GrundStein.scad> verwendet werden
// Release Version : 0.3
// Release Date : 04.02.2021
// Editor : OpenSCAD
// -----------------------------------------------------------------------------------------
// Autor siegfried.riehle@gmail.com
// Lizenz :  GNU Public License
// Der Programm Code kann frei verwendet und modifiziert werden. Der Code wird ohne 
// Gewährleistung oder Anspruch auf korrekte Funktionalität überlassen. 
// Bei Weitergabe, ist ein Hinweis auf den Original Autor im Source Code zu hinterlassen.
// -----------------------------------------------------------------------------------------


// Utility Libary mit Hilfsfunktionen
use <C:\git\3dDruck\CAD\OpenSCAD\Libaries\Private\utilities.scad>;

// Der GrundStein
use <GrundStein.scad>;


// Die $preview Variable erkennt ob man mit F5 eine Preview Darstellung hat oder F6 zum rendern tippt. 
// Dreht das modell zur Druck geeigneten Position oder im preview zur besseren Modell Darstellung
if ($preview == true) { 
        rotate([0,0,0]) SteckRing();
}else {
        rotate([180,0,0]) SteckRing();
}

// Der GrundStein zum verbinden, falls Bedarf besteht zum einblenden. (*) entfernen
if ($preview == true) { 
    *%translate([0,0,-0.65]) GrundStein();
}




$fn=6; // Mass für ein runde Oberfläche aus wieviel Segmenten sie besteht. Erzeugt Mithilfe eines Cylinder Hexagons
ringDurchMesser = 20.21;
durchmesser = 30 + ringDurchMesser; // InnenMass GrundStein
innenLoch = durchmesser - ringDurchMesser;
hoehe = 1.5;
offset = 4.6;
innenRingBreite = durchmesser - offset;

// Haupt Modul Block
module SteckRing() {
    translate([0,0,0]) rotate([0,180,0]){
        GrundPlatte();
        Klammern();
        Hacken();
    }
}


// BasisPlatte des SteckRing;
module GrundPlatte(){
    difference(){
        union() {
            intersection() { 
                cylinder(d=durchmesser, h = hoehe, center = true); // Hexagon
                cylinder(d=durchmesser-0.5, h = hoehe, $fn=100, center = true); // Kreis

            }
            
        }
        translate([0,0,-2]) cylinder(d=innenLoch, h=5);
    }
}


// Die Klemm MarkierungsVerbindungen zum GrundStein
module Hacken() {
    distanzMitte = durchmesser / 2 - 3.35;     
    rotateVektor = [0,60,-60,120,-120,180];
    zOffset = -0.0;     
   
    //Schleife zum erzeugen der drei Elemente pro Seite
    for (rd = rotateVektor) {
        rotate([0,0,rd]) translate([8,-distanzMitte,zOffset]) RastHacken();
        rotate([0,0,rd]) translate([-8,-distanzMitte,zOffset]) RastHacken();
    }

    // Ein Klemm Element    
    module RastHacken() {
        breite = 5;
        hoehe=1.5;
        laenge=1.5;
            // Erzeugt als Hüllen Objekt mit den zwei Platten ein Dreieck

        hull() { 
            translate([0,0,0]) cube([breite,0.01,laenge], center = true);
            translate([0,-laenge/2,hoehe/2]) cube([breite,hoehe,0.01], center = true);
        }

   }
}

// Die Klammern für die Gravitrax Platte;
module Klammern() {
    distanzMitte = innenLoch/2 - 1.15;     
    rotateVektor = [0,60,-60,120,-120,180];

     // Schleife zum erzeugen der 6 Klammern     
    for (rd = rotateVektor) {
        rotate([0,0,rd]) translate([0,distanzMitte,0]) Klammer();
    }
    
    // Eine Klammer für die Gravitrax Platte
    module Klammer() {
        laenge = 13.11;
        breite = 2.0;
        hoehe = 3.4 + hoehe;
        translate([0, 0, 1.7]) cube([ laenge, breite, hoehe], center = true);
    }
}
Dateianhänge
SteckRing.txt
(3.72 KiB) 390-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:24, insgesamt 2-mal geändert.
Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Das hier ist der Grundstein als Basis Ausgangspunkt

Code: Alles auswählen

// -----------------------------------------------------------------------------------------
// Gruppe : Gravitrax
// Datei : GrundStein
// Beschreibung : GrundStein für Gravitrax. 
// Abhängigkeiten : Kann nur mit <SteckRing.scad> verwendet werden
// Release Version : 0.3
// Release Date : 04.02.2021
// Editor : OpenSCAD
// -----------------------------------------------------------------------------------------
// Autor siegfried.riehle@gmail.com
// Lizenz :  GNU Public License
// Der Programm Code kann frei verwendet und modifiziert werden. Der Code wird ohne 
// Gewährleistung oder Anspruch auf korrekte Funktionalität überlassen. 
// Bei Weitergabe, ist ein Hinweis auf den Original Autor im Source Code zu hinterlassen.
// -----------------------------------------------------------------------------------------

$fn=6; // Mass für ein runde Oberfläche aus wieviel Segmenten sie besteht. Erzeugt Mithilfe eines Cylinder Hexagons
hoehe=10;
wandstaerke=7.88; 
durchmesser=59 + 2.21 + wandstaerke;
innenMass = durchmesser - (wandstaerke * 2)-3.09;


// Utility Libary mit Hilfsfunktionen
use <C:\git\3dDruck\CAD\OpenSCAD\Libaries\Private\utilities.scad>;

// Der SteckRing um den GrundStein auf die Gravitrax Platte zu verbinden
use <SteckRing.scad>;



GrundStein();

// Das HauptModul
module GrundStein() {
    union() {
        Platte();
        // Der SteckRing zum verbinden, falls Bedarf besteht zum einblenden. (*) entfernen
        // Die $preview Variable erkennt ob man mit F5 eine Preview Darstellung hat oder F6 zum rendern tippt. 
        // Blendet den SteckRing im preview ein
        if ($preview == true) { 
            *%translate([0,0,0.74]) SteckRing();
        }
    }
}

// Der Baustein
module Platte() {
    union() {
        difference() { // Ausschnitt der Bohrungen und SchienenAnschluesse
            union() {
                difference() { // Ausschnitt des Innen Teils zum erzeugen des Rahmen
                    // Das Aussen Hexagon
                    // Die Intersection erzeugt eine Summe beider Flächen aus einem Hexagon und einem Kreis. 
                    // Dies dient zum abrunden der Kanten des Hexagon
                    intersection() { 
                        cylinder(d=durchmesser, h = hoehe); // Hexagon
                        cylinder(d=durchmesser-0.5, h = hoehe, $fn=100); // Kreis

                    }
                    // Das Innen Hexagon für den Ausschnitt des Hohlraums
                    // Die Intersection erzeugt eine Summe beider Flächen aus einem Hexagon und einem Kreis. 
                    // Dies dient zum abrunden der Kanten des Hexagon
                    translate([0,0, -2.5]) intersection() {
                        cylinder(d=innenMass, h = hoehe + 5); // Hexagon
                        cylinder(d=innenMass - 0.5, h = hoehe + 5, $fn=100); // Kreis
                    }
                    
                    // Das ausschneiden der aus dem SteckRing herausstehenden Klemm Hacken
                    scale([1,1,1.02]) translate([0,0,0.75]) rotate([180,0,0]) Hacken();
                }
            }      
            
            // Die Verbinder Lochbohrungen  
            VerbinderBohrungen();
            
            // Die Eingangsbohrungen für den Schienenanschluss der Gravitrax Schienen
            SchienenAnschluesse();
        }
    }
}


// Die Verbinder Lochbohrungen zum einstecken von Verbinder Stiften um stapeln
module VerbinderBohrungen() {
    distanzMitte = innenMass / 2 + 4;
    rotateVektor = [0,180,60,-60,120,-120];
    
    // Schleife zum erzeugen der 6 Bohrungen
    for (rd = rotateVektor) {
        rotate([0,0,rd]) translate([distanzMitte,0,0]) VerbinderBohrung();
    }
    
    // eine VerbinderBohrung
    module VerbinderBohrung() {
        $fn=6;
        durchmesser = 6;
        hoehe = 10;
        translate([0,0,-1]) cylinder(d=durchmesser, h=hoehe + 2);
    }
}



// Die SchienenAnschlüsse
module SchienenAnschluesse() {
    distanzMitte = -25;
    rotateVektor = [0,180,60,-60,120,-120];
    translate([0,distanzMitte,0]) SchienenAnschlussStempel();
    
    // schleife zum erzeugen der 6 Schienenanschlüsse
    for (rd = rotateVektor) {
        rotate([0,0,rd]) translate([0,distanzMitte,0]) SchienenAnschlussStempel();
    }
}


// Ein Scheinenanschluss Modul, gedacht für die SchienenAnschluesse oder als gegenstück für den Einzel Schienen Verschluss 
module SchienenAnschlussStempel() {
    durchmesser = 13.6;
    
    difference() {
        union() {
            translate([0,0,hoehe + 1]) rotate([0,90,90]) cylinder(d = durchmesser + 0.2, h = hoehe + 1, $fn=500, center = true);
            SchienenAnschlussStempelHelper(1);
            SchienenAnschlussStempelHelper(-1);
        }
        translate([-durchmesser/2 -0.05,-wandstaerke/2 - 1,hoehe + 0.01]) cube([durchmesser + 0.1,wandstaerke + 2,hoehe]);
    }
    
    // Erzeugt die Aussparungen im SchienenAnschluss. 
    // -1 = links, 1 = rechts
    module SchienenAnschlussStempelHelper(pos) {
        differenzMitte = -5.03;
        hull() {
            translate([differenzMitte * pos ,-3.1,6]) cube([3.6,2,10-1],center = true);
            translate([(differenzMitte ) * pos ,0.6,6]) cylinder(d = 3.6, h = 10 - 1, $fn=500, center = true);
        }
        translate([differenzMitte * pos,-4,7+0.4]) cube([3.6,2,10-1],center = true);
    }
}
Dateianhänge
GrundStein.txt
(5.38 KiB) 381-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:24, insgesamt 3-mal geändert.
Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Das Hier ist das Inlay für dem Hohlraum als simpler Block aus dem dann die Erweiterungen herausgeschnitten werden.

Code: Alles auswählen

// -----------------------------------------------------------------------------------------
// Gruppe : Gravitrax
// Datei : Inlay
// Beschreibung : Inlay für den Grundstein. Das Modul wird von allen weiteren Inlays als Basis Block verwendet
// Abhängigkeiten : Grund Stein für Inlays. Hat alleine keine Funktion
// Release Version : 0.3
// Release Date : 31.01.2021
// Editor : OpenSCAD
// -----------------------------------------------------------------------------------------
// Autor siegfried.riehle@gmail.com
// Lizenz :  GNU Public License
// Der Programm Code kann frei verwendet und modifiziert werden. Der Code wird ohne 
// Gewährleistung oder Anspruch auf korrekte Funktionalität überlassen. 
// Bei Weitergabe, ist ein Hinweis auf den Original Autor im Source Code zu hinterlassen.
// -----------------------------------------------------------------------------------------


use <C:\git\3dDruck\Gravitrax\Grundstein\src\GrundStein.scad>;
use <C:\git\3dDruck\Gravitrax\Grundstein\src\SteckRing.scad>;



// Die $preview Variable erkennt ob man mit F5 eine Preview Darstellung hat oder F6 zum rendern tippt. 
// Zum Einblenden des GrundStein + SteckRing bei Bedarf (*) entfernen
if ($preview == true) { 
    *%translate([0,0,-4.3]) GrundStein();
    *translate([0,0,-3.6]) SteckRing();
}

Inlay();


// Das HauptModul
module Inlay() {
    bodenPlatte = 1.5;
    hoehe=10;
    wandstaerke=10;
    durchmesser=73.3;
    offset = 3.09;

        // Die Intersection erzeugt eine Summe beider Flächen aus einem Hexagon und einem Kreis. 
        // Dies dient zum abrunden der Kanten des Hexagon
        translate([0,0, bodenPlatte]) intersection() {
            cylinder(d=durchmesser - (wandstaerke * 2)-offset, h = hoehe - bodenPlatte, $fn=6, center = true); //Hexagon
            cylinder(d=durchmesser - (wandstaerke *2) -(offset + 0.3), h = hoehe - bodenPlatte, $fn=100, center = true); // Kreis
    }
}
Dateianhänge
Inlay.txt
(1.93 KiB) 399-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:25, insgesamt 2-mal geändert.
Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Das Hier ist dann eine Beispiel Anwendung des Inlay mit einem geraden Durchlauf und zwei Kurven

Code: Alles auswählen

// -----------------------------------------------------------------------------------------
// Gruppe : Gravitrax
// Datei : Durchlauf
// Beschreibung : Eine Gerade. Die Gravitrax Lösung mit der Kreuzung hat oft Stabilitäts Probleme udn erzeugt eine Laufunruhe
// Abhängigkeiten : Benötigt <Grundstein.scad>
// Release Version : 0.3
// Release Date : 31.01.2021
// Editor : OpenSCAD
// -----------------------------------------------------------------------------------------
// Autor siegfried.riehle@gmail.com
// Lizenz :  GNU Public License
// Der Programm Code kann frei verwendet und modifiziert werden. Der Code wird ohne 
// Gewährleistung oder Anspruch auf korrekte Funktionalität überlassen. 
// Bei Weitergabe, ist ein Hinweis auf den Original Autor im Source Code zu hinterlassen.
// -----------------------------------------------------------------------------------------


// Der GrundStein
use <C:\git\3dDruck\Gravitrax\Grundstein\src\GrundStein.scad>;

// Der SteckRing
use <C:\git\3dDruck\Gravitrax\Grundstein\src\SteckRing.scad>;


// Das Basis Inlay
use <Inlay.scad>;

// Utility Libary mit Hilfsfunktionen
use <C:\git\3dDruck\CAD\OpenSCAD\Libaries\Private\utilities.scad>;

// Der GrundStein + SteckRing zum verbinden, falls Bedarf besteht zum einblenden. (*) entfernen
// Die $preview Variable erkennt ob man mit F5 eine Preview Darstellung hat oder F6 zum rendern tippt. 
// Blendet den SteckRing im preview ein
if ($preview == true) { 
    %translate([0,0,-4.3]) GrundStein();
    *%translate([0,0,-3.6]) SteckRing();
}

Durchlauf();


// HauptModul
module Durchlauf() {
    durchmesser = 13.6;
    laenge = 70;
    zOffset = 6.5;
    difference() {
        Inlay();
        translate([0,0,zOffset]) rotate([30,90,0]) cylinder(h=laenge,d=durchmesser,center=true,$fn=100);
        ZweiKurven();
    }
}


// Das HauptModul
module ZweiKurven() {
    wandstaerke=10;
    durchmesser = 39;
    hoehe = 13.6;
    winkel = -120;
    rotateVektor = [120,-60];

    for(rd = rotateVektor) {
        rotate([0,0,rd]) translate([-12.5,21.9,5]) Donut(durchmesser, hoehe, winkel);
    }
}
Dateianhänge
Durchlauf.txt
(2.12 KiB) 389-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:26, insgesamt 2-mal geändert.
Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Was gibt es jetzt am Anfang als wichtigste Verständnis Themen zu beschreiben:

OpenSCAD arbeitet erst mal mit simplen Objekten die man
Union : Kombinieren kann
difference : Teil n vom ersten Teil abziehen
Intersection : Eine Schnittmenge aus beiden Teilen bilden
Ein gutes Beispiel für die unterschiede sieht man hier : https://en.wikibooks.org/wiki/OpenSCAD_ ... _Modelling

Dann muss man Objekte in ihrer lage ändern können:
translate : verschieben können,
rotate : um Achsen drehen
scale : seine proportionen ändern können

Hierbei ist wichtig zu verstehen, dass die Reihenfolge einen unterschied macht.
Es macht bei komplexes Objekten einen Unterschied ob ich erst rotiere und dann verschiebe oder anders herum.

Eine Zeile wird logisch abeschlossen mit einem ; oder wenn es mehr als eine Zeile ist, dann wird der Block mit { } eingerahmt.

Eine Zeile kann also manchmal unterschiedlich aussehen aber das gleiche tun.

Befehle werden in Reihenfolge untereinander abgearbeitet. Das ist ein bissel gelogen, aber ditaktisch erstmal so okay.

Code: Alles auswählen

translate([0,0,0]) cube([5, 5, 5]);

entspricht

Code: Alles auswählen

cube([5, 5, 5]); 

da das translate um genau 0 in alle achsen verschiebt. Warum man das vielleicht doch tut, lernen wir beim Thema Variablen und schleifen.


Code: Alles auswählen

cube([5, 5, 5]);
translate([10,0,0]) cube([5, 5, 5]);
entspricht

Code: Alles auswählen

union() {
  cube([5, 5, 5]);
  translate([10,0,0]) cube([5, 5, 5]);
 }
Das Union ist implizit wenn zwei Befehle untereinander stehen sind die automatisch ein Union.
Warum braucht man das also.

Beim Difference. Der zieht alles vom ersten Objekt ab. Wenn ich also möchte, das ein drittes von den ersten zwei Objekten abgezogen wird, packe ich die ersten zwei in ein Union und von dem allen ziehe ich dann das dritte Objekt ab-

Code: Alles auswählen

	difference() {
		union() {
			Teil1;
			Teil2;
		}
		Teil3;	
	}

Eine Zeile wird mit einem ; abgeschlossen. Also gehört alles bis zum ; zu dieser Zeile.
Der Würfel wird erzeugt, dann rotiert und dann verschoben.

Code: Alles auswählen

translate([x,y,z]) rotate([x,y,z]) cube([höhe, breite, tiefe]);
Es gibt dann auch noch kleinere Visuelle Hilfen:

Color("blue") malt das Object farblich an, das hat aber keinen Einfluß aufs rendern.

# markiert, das Object in rot, entspricht also dem Befehl Color("red")

% setzt das Objekt in ein transparentes Grau. Ich nutze es zum Beispiel um wenn ich am Steckring arbeite, den Grundstein mit einzublenden um zu sehen ob alles übereinander passt.

* blendet, die Zeile aus, sie wird also ignoriert.

! Macht genau das Gegenteil, alles andere wird ignoriert, nur diese Zeile gilt.

Mit diesen Befehlen kann man also Code sehr leicht debuggen um zu sehen, was passiert hier eigentlich.

Um das Beispiel also zu erweitern,
wir erzeugen einen Cylinder,
legen ihn ins Zentrum des Koordinaten Kreuzes,
mit $fn legen wir fest aus wieviel einzelsegmenten die Oberfläche besteht. Ein Cylinder mit $fn=6 ist also ein Hexagon. ein Cylinder mit $fn=100 ist ein solider Kreis.
wir rotieren ihn um die y Achse
und verschieben ihn und zum Schluss färben wir ihn blau ein.

Code: Alles auswählen

color("blue") translate([-20,10,0]) rotate([0,90,0]) cylinder(d = 5, h = 20, center = true,$fn=100);





Das soll es erstmal für heute gewesen sein.
Im nächsten Abschnitt, beschreibe ich Variablen, Module, und schleifen, und das arbeiten mit mehreren Dateien
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:33, insgesamt 2-mal geändert.
Benutzeravatar
webmaster
Site Admin
Beiträge: 256
Registriert: 03 Jan 2021 21:11

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von webmaster »

Hatte die Option .txt übersehen, sorry.
Bitte mal testen.
Benutzeravatar
webmaster
Site Admin
Beiträge: 256
Registriert: 03 Jan 2021 21:11

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von webmaster »

Ok, dann will ich mal mein erstes Projekt darlegen.
Ich muss dazu sagen, das Gerät war fertig, der Rest stammt unterstützend aus dem Forum.
Als erstes einfaches Objekt der Grundstein, leider Vollmaterial.

eps = 0.01;

w = 20; //hexagon width (side to side)
d = w/cos(30); //hexagon diameter (point to point
wt = 1; //wall thickness
h =5; //heigh of the piece
difference() {
linear_extrude(height=h) circle(d=d,$fn=6); //outer part
translate([0,10,-eps]) linear_extrude(height=h-wt) circle(d=(w-2*wt)/cos(30),$fn=6); //inner part
}

difference() {
union() {
// Zylinder (Körper) groß
cylinder(d=52.1, h=10, $fn=6);
// Zylinder (Fuß) unten
translate([0,0,-3]) cylinder(d=34.0, h=4.00, $fn=6);
}
// Zylinder (Vertiefung) oben
translate([0,0,6+eps]) cylinder(d=33.8, h=4.00, $fn=6);
}

Da natürlich der Stein gedreht werden muss, um einen vernünftigen Druck zu erhalten, muss ich den Stein drehen.
Und genau da beginnt wieder eines meiner zahlreichen Probleme.... :roll:
Tastenfuchs
Beiträge: 41
Registriert: 12 Jan 2021 18:22

Re: OpenSCAD Tutorial am Beispiel eines Bausteins

Beitrag von Tastenfuchs »

Denke in Schachteln. Du hast etwas fertig was aus zwei Teilen besteht. Ich sagte das kann man mit einem Union.
Was vor der Zeile steht also auch vor den geschweiften Klammern gilt dann auch dafür, also wird dein Union rotiert.

Code: Alles auswählen

eps = 0.01;

w = 20; //hexagon width (side to side)
d = w/cos(30); //hexagon diameter (point to point
wt = 1; //wall thickness
h =5; //heigh of the piece

rotate([180,0,0]) union() {
    difference() {
    linear_extrude(height=h) circle(d=d,$fn=6); //outer part
    translate([0,10,-eps]) linear_extrude(height=h-wt) circle(d=(w-2*wt)/cos(30),$fn=6); //inner part
    }

    difference() {
    union() {
    // Zylinder (Körper) groß
    cylinder(d=52.1, h=10, $fn=6);
    // Zylinder (Fuß) unten
    translate([0,0,-3]) cylinder(d=34.0, h=4.00, $fn=6);
    }
    // Zylinder (Vertiefung) oben
    translate([0,0,6+eps]) cylinder(d=33.8, h=4.00, $fn=6);
    }
}
bin jetzt erstmal off und erst wieder am Wochenende verfügbar, dann geht es weiter, bis dahin viel Spass mit dem testen
Antworten