Scripted Parts: Ball Bearing - Part 2/de: Difference between revisions

From FreeCAD Documentation
(Created page with "===Einfügen der Kugeln=== Der korrekte skizzen-basierende Ablauf um die Kugeln einzufügen wäre wie folgt:<br /> *Zeichne einen Halbkreis mit dem Zentrum im Nullpunkt und ze...")
No edit summary
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
{{TutorialInfo/de
{{TutorialInfo/de
|Topic= Part Scripting - Ball Bearing #2
|Topic= Part Scripting - Ball Bearing #2
Line 63: Line 64:


===Links===
===Links===
[[Scripted objects]]: The wiki page explaing the basics of scripting<br />
[[Scripted objects/de|Skriptgenerierte Objekte]]: Diese Wiki-Seite erklärt die Grundlagen für part scripting<br />
[[Topological data scripting]]: A tutorial for covering basics of scripting<br />
[[Topological data scripting/de|Topologisches Datenskripten]]: Ein Tutorial für die Grundlagen des part scriptings<br />
[[Scripted Parts: Ball Bearing - Part 1]]: Doing it with part primitives<br />
[[Scripted Parts: Ball Bearing - Part 1/de|Skriptgenerierte Teile: Kugellager - Teil 1]]: Erstellen des Modelles mittels Grundkörpern<br />
[http://linuxforanengineer.blogspot.de/2013/12/bearings-from-scripted-sketches.html Bearings from scripted sketches]: Base for this tutorial, thanks to JMG ...<br />
[http://linuxforanengineer.blogspot.de/2013/12/bearings-from-scripted-sketches.html Bearings from scripted sketches]: Basis für dieses Tutorial, vielen Dank an JMG ...<br />




===Code===
===Code===
{{Code|code=
{{Code|code=
## Ball-bearing script
## Ball-bearing Skript
## 11.08.2016 by r-frank (BPLRFE/LearnFreeCAD on Youtube)
## 11.08.2016 von r-frank (BPLRFE/LearnFreeCAD on Youtube)
## based on ball bearing script by JMG
## basierend auf dem ball bearing script by JMG
## (http://linuxforanengineer.blogspot.de/2013/12/bearings-from-scripted-sketches.html)
## (http://linuxforanengineer.blogspot.de/2013/12/bearings-from-scripted-sketches.html)
#
#
#um Grundkoerper einzufuegen
#needed for doing boolean operations
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 and rotation of objects
from FreeCAD import Base
from FreeCAD import Base
#
#
#VALUES#
#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
#(thickness of bearing)
#(Dicke des Lagers)
TH=15.0
TH=15.0
#(number of balls)
#(Anzahl der Kugeln)
NBall=10
NBall=10
#(radius of ball)
#(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")
App.ActiveDocument=App.getDocument("Unnamed")
Gui.ActiveDocument=Gui.getDocument("Unnamed")
#
#
#Linien fuer die Grundform des aeusseren Ringes
#Lines for basic shape of outer ring
L1o=Part.makeLine((R4,0,TH-RR),(R4,0,RR))
L1o=Part.makeLine((R4,0,TH-RR),(R4,0,RR))
L2o=Part.makeLine((R4-RR,0,0),(R3+RR,0,0))
L2o=Part.makeLine((R4-RR,0,0),(R3+RR,0,0))
L3o=Part.makeLine((R3,0,RR),(R3,0,TH-RR))
L3o=Part.makeLine((R3,0,RR),(R3,0,TH-RR))
L4o=Part.makeLine((R3+RR,0,TH),(R4-RR,0,TH))
L4o=Part.makeLine((R3+RR,0,TH),(R4-RR,0,TH))
#Ecken abrunden
#Corner rounding for basic shape of outer ring
A1o=Part.makeCircle(RR,Base.Vector(R4-RR,0,RR),Base.Vector(0,1,0),0,90)
A1o=Part.makeCircle(RR,Base.Vector(R4-RR,0,RR),Base.Vector(0,1,0),0,90)
A2o=Part.makeCircle(RR,Base.Vector(R3+RR,0,RR),Base.Vector(0,1,0),90,180)
A2o=Part.makeCircle(RR,Base.Vector(R3+RR,0,RR),Base.Vector(0,1,0),90,180)
A3o=Part.makeCircle(RR,Base.Vector(R3+RR,0,TH-RR),Base.Vector(0,1,0),180,270)
A3o=Part.makeCircle(RR,Base.Vector(R3+RR,0,TH-RR),Base.Vector(0,1,0),180,270)
A4o=Part.makeCircle(RR,Base.Vector(R4-RR,0,TH-RR),Base.Vector(0,1,0),270,360)
A4o=Part.makeCircle(RR,Base.Vector(R4-RR,0,TH-RR),Base.Vector(0,1,0),270,360)
#Verbinden der Elemente, Upgrade, Revolve und Cut fuer aeusseren Ring
#Connect Lines and arcs to make wire and upgrade to face, revolve and apply cut to obtain groove
OR=Part.Wire([L1o,A1o,L2o,A2o,L3o,A3o,L4o,A4o])
OR=Part.Wire([L1o,A1o,L2o,A2o,L3o,A3o,L4o,A4o])
OR=Part.Face(OR)
OR=Part.Face(OR)
Line 132: Line 131:
Part.show(OR)
Part.show(OR)
#
#
#Linien fuer die Grundform des inneren Ringes
#Lines for basic shape of inner ring
L1i=Part.makeLine((R2,0,TH-RR),(R2,0,RR))
L1i=Part.makeLine((R2,0,TH-RR),(R2,0,RR))
L2i=Part.makeLine((R2-RR,0,0),(R1+RR,0,0))
L2i=Part.makeLine((R2-RR,0,0),(R1+RR,0,0))
L3i=Part.makeLine((R1,0,RR),(R1,0,TH-RR))
L3i=Part.makeLine((R1,0,RR),(R1,0,TH-RR))
L4i=Part.makeLine((R1+RR,0,TH),(R2-RR,0,TH))
L4i=Part.makeLine((R1+RR,0,TH),(R2-RR,0,TH))
#Ecken abrunden
#Corner rounding for basic shape of inner ring
A1i=Part.makeCircle(RR,Base.Vector(R2-RR,0,RR),Base.Vector(0,1,0),0,90)
A1i=Part.makeCircle(RR,Base.Vector(R2-RR,0,RR),Base.Vector(0,1,0),0,90)
A2i=Part.makeCircle(RR,Base.Vector(R1+RR,0,RR),Base.Vector(0,1,0),90,180)
A2i=Part.makeCircle(RR,Base.Vector(R1+RR,0,RR),Base.Vector(0,1,0),90,180)
A3i=Part.makeCircle(RR,Base.Vector(R1+RR,0,TH-RR),Base.Vector(0,1,0),180,270)
A3i=Part.makeCircle(RR,Base.Vector(R1+RR,0,TH-RR),Base.Vector(0,1,0),180,270)
A4i=Part.makeCircle(RR,Base.Vector(R2-RR,0,TH-RR),Base.Vector(0,1,0),270,360)
A4i=Part.makeCircle(RR,Base.Vector(R2-RR,0,TH-RR),Base.Vector(0,1,0),270,360)
#Verbinden der Elemente, Upgrade, Revolve und Cut fuer inneren Ring
#Connect Lines and arcs to make wire and upgrade to face, revolve and apply cut to obtain groove
IR=Part.Wire([L1i,A1i,L2i,A2i,L3i,A3i,L4i,A4i])
IR=Part.Wire([L1i,A1i,L2i,A2i,L3i,A3i,L4i,A4i])
IR=Part.Face(IR)
IR=Part.Face(IR)
Line 153: Line 152:
Part.show(IR)
Part.show(IR)
#
#
#Kugeln einfuegen#
#Balls#
for i in range(NBall):
for i in range(NBall):
Ball=Part.makeSphere(RBall)
Ball=Part.makeSphere(RBall)
Line 161: Line 160:
Part.show(Ball)
Part.show(Ball)
#
#
#Alles huebsch machen ...#
#Make it pretty#
App.activeDocument().recompute()
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxometric()
Gui.ActiveDocument.ActiveView.viewAxometric()
Gui.SendMsgToActiveView("ViewFit")
Gui.SendMsgToActiveView("ViewFit")
}}
}}




{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{clear}}
{{clear}}
<languages/>

Latest revision as of 06:58, 11 September 2021

Tutorium
Thema
Part Scripting - Ball Bearing #2
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 Sizzen, die dann rotiert werden.
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 Design" erstellen würden.
Es gibt nur wenige Unterschiede.

  • Erstelle ein neues leeres Dokument und mache es zum aktiven Dokument
  • Zeichne die grundlegende Figur des äußeren Ringes bestehend aus vier Linien und vier Kreisbögen.

  • Verbinde die Elemente und upgrade Sie zu einem Draht (wire)
  • Upgrade des wires zu einer Fläche
  • Rotieren der Fläche um einen Rotationskörper zu erhalten
  • Zeichne einen Kreis
  • Upgrade des Kreises zu einem Draht (wire)
  • Upgrade des wires zu einer Fläche
  • Rotieren der Fläche und Hinzufügen einer boolschen Verschneidung um die Rille des äußeren Ringes zu erhalten
  • Zeichne die grundlegende Figur des inneren Ringes bestehend aus vier Linien und vier Kreisbögen.
  • Verbinde die Elemente und upgrade Sie zu einem Draht (wire)
  • Upgrade des wires zu einer Fläche
  • Rotieren der Fläche um einen Rotationskörper zu erhalten
  • Zeichne einen Kreis
  • Upgrade des Kreises zu einem Draht (wire)
  • Upgrade des wires zu einer Fläche
  • Rotieren der Fläche und Hinzufügen einer boolschen Verschneidung um die Rille des inneren Ringes zu erhalten
  • Einfügen der Kugeln auf dieselbe Art wie in Teil 1 (wegen der Effektivität)
  • Wechsle in die axometrische Ansicht
  • Zoom auf Alles

Erstellen der Rille

Das Zeichnen eines Kreibogen benötigt entweder drei Punkte oder eine Startwinkel und einen Endwinkel.
Im Sketcher würden wir Beschränkungen verwenden um den Startpunkt und den Endpunkt des Kreisbogens zu bestimmen.
Da wir dies in scripting nicht möglich ist, werden wir ein abgerundetes Rechteck zeichnen und es rotieren lassen, um einen Basis-Ring zu erhalten.
Dann zeichnen wir eine Kreis und rotieren ihn, um die Geometrie der Rille zu erhalten.
Dann fügen wir eine boolsche Verschneidung hinzu und wir haben die komplette Form des inneren/äußeren Ringes.


Einfügen der Kugeln

Der korrekte skizzen-basierende Ablauf um die Kugeln einzufügen wäre wie folgt:

  • Zeichne einen Halbkreis mit dem Zentrum im Nullpunkt und zeichne eine Linie, die die offene Seite des Halbkreises schließt.
  • Wandle die zwei Elemente in einen Draht (wire) um, upgrade zur Fläche und rotiere um die Z-Achse, um eine Kugel zu erhalten
  • Dann mit dem "translate"-Befehl die Kugel in die korrekte Position bringen
  • Die obigen Schritte neun mal wiederholen und mittels Formel die korrekte Positon der Kugel ermittlen
  • Diese Operation kann mittels einer Schelife programmiert werden

Dies ist nicht sehr effektiv, es ist der schnellere Weg, Grundkörper einzufügen und diese zu positionieren
Also benutzen wir dieselbe Methode wie in Teil 1.


Links

Skriptgenerierte Objekte: Diese Wiki-Seite erklärt die Grundlagen für part scripting
Topologisches Datenskripten: Ein Tutorial für die Grundlagen des part scriptings
Skriptgenerierte Teile: Kugellager - Teil 1: Erstellen des Modelles mittels Grundkörpern
Bearings from scripted sketches: 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/12/bearings-from-scripted-sketches.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")
#
#Linien fuer die Grundform des aeusseren Ringes
L1o=Part.makeLine((R4,0,TH-RR),(R4,0,RR))
L2o=Part.makeLine((R4-RR,0,0),(R3+RR,0,0))
L3o=Part.makeLine((R3,0,RR),(R3,0,TH-RR))
L4o=Part.makeLine((R3+RR,0,TH),(R4-RR,0,TH))
#Ecken abrunden
A1o=Part.makeCircle(RR,Base.Vector(R4-RR,0,RR),Base.Vector(0,1,0),0,90)
A2o=Part.makeCircle(RR,Base.Vector(R3+RR,0,RR),Base.Vector(0,1,0),90,180)
A3o=Part.makeCircle(RR,Base.Vector(R3+RR,0,TH-RR),Base.Vector(0,1,0),180,270)
A4o=Part.makeCircle(RR,Base.Vector(R4-RR,0,TH-RR),Base.Vector(0,1,0),270,360)
#Verbinden der Elemente, Upgrade, Revolve und Cut fuer aeusseren Ring
OR=Part.Wire([L1o,A1o,L2o,A2o,L3o,A3o,L4o,A4o])
OR=Part.Face(OR)
OR=OR.revolve(Base.Vector(0,0,1),Base.Vector(0,0,360))
C1=Part.makeCircle(RBall,Base.Vector(R2+(R3-R2)/2,0,TH/2),Base.Vector(0,1,0),0,360)
GRo=Part.Wire([C1])
GRo=Part.Face(GRo)
GRo=GRo.revolve(Base.Vector(0,0,1),Base.Vector(0,0,360))
OR=OR.cut(GRo)
Part.show(OR)
#
#Linien fuer die Grundform des inneren Ringes
L1i=Part.makeLine((R2,0,TH-RR),(R2,0,RR))
L2i=Part.makeLine((R2-RR,0,0),(R1+RR,0,0))
L3i=Part.makeLine((R1,0,RR),(R1,0,TH-RR))
L4i=Part.makeLine((R1+RR,0,TH),(R2-RR,0,TH))
#Ecken abrunden
A1i=Part.makeCircle(RR,Base.Vector(R2-RR,0,RR),Base.Vector(0,1,0),0,90)
A2i=Part.makeCircle(RR,Base.Vector(R1+RR,0,RR),Base.Vector(0,1,0),90,180)
A3i=Part.makeCircle(RR,Base.Vector(R1+RR,0,TH-RR),Base.Vector(0,1,0),180,270)
A4i=Part.makeCircle(RR,Base.Vector(R2-RR,0,TH-RR),Base.Vector(0,1,0),270,360)
#Verbinden der Elemente, Upgrade, Revolve und Cut fuer inneren Ring
IR=Part.Wire([L1i,A1i,L2i,A2i,L3i,A3i,L4i,A4i])
IR=Part.Face(IR)
IR=IR.revolve(Base.Vector(0,0,1),Base.Vector(0,0,360))
C2=Part.makeCircle(RBall,Base.Vector(R2+(R3-R2)/2,0,TH/2),Base.Vector(0,1,0),0,360)
GRi=Part.Wire([C2])
GRi=Part.Face(GRi)
GRi=GRi.revolve(Base.Vector(0,0,1),Base.Vector(0,0,360))
IR=IR.cut(GRi)
Part.show(IR)
#
#Kugeln einfuegen#
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)
#
#Alles huebsch machen ...#
App.ActiveDocument.recompute()
Gui.ActiveDocument.ActiveView.viewAxometric()
Gui.SendMsgToActiveView("ViewFit")