Scripted Parts: Ball Bearing - Part 1/de: Difference between revisions
(Created page with "Modelle per Skript: Kugellager - Teil 1") |
(Updating to match new version of source page) |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
⚫ | |||
{{TutorialInfo |
{{TutorialInfo/de |
||
|Topic= Part Scripting - Ball Bearing #1 |
|Topic= Part Scripting - Ball Bearing #1 |
||
|Level= Beginner |
|Level= Beginner |
||
Line 9: | Line 10: | ||
=== |
===Einleitung=== |
||
Dieses Tutorial ist gedacht als Einführung wie man Modelle erstellt mit Hilfe von Python Skripten innerhalb von FreeCAD.<br /> |
|||
This tutorial is meant as a beginner's introduction to creating parts with python scripts within FreeCAD.<br /> |
|||
Dieses Tutorial erklärt wie man ein Kugellager erstellt mittels eines CSG-Arbeitsablaufes.<br /> |
|||
This tutorial will cover how to build a ball bearing with a CSG-workflow.<br /> |
|||
Der Code wird ein neues FreeCAD-Dokument erstellen mit 12 einzelnen Körpern (Innerer Ring, äußerer Ring und 10 Kugeln).<br /> |
|||
Das Ergebnis sieht so aus:<br /> |
|||
<br /> |
<br /> |
||
[[Image:Tutorial_BallBearing01.jpg|400px]] |
[[Image:Tutorial_BallBearing01.jpg|400px]] |
||
=== |
===Arbeitsablauf=== |
||
Der Arbeitsablauf ist mehr oder weniger identisch mit dem Ablauf, mit dem Sie ein Modell im Arbeitsbereich "Part" erstellen würden.<br /> |
|||
The workflow is more or less identical how you would create the part in part workbench.<br /> |
|||
Es gibt nur wenige Unterschiede.<br /> |
|||
*Erstelle ein neues leeres Dokument und mache es zum aktiven Dokument |
|||
*Create a new empty document and make it the active document |
|||
*Einfügen eines Zylinders |
|||
*Insert Cylinder |
|||
*Einfügen eines Zylinders |
|||
*Insert Cylinder |
|||
*Durchführung einer boolschen Verschneidung um die grundlegende Form des inneren Ringes zu bekommen |
|||
*Do boolean cut to get basic shape of inner ring |
|||
*Alle Kanten auswählen und einen Radius anbringen |
|||
*Select all edges and apply a fillet |
|||
*Einfügen eines Torus |
|||
*Insert torus |
|||
*Bewege den Torus in die korrekte Position und führe eine boolsche Verschneidung durch um die Rille für die Kugeln zu bekommen |
|||
*Move torus into position and do a boolean cut to create the groove for the balls |
|||
*Wiederhole alle Schritte um den äußeren Ring zu erstellen |
|||
*Repeat all steps for getting the shape for the outer ring |
|||
*Einfügel der ersten Kugel |
|||
*Insert first ball |
|||
*Einfügen der restlichen Kugeln und benutzen von Formeln um die korrekten Positionen der Kugeln zu berechnen |
|||
*Insert other balls using math to calculate the position of the balls |
|||
*Wechsle in die axometrische Ansicht |
|||
*Set view to axometric |
|||
*Zoom |
*Zoom auf Alles |
||
=== |
===Kanten verrunden=== |
||
Im Arbeitsbereich Part würde man mittels Benutzeroberfläche die Kanten in der 3D-Ansicht markieren und dann die Radien anbringen.<br /> |
|||
In part workbench using the GUI, you would select chamfers in the 3D view or in the menu for fillets and then apply the fillets.<br /> |
|||
Hier wählen wir alle Kanten eines Körpers aus und bringen die Radien an.<br /> |
|||
Here we select all edges of a shape and apply fillets.<br /> |
|||
Deshalb müssen wir die Kanten auswählen BEVOR wir die Rille für die Kugeln herstellen. |
|||
Therefore we need to select the edges BEFORE creating the groove. |
|||
=== |
===Bemerkungen=== |
||
Dieses Tutorial benutzt Grundkörper und boolsche Operationen, welche sehr rechenintensiv sein können.<br /> |
|||
This tutorial is using part primitives and boolean operations, which can be performance consuming.<br /> |
|||
Um zu sehen, wie man einen Körper mittels rotierten Skizzen erstellt, werfen Sie bitte einen Blick auf das Tutorial [[Scripted Parts: Ball Bearing - Part 2/de]]. |
|||
===Links=== |
===Links=== |
||
[[Scripted objects]]: |
[[Scripted objects]]: Diese Wiki-Seite erklärt die Grundlagen für part scripting<br /> |
||
[[Topological data scripting]]: |
[[Topological data scripting]]: Ein Tutorial für die Grundlagen des part scriptings<br /> |
||
[[Scripted Parts: Ball Bearing - Part 2]]: |
[[Scripted Parts: Ball Bearing - Part 2]]: Erstellen des Modelles mittels Skizzen<br /> |
||
[http://linuxforanengineer.blogspot.de/2013/08/free-cad-bearing-script.html Bearing Script 1]: |
[http://linuxforanengineer.blogspot.de/2013/08/free-cad-bearing-script.html Bearing Script 1]: Basis für dieses Tutorial, vielen Dank an JMG ...<br /> |
||
===Code=== |
===Code=== |
||
{{Code|code= |
{{Code|code= |
||
## Ball-bearing |
## Ball-bearing Skript |
||
## 11.08.2016 |
## 11.08.2016 von r-frank (BPLRFE/LearnFreeCAD on Youtube) |
||
## |
## basierend auf dem ball bearing script by JMG |
||
## (http://linuxforanengineer.blogspot.de/2013/08/free-cad-bearing-script.html) |
## (http://linuxforanengineer.blogspot.de/2013/08/free-cad-bearing-script.html) |
||
# |
# |
||
#um Grundkoerper einzufuegen |
|||
#needed for inserting primitives |
|||
import Part |
import Part |
||
#um die Position der Kugeln berechnen zu koennen |
|||
#needed for calculating the positions of the balls |
|||
import math |
import math |
||
#zum Bewegen des Torus |
|||
#needed for translation of torus |
|||
from FreeCAD import Base |
from FreeCAD import Base |
||
# |
# |
||
# |
#Werte# |
||
#(Radius des Schaftes/innerer Radius des inneren Ringes) |
|||
#(radius of shaft/inner radius of inner ring) |
|||
R1=15.0 |
R1=15.0 |
||
#(Aussenradius des Innenringes) |
|||
#(outer radius of inner ring) |
|||
R2=25.0 |
R2=25.0 |
||
#(Innenradius des Aussenringes) |
|||
#(inner radius of outer ring) |
|||
R3=30.0 |
R3=30.0 |
||
#(Aussenradius des Aussenringes) |
|||
#(outer radius of outer ring) |
|||
R4=40.0 |
R4=40.0 |
||
#( |
#(Dicke des Lagers) |
||
TH=15.0 |
TH=15.0 |
||
#( |
#(Anzahl der Kugeln) |
||
NBall=10 |
NBall=10 |
||
#( |
#(Radius der Kugeln) |
||
RBall=5.0 |
RBall=5.0 |
||
#(Verrundungs-Radius) |
|||
#(rounding radius for fillets) |
|||
RR=1 |
RR=1 |
||
#Erste Koordinate des Zentrums der Kugel |
|||
#first coordinate of center of ball |
|||
CBall=((R3-R2)/2)+R2 |
CBall=((R3-R2)/2)+R2 |
||
#Zweite Koordinate des Zentrums der Kugel |
|||
#second coordinate of center of ball |
|||
PBall=TH/2 |
PBall=TH/2 |
||
# |
# |
||
#Erstelle neues Dokument |
|||
#Create new document |
|||
App.newDocument("Unnamed") |
App.newDocument("Unnamed") |
||
App.setActiveDocument("Unnamed") |
App.setActiveDocument("Unnamed") |
||
Line 95: | Line 96: | ||
Gui.ActiveDocument=Gui.getDocument("Unnamed") |
Gui.ActiveDocument=Gui.getDocument("Unnamed") |
||
# |
# |
||
# |
#Innerer Ring# |
||
B1=Part.makeCylinder(R1,TH) |
B1=Part.makeCylinder(R1,TH) |
||
B2=Part.makeCylinder(R2,TH) |
B2=Part.makeCylinder(R2,TH) |
||
IR=B2.cut(B1) |
IR=B2.cut(B1) |
||
#Kanten auswaehlen und Radius anbringen |
|||
#get edges and apply fillets |
|||
Bedges=IR.Edges |
Bedges=IR.Edges |
||
IRF=IR.makeFillet(RR,Bedges) |
IRF=IR.makeFillet(RR,Bedges) |
||
#Rille erstellen und Koerper einblenden |
|||
#create groove and show shape |
|||
T1=Part.makeTorus(CBall,RBall) |
T1=Part.makeTorus(CBall,RBall) |
||
T1.translate(Base.Vector(0,0,TH/2)) |
T1.translate(Base.Vector(0,0,TH/2)) |
||
Line 108: | Line 109: | ||
Part.show(InnerRing) |
Part.show(InnerRing) |
||
# |
# |
||
# |
#Aeusserer Ring# |
||
B3=Part.makeCylinder(R3,TH) |
B3=Part.makeCylinder(R3,TH) |
||
B4=Part.makeCylinder(R4,TH) |
B4=Part.makeCylinder(R4,TH) |
||
OR=B4.cut(B3) |
OR=B4.cut(B3) |
||
#Kanten auswaehlen und Radius anbringen |
|||
#get edges and apply fillets |
|||
Bedges=OR.Edges |
Bedges=OR.Edges |
||
ORF=OR.makeFillet(RR,Bedges) |
ORF=OR.makeFillet(RR,Bedges) |
||
#Rille erstellen und Koerper einblenden |
|||
#create groove and show shape |
|||
T2=Part.makeTorus(CBall,RBall) |
T2=Part.makeTorus(CBall,RBall) |
||
T2.translate(Base.Vector(0,0,TH/2)) |
T2.translate(Base.Vector(0,0,TH/2)) |
||
Line 121: | Line 122: | ||
Part.show(OuterRing) |
Part.show(OuterRing) |
||
# |
# |
||
# |
#Kugeln# |
||
for i in range(NBall): |
for i in range(NBall): |
||
Ball=Part.makeSphere(RBall) |
Ball=Part.makeSphere(RBall) |
||
Line 129: | Line 130: | ||
Part.show(Ball) |
Part.show(Ball) |
||
# |
# |
||
#Und das Ganze noch huebsch machen ...# |
|||
#Make it pretty# |
|||
App.activeDocument().recompute() |
App.activeDocument().recompute() |
||
Gui.activeDocument().activeView().viewAxometric() |
Gui.activeDocument().activeView().viewAxometric() |
||
Line 136: | Line 137: | ||
{{Powerdocnavi{{#translation:}}}} |
|||
[[Category:Developer Documentation{{#translation:}}]] |
|||
[[Category:Python Code{{#translation:}}]] |
|||
{{clear}} |
{{clear}} |
||
⚫ |
Latest revision as of 21:37, 23 August 2020
Tutorium |
Thema |
---|
Part Scripting - Ball Bearing #1 |
Niveau |
Beginner |
Zeit zum Abschluss |
30 min |
Autoren |
r-frank |
FreeCAD-Version |
0.16.6706 |
Beispieldateien |
Siehe auch |
None |
Einleitung
Dieses Tutorial ist gedacht als Einführung wie man Modelle erstellt mit Hilfe von Python Skripten innerhalb von FreeCAD.
Dieses Tutorial erklärt wie man ein Kugellager erstellt mittels eines CSG-Arbeitsablaufes.
Der Code wird ein neues FreeCAD-Dokument erstellen mit 12 einzelnen Körpern (Innerer Ring, äußerer Ring und 10 Kugeln).
Das Ergebnis sieht so aus:
Arbeitsablauf
Der Arbeitsablauf ist mehr oder weniger identisch mit dem Ablauf, mit dem Sie ein Modell im Arbeitsbereich "Part" erstellen würden.
Es gibt nur wenige Unterschiede.
- Erstelle ein neues leeres Dokument und mache es zum aktiven Dokument
- Einfügen eines Zylinders
- Einfügen eines Zylinders
- Durchführung einer boolschen Verschneidung um die grundlegende Form des inneren Ringes zu bekommen
- Alle Kanten auswählen und einen Radius anbringen
- Einfügen eines Torus
- Bewege den Torus in die korrekte Position und führe eine boolsche Verschneidung durch um die Rille für die Kugeln zu bekommen
- Wiederhole alle Schritte um den äußeren Ring zu erstellen
- Einfügel der ersten Kugel
- Einfügen der restlichen Kugeln und benutzen von Formeln um die korrekten Positionen der Kugeln zu berechnen
- Wechsle in die axometrische Ansicht
- Zoom auf Alles
Kanten verrunden
Im Arbeitsbereich Part würde man mittels Benutzeroberfläche die Kanten in der 3D-Ansicht markieren und dann die Radien anbringen.
Hier wählen wir alle Kanten eines Körpers aus und bringen die Radien an.
Deshalb müssen wir die Kanten auswählen BEVOR wir die Rille für die Kugeln herstellen.
Bemerkungen
Dieses Tutorial benutzt Grundkörper und boolsche Operationen, welche sehr rechenintensiv sein können.
Um zu sehen, wie man einen Körper mittels rotierten Skizzen erstellt, werfen Sie bitte einen Blick auf das Tutorial Scripted Parts: Ball Bearing - Part 2/de.
Links
Scripted objects: Diese Wiki-Seite erklärt die Grundlagen für part scripting
Topological data scripting: Ein Tutorial für die Grundlagen des part scriptings
Scripted Parts: Ball Bearing - Part 2: Erstellen des Modelles mittels Skizzen
Bearing Script 1: Basis für dieses Tutorial, vielen Dank an JMG ...
Code
## Ball-bearing Skript
## 11.08.2016 von r-frank (BPLRFE/LearnFreeCAD on Youtube)
## basierend auf dem ball bearing script by JMG
## (http://linuxforanengineer.blogspot.de/2013/08/free-cad-bearing-script.html)
#
#um Grundkoerper einzufuegen
import Part
#um die Position der Kugeln berechnen zu koennen
import math
#zum Bewegen des Torus
from FreeCAD import Base
#
#Werte#
#(Radius des Schaftes/innerer Radius des inneren Ringes)
R1=15.0
#(Aussenradius des Innenringes)
R2=25.0
#(Innenradius des Aussenringes)
R3=30.0
#(Aussenradius des Aussenringes)
R4=40.0
#(Dicke des Lagers)
TH=15.0
#(Anzahl der Kugeln)
NBall=10
#(Radius der Kugeln)
RBall=5.0
#(Verrundungs-Radius)
RR=1
#Erste Koordinate des Zentrums der Kugel
CBall=((R3-R2)/2)+R2
#Zweite Koordinate des Zentrums der Kugel
PBall=TH/2
#
#Erstelle neues Dokument
App.newDocument("Unnamed")
App.setActiveDocument("Unnamed")
App.ActiveDocument=App.getDocument("Unnamed")
Gui.ActiveDocument=Gui.getDocument("Unnamed")
#
#Innerer Ring#
B1=Part.makeCylinder(R1,TH)
B2=Part.makeCylinder(R2,TH)
IR=B2.cut(B1)
#Kanten auswaehlen und Radius anbringen
Bedges=IR.Edges
IRF=IR.makeFillet(RR,Bedges)
#Rille erstellen und Koerper einblenden
T1=Part.makeTorus(CBall,RBall)
T1.translate(Base.Vector(0,0,TH/2))
InnerRing=IRF.cut(T1)
Part.show(InnerRing)
#
#Aeusserer Ring#
B3=Part.makeCylinder(R3,TH)
B4=Part.makeCylinder(R4,TH)
OR=B4.cut(B3)
#Kanten auswaehlen und Radius anbringen
Bedges=OR.Edges
ORF=OR.makeFillet(RR,Bedges)
#Rille erstellen und Koerper einblenden
T2=Part.makeTorus(CBall,RBall)
T2.translate(Base.Vector(0,0,TH/2))
OuterRing=ORF.cut(T2)
Part.show(OuterRing)
#
#Kugeln#
for i in range(NBall):
Ball=Part.makeSphere(RBall)
Alpha=(i*2*math.pi)/NBall
BV=(CBall*math.cos(Alpha),CBall*math.sin(Alpha),TH/2)
Ball.translate(BV)
Part.show(Ball)
#
#Und das Ganze noch huebsch machen ...#
App.activeDocument().recompute()
Gui.activeDocument().activeView().viewAxometric()
Gui.SendMsgToActiveView("ViewFit")
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub