OpenSCAD Tutorial am Beispiel eines Bausteins
Moderator: webmaster
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
OpenSCAD Tutorial am Beispiel eines Bausteins
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.
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.
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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) 651-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:23, insgesamt 2-mal geändert.
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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) 661-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:24, insgesamt 2-mal geändert.
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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) 657-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:24, insgesamt 3-mal geändert.
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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) 641-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:25, insgesamt 2-mal geändert.
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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) 667-mal heruntergeladen
Zuletzt geändert von Tastenfuchs am 04 Feb 2021 19:26, insgesamt 2-mal geändert.
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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.
entspricht
da das translate um genau 0 in alle achsen verschiebt. Warum man das vielleicht doch tut, lernen wir beim Thema Variablen und schleifen.
entspricht
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-
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.
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.
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
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]);
Code: Alles auswählen
union() {
cube([5, 5, 5]);
translate([10,0,0]) cube([5, 5, 5]);
}
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]);
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.
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
Hatte die Option .txt übersehen, sorry.
Bitte mal testen.
Bitte mal testen.
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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....
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....
-
- Beiträge: 41
- Registriert: 12 Jan 2021 18:22
Re: OpenSCAD Tutorial am Beispiel eines Bausteins
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.
bin jetzt erstmal off und erst wieder am Wochenende verfügbar, dann geht es weiter, bis dahin viel Spass mit dem testen
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);
}
}