Arbeitsbereich Assembly
Einleitung
Der Arbeitsbereich Assembly ist FreeCADs neuer eingebauter Arbeitsbereich für das Erstellen von Baugruppen bzw. Zusammenbauten. Er verwendet den quelloffenen Gleichungslöser OndselSolver.
Werkzeuge
Zusammenbau
Neue Baugruppe: Erstellt eine Hauptbaugruppe (Assembly-Objekt) im aktuellen Dokument oder eine Unterbaugruppe in einer schon vorhandenen aktiven Baugruppe.
Komponente: Fügt eine Komponente in die aktuelle Baugruppe ein.
Neues Part: Fügt ein neues Part-Objekt ein.
Baugruppe lösen: Berechnet die gerade aktive Baugruppe.
Explosionsansicht: Erstellt einen Behälter für Explosionsansichten (Exploded_Views-Objekt) in der aktiven Baugruppe, der eine oder mehrere Explosionsansichten (Exploded_View-Objekte) enthält
Simulation: Erstellt eine Bewegungssimulation der aktuellen Baugruppe. eingeführt in 1.1
Stückliste: Leitet eine Stückliste (Bill_of_Materials-Objekt) aus einer ausgewählten Baugruppe oder aus dem Dokument ab.
- Dieses Werkzeug zielt auf Entwickler ab und wird nicht in zukünftigen Veröffentlichungen enthalten sein. (siehe Forum-Thread)
Verbindungen
Festsetzen umschalten: Setzt Position und Ausrichtung einer Form im Bezug zum Koordinatensystem der Baugruppe fest, zu der sie gehört.
Starre Verbindung: Erstellt eine starre Verbindung zwischen zwei Bauteilen, die keine Verschiebung oder Drehung zulässt, kann aber auch zum Festlegen andersartiger Verbindungen eingesetzt werden.
Drehverbindung: Erstellt eine Drehverbindung (auch Scharnier genannt) zwischen zwei ausgewählten Bauteilen, die eine Drehung um eine gemeinsame Achse ermöglicht.
Zylindrische Verbindung: Erstellt eine zylindrische Führung (auch Drehschubgelenk genannt) zwischen zwei ausgewählten Bauteilen, die eine Drehung um eine gemeinsame Achse und eine Verschiebung entlang derselben Achse ermöglicht.
Gleitverbindung: Erstellt eine prismatische Führung (auch Schubgelenk genannt) zwischen zwei ausgewählten Bauteilen, die eine geradlinige Verschiebung entlang einer gemeinsamen Achse ermöglicht, während sämtliche Drehungen verhindert werden.
Kugelverbindung: Erstellt ein Kugelgelenk zwischen zwei ausgewählten Bauteilen an einem gemeinsamen Punkt, das eine ungehinderte Drehung um den Punkt herum ermöglicht, während beide Bauteile an diesem Punkt verbunden bleiben.
Abstandsverbindung: Erstellt eine Verbindung, die den Abstand zwischen den ausgewählten Elementen zweier Bauteile konstant hält.
Parallelverbindung: Erstellt eine Parallelverbindung zwischen zwei ausgewählten Bauteilen, wobei die Z-Achsen der ausgewählten Koordinatensysteme parallel ausgerichtet werden.
RechtwinkligeVerbindung: Erstellt eine rechtwinklige Verbindung zwischen zwei ausgewählten Bauteilen, wobei die Z-Achsen der ausgewählten Koordinatensysteme rechtwinklig ausgerichtet werden.
Winkelverbindung: Erstellt eine Wikelverbindung zwischen zwei ausgewählten Bauteilen, die den Winkel zwischen den Z-Achsen der ausgewählten Koordinatensysteme konstant hält.
Zahnstange-Ritzel-Verbindung: Erstellt eine Zahnstange-Ritzel-Verbindng, die die Verschiebung eines Bauteils einer prismatischen Verbindung und die Drehung eines Bauteils einer Drehverbindung koppelt.
Schraubverbindung: Erstellt eine Spindelverbindung (wendelförmige Verbindung), die die Verschiebung eines Bauteils einer prismatischen Verbindung und die Drehung eines Bauteils einer Drehverbindung koppelt.
Zahnradverbindung: Erstellt eine Zahnradverbindung, die die Drehungen zweier Bauteile aus unterschiedlichen Drehverbindungen koppelt.
Riemenverbindung: Erstellt eine Riemenverbindung, die die Drehungen zweier Bauteile aus unterschiedlichen Drehverbindungen koppelt.
Einstellungen
Einstellungen: Voreinstellungen für den Arbeitsbereich Assembly
Beispiel Kurbel und Schieber
Dies ist ein temporäres Beispiel und kann entfernt werden, sobald ausführliche Beschreibungen bzw. Anleitungen zur Verfügung stehen.
Baugruppe Kurbel und Schieber
Der Zusammenbau (Baugruppe), der erstellt wird, besteht aus vier Bauteilen: Eine Basis, ein Schieber, eine Kurbel und ein Pleuel (Verbindungsstange). Sie sind mit vier Gelenken verbunden.
Die zusammengebauten Bauteile: Basis (bernsteinfarben), Schieber (hellblau), Kurbel (rot), Pleuel (grün)
Bauteile vorbereiten
In diesem Beispiel werden alle Bauteile und der Zusammenbau in einem Dokument erstellt.
Die zylindrischen Geometrien der Objekte sind entweder parallel oder rechtwinklig, der Rest ist für dieses Beispiel nicht von Bedeutung, solange es keine Kollision verursacht. Mit dieser Info im Hinterkopf modelliert man seine eigenen Objekte oder erstellt ähnliche mit dem nachfolgenden Python-Code. Der Code erstellt ein neues Dokument mit den vier Objekten (simpler als in den Abbildungen). Einfach die folgenden Zeilen kopieren und in die Python-Konsole einfügen:
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
box1 = Part.makeBox(140, 40, 7, App.Vector(0, -20, 0))
cyl1 = Part.makeCylinder(4, 8, App.Vector(120, 0, 7))
box2 = Part.makeBox(20, 12, 10, App.Vector(5, -6, 7))
cyl2 = Part.makeCylinder(6, 20, App.Vector(25, 0, 17), App.Vector(-1, 0, 0))
cyl3 = Part.makeCylinder(4, 20, App.Vector(25, 0, 17), App.Vector(-1, 0, 0))
shape = box1.fuse([cyl1, box2, cyl2]).removeSplitter().cut(cyl3)
base = doc.addObject("Part::Feature", "Base")
base.Shape = shape
box1 = Part.makeBox(4, 12, 12, App.Vector(-12, -6, 0))
box2 = Part.makeBox(14, 12, 4, App.Vector(-8, -6, 0))
cyl1 = Part.makeCylinder(4, 8, App.Vector(0, 0, 4))
cyl2 = Part.makeCylinder(4, 88, App.Vector(-12, 0, 6),App.Vector(-1, 0, 0))
shape = box1.fuse([box2, cyl1, cyl2]).removeSplitter()
slider_rod = doc.addObject("Part::Feature", "SliderRod")
slider_rod.Shape = shape
slider_rod.Placement.Base = App.Vector(100, -40, 0)
cyl1 = Part.makeCylinder(7.5, 4)
box1 = Part.makeBox(15, 30, 4, App.Vector(-7.5, 0, 0))
cyl2 = Part.makeCylinder(7.5, 4, App.Vector(0, 30, 0))
cyl3 = Part.makeCylinder(4, 6, App.Vector(0, 30, 4))
cyl4 = Part.makeCylinder(4, 4)
shape = cyl1.fuse([box1, cyl2]).removeSplitter().fuse(cyl3).cut(cyl4)
crank = doc.addObject("Part::Feature", "Crank")
crank.Shape = shape
crank.Placement.Base = App.Vector(125, -70, 0)
cyl1 = Part.makeCylinder(6, 4)
box1 = Part.makeBox(50, 12, 4, App.Vector(0, -6, 0))
cyl2 = Part.makeCylinder(6, 4, App.Vector(50, 0, 0))
cyl3 = Part.makeCylinder(4, 4)
cyl4 = Part.makeCylinder(4, 4, App.Vector(50, 0, 0))
shape = cyl1.fuse([box1, cyl2]).removeSplitter().cut(cyl3.fuse(cyl4))
connecting_rod = doc.addObject("Part::Feature", "ConnectingRod")
connecting_rod.Shape = shape
connecting_rod.Placement.Base = App.Vector(25, -70, 0)
mat = base.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
base.ViewObject.ShapeAppearance = (mat,)
mat = slider_rod.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
slider_rod.ViewObject.ShapeAppearance = (mat,)
mat = crank.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.70, 0.30, 0.20, 0.0)
crank.ViewObject.ShapeAppearance = (mat,)
mat = connecting_rod.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.0, 0.0)
connecting_rod.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Eine Baugruppe hinzufügen
Der Befehl Baugruppe erstellen fügt dem Dokument eine Baugruppe hinzu.
Baumansicht von Bauteilen (Parts) und Baugruppe (Assembly)
Die Bauteile in die Baugruppe verschieben
Die Bauteile in der Baumansicht auf das Baugruppenobjekt (Assembly object) ziehen und ablegen. Sie können jetzt vom Assembly-Gleichungslöser verarbeitet werden.
Die Bauteile sind jetzt im Assembly-Behälter
Ein Bauteil festsetzen
Um eine Baugruppe an der gewünschten Stelle zu behalten, sollte das Bauteil Basis verankert werden, oder festgesetzt, wie es hier genannt wird. Ein Bauteil in der Baumansicht oder in der 3D-Ansicht auswählen und das Werkzeug Festsetzen umschalten aufrufen. Dies legt die Position der Basis im Bezug auf das lokale Koordinatensystem (LKS) des Assembly-Behälters fest. Ein GroundedJoint-Objekt wird dem Joints-Behälter hinzugefügt.
Den Joints-Behälter erweitern, um das GroundedJoint-Objekt zu finden
Alternative: Komponente einfügen
Anstelle der zwei oben genannten Schritte ist es auch möglich den Befehl Komponente einfügen zu verwenden, um Objekte in einen Zusammenbau einzufügen. Das erste Objekt wird automatisch festgesetzt, daher muss man (die Auswahl) mit der Basis beginnen. Der Befehl erstellt Komponenten (Verknüpfungen) und die originale Objekte bleiben außerhalb des Zusammenbaus. Um Verwechslungen zu vermeiden, ist es ratsam, sie auszublenden.
Verbindungen hinzufügen
Eine Verbindung (ein Gelenk) verbindet genau zwei Elemente unterschiedlicher Bauteile. Sie können wahlweise ausgewählt werden, bevor der Befehl für die gewünschte Verbindung aufgerufen wird (jede Anzahl ausgewählter Elemente außer zwei ergibt eine leere Auswahl). Die Elemente legen die Position und Ausrichtung eines LKS fest, das durch einen gefüllten Kreis auf der lokalen XY-Ebene und drei Linien entlang der lokalen X- (rot), Y- (grün) und Z-Achse (blau) dargestellt wird.
- Ein Drehgelenk (Scharnier) zwischen Basis und Kurbel
Ausgewählte Elemente + Drehverbindung erstellen → neu angeordnete Kurbel
Die Kurbel mit der linken Maustaste bewegen. Es sollte jetzt nur eine Drehung um die Drehachse (Z-Achse) möglich sein.
- Eine prismatische Führung zwischen Basis und Schieber
Ausgewählte Elemente + Prismatische Verbindung erstellen → neu angeordneter Schieber
Den Schieber mit der linken Maustaste bewegen. Es sollte jetzt nur das Verschieben entlang seiner Mittellinie (Z-Achse) möglich sein.
- Ein Drehgelenk (Scharnier) zwischen Kurbel und Pleuel
Ausgewählte Elemente + Drehverbindung erstellen → neu angeordnetes Pleuel
Den Pleuel mit der linken Maustaste bewegen. Er sollte jetzt nur eine Drehung um die Drehachse (Z-Achse) möglich sein.
Wenn sich mehrere Gelenke in einer Reihe ergeben, müssen wir dem Gleichungslöser helfen eine sinnvolle Lösung zu finden.
Wenn erforderlich, die Bauteile anklicken und auf eine einfacher zu berechnende Position ziehen.
- Eine zylindrische Führung zwischen Pleuel und Schieber
Ausgewählte Elemente + Zylindrische Verbindung erstellen → fertiger Zusammenbau
Im fertiggestellten Zusammenbau können die Bauteile entsprechend den verwendeten Verbindungen mit dem Mauszeiger bewegt werden.
Hinweis
Die Ausrichtung des Zapfens des Schiebers ist redundant festgelegt. Seine Mittellinie ist parallel zum Zapfen der Basis über die kinematisch Kette von der Basis über die Kurbel und dem Pleuel, d.h. dass seine lokale Z-Achse sich um keine der X- oder Y-Achsen drehen kann. Die prismatische Verbindung verhindert ebenfalls seine Drehung um zwei lokale Achsen, woraus sich zwei überbestimmte (doppelt festgelegte) Freiheitsgrade ergeben. Eine zylindrische Verbindung anstelle der prismatischen Verbindung würde nur eine Drehung sperren und ergibt so nur einen einzigen überbestimmten Freiheitsgrad.
Die Kurbel antreiben
Um die Lage aller Bauteile der Baugruppe zueinander durch den Winkel zwischen der Basis und der Kurbel zu steuern, muss deren Drehgelenk in eine starre Verbindung umgewandelt werden. Dafür klickt man das Revolute-Objekt in der Baumansicht doppelt an. Im Dialog ändert man Rehverbindung zu Starrer Verbund und passt den Wert des Drehwinkels nach Wunsch an (die Bewegung sollte der Drehung des Mausrades folgen).
Man beachte, dass das Ändern der Verbindungsart die Benennung (Label) der Verbindung ändert, aber nicht ihren Namen. In diesem Falle wird die Benennung zu "Fixed" (Starrer Verbund) geändert.
Um die Kinematik zu bewegen können wir den Drehwinkel (Offset1.Angle) der starren Verbindung mit Python-Code verändern. Einfach die folgenden Zeilen kopieren und in die Python-Konsole einfügen:
import math
import FreeCAD as App
import FreeCADGui as Gui
actuator = App.ActiveDocument.getObjectsByLabel("Fixed")[0]
for angle in range(0, 361, 10):
# A full rotation of the Crank in steps of 10°
actuator.Offset1.Rotation.Angle = math.radians(angle)
App.ActiveDocument.recompute()
Gui.updateGui()
Der Endwert des Bereiches muss größer als 360° sein, damit auch dieser Winkel noch als gültiges Ergebnis anerkannt wird.
Beispiel Kreuzgelenk
Dies ist ein temporäres Beispiel und kann entfernt werden, sobald ausführliche Beschreibungen bzw. Anleitungen zur Verfügung stehen.
Baugruppe Kreuzgelenk
In diesem Beispiel wird ein Kreuzgelenk erstellt.
Der Zusammenbau besteht aus drei Festkörpern: zwei identischen (Gelenk-) Gabeln (Forks) und einem (Achsen-) Kreuz (Cross). Zwei zusätzliche Elemente, Welle1 und Welle2 (Axle1 und Axle2), die keine Festkörper sind und die abgewinkelten Wellen darstellen, werden auch noch gebraucht. Die Wellen und Festkörperbauteile werden mit mehreren Gelenken verbunden.
Bauteile vorbereiten
In diesem Beispiel werden alle Bauteile und der Zusammenbau in einem Dokument erstellt.
Der nachfolgende Python-Code erstellt ein neues Dokument mit vier Objekten (nur eine Gabel). Einfach die folgenden Zeilen kopieren und in die Python-Konsole einfügen:
import math
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
axle1 = doc.addObject("Part::Line", "Axle1")
axle1.X2 = -80
axle1.Y2 = 0
axle1.Z2 = 0
axle2 = doc.addObject("Part::Line", "Axle2")
axle2.X2 = 80
axle2.Y2 = 0
axle2.Z2 = 0
axle2.Placement.Rotation.Angle = math.radians(20)
sph1 = Part.makeSphere(50, App.Vector(0, 0, 0), App.Vector(-1, 0, 0), 0, 90, 360)
box1 = Part.makeBox(50, 40, 80, App.Vector(-50, -20, -40))
cyl1 = Part.makeCylinder(20, 80, App.Vector(0, 0, -40))
cyl2 = Part.makeCylinder(20, 80, App.Vector(0, 0, 0), App.Vector(-1, 0, 0))
cyl3 = Part.makeCylinder(30, 60, App.Vector(0, -30, 0), App.Vector(0, 1, 0))
box2 = Part.makeBox(30, 60, 60, App.Vector(0, -30, -30))
cyl4 = Part.makeCylinder(15, 80, App.Vector(0, 0, -40))
cyl5 = Part.makeCylinder(15, 80, App.Vector(0, 0, 0), App.Vector(-1, 0, 0))
shape = sph1.common(box1).fuse([cyl1, cyl2]).cut(cyl3.fuse([box2, cyl4, cyl5]))
fork = doc.addObject("Part::Feature", "Fork")
fork.Shape = shape.removeSplitter()
fork.Placement.Base = App.Vector(0, 100, 0)
cyl1 = Part.makeCylinder(15, 80, App.Vector(0, 0, -40))
cyl2 = Part.makeCylinder(15, 80, App.Vector(0, -40, 0), App.Vector(0, 1, 0))
shape = cyl1.fuse([cyl2])
cross = doc.addObject("Part::Feature", "Cross")
cross.Shape = shape.removeSplitter()
cross.Placement.Base = App.Vector(70, 100, 0)
mat = fork.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
fork.ViewObject.ShapeAppearance = (mat,)
mat = cross.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
cross.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Den Winkel der Wellen ändern
Der Winkel zwischen den Wellen wird auf 20° festgelegt. Soll der Winkel geändert werden, wird Welle2 (Axle2) ausgewählt und deren Eigenschaft Placement.Angle angepasst. Diese Eigenschaft muss geändert werden, bevor Welle2 in die Baugruppe bewegt wird.
Warnung: Die Bauteile können kollidieren, wenn der Winkel zu groß ist.
Eine Baugruppe hinzufügen
Der Befehl Baugruppe erstellen fügt dem Dokument eine Baugruppe hinzu.
Die Wellen in die Baugruppe verschieben
In der Baumansicht die Wellen auf die Baugruppe (Assembly-Objekt) zeihen und ablegen.
Die Wellen festlegen
Beide Wellen in der Baumansicht auswählen und das Werkzeug Festlegen umschalten aufrufen.
Die Festkörper in die Baugruppe verschieben
Für die anderen vier Objekte verwenden wir das Werkzeug Komponente einfügen:
- Das Werkzeug aufrufen.
- Im Dialogfenster, das sich öffnet, klickt man einmal auf das Kreuz-Objekt und zweimal auf das Gabel-Objekt.
- Die Schaltfläche OK drücken.
- Die Objekte außerhalb der Baugruppe ausblenden.
- Sollten sich die Objekte innerhalb der Baugruppe zu sehr überlappen, können sie auf eine neue Position gezogen werden.
Verbindungen hinzufügen
- Ein Drehgelenk (Scharnier) zwischen Axle1 (Welle1) und Fork001 (Gabel1)
Ausgewählte Elemente + Drehverbindung erstellen + Versatz von +40 mm oder -40 mm → neu angeordnete Gabel1
Wird das Werkzeug zuerst aufgerufen, kann man in die Nähe des korrekten Endpunktes der Welle1 klicken, um die Eingabe eines Versatzes zu vermeiden.
- Eine Zylindrische Führung zwischen Gabel1 (Fork001) und Kreuz (Cross001)
Ausgewählte Elemente + Zylindrische Verbindung erstellen → neu angeordnetes Kreuz
- Eine zylindrische Führung zwischen Welle2 (Axle2) und Gabel2 (Fork002)
Ausgewählte Elemente + Zylindrische Verbindung erstellen → neu angeordnete Gabel2
Wenn nötig, die Ausrichtung der Verbindung umkehren, indem man die Schaltfläche im Aufgaben-Fenster drückt.
- Eine zylindrische Führung zwischen Kreuz (Cross001) und Gabel2 (Fork002)
Ausgewählte Elemente + Zylindrische Verbindung erstellen → Kreuz (Cross001) und Gabel2 (Fork002) neu angeordnet
Das Kreuzgelenk antreiben
Das Kreuzgelenk kann angetrieben werden, indem Gabel1 mit der linken Maustaste bewegt wird.
Soll die Anordnung an bestimmten Drehwinkeln geprüft werden, macht man folgendes:
- Die zylindrische Verbindung zwischen Welle1 und Gabel1 in eine starre Verbindung ändern.
- Die Eigenschaft Offset1.Angle der starren Verbindung auswählen und das Mausrad bewegen.
- Das Kreuzgelenk kann auf einen beliebigen Winkel eingestellt werden.
Beispiel Schraubstock
Dies ist ein temporäres Beispiel und kann entfernt werden, sobald ausführliche Beschreibungen bzw. Anleitungen zur Verfügung stehen.
Baugruppe Schraubstock
In diesem Beispiel wird ein Schraubstock erzeugt.
Der Zusammenbau besteht aus drei Festkörpern: einer feststehenden und einer beweglichen Klemmbacke und einer Verstellschraube mit einem Hebel. Ein zusätzliches Element, eine Kurbel, die kein Festkörper ist wird auch noch gebraucht. Die Kurbel und die Festkörperbauteile werden mit mehreren Gelenken verbunden.
Eine Schraubenverbindung koppelt die Verschiebung eines Bauteiles mit einer Gleitverbindung mit der Drehbewegung eines Bauteiles mit einer Drehverbindung. Die Schraube soll beides eine Verschiebung und eine Drehbewegung machen, deshalb muss sie ein Bauteil mit einer zylindrischen Verbindung sein. In dieser Baugruppe wird die Schraube mit einer Abstandsverbindung an die bewegliche Klemmbacke, an die Kurbel die kein Festkörper ist mit einer Parallelführung, und an die feststehende Klemmbacke mit einer zylindrischen Verbindung, angeheftet.
Bauteile vorbereiten
In diesem Beispiel werden alle Bauteile und der Zusammenbau in einem Dokument erstellt.
Der nachfolgende Python-Code erstellt ein neues Dokument mit vier Objekten. Einfach die folgenden Zeilen kopieren und in die Python-Konsole einfügen:
import math
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
box1 = Part.makeBox(95, 40, 75, App.Vector(0, -20, -22))
cyl1 = Part.makeCylinder(35, 80, App.Vector(0, -40, 53), App.Vector(0, 1, 0), 90)
box2 = Part.makeBox(20, 80, 30, App.Vector(-20, -40, 58))
cyl2 = Part.makeCylinder(15, 80, App.Vector(-15, -40, 58), App.Vector(0, 1, 0), 90)
box3 = Part.makeBox(5, 80, 15, App.Vector(-20, -40, 58))
box4 = Part.makeBox(35, 24, 24, App.Vector(0, -12, -12))
box5 = Part.makeBox(60, 34, 69, App.Vector(35, -17, -19))
cyl3 = Part.makeCylinder(20, 55, App.Vector(-20, -40, 53), App.Vector(1, 0, 0))
cyl4 = Part.makeCylinder(20, 55, App.Vector(-20, 40, 53), App.Vector(1, 0, 0))
cyl5 = Part.makeCylinder(5, 35, App.Vector(0, 0, 38), App.Vector(1, 0, 0))
box6 = Part.makeBox(7, 88, 15, App.Vector(-22, -44, 75))
box7 = Part.makeBox(95, 90, 10, App.Vector(0, -45, -32))
shape = box1.fuse([cyl1, box2, box6, box7]).cut(cyl2.fuse([box3, cyl3, cyl4, cyl5, box4, box5]))
fixedJaw = doc.addObject("Part::Feature", "FixedJaw")
fixedJaw.Shape = shape.removeSplitter()
fixedJaw.Placement.Rotation.Axis = App.Vector(0, 0, 1)
fixedJaw.Placement.Rotation.Angle = math.radians(180)
box1 = Part.makeBox(35, 40, 75, App.Vector(0, -20, -22))
cyl1 = Part.makeCylinder(35, 80, App.Vector(0, -40, 53), App.Vector(0, 1, 0), 90)
box2 = Part.makeBox(20, 80, 30, App.Vector(-20, -40, 58))
cyl2 = Part.makeCylinder(15, 80, App.Vector(-15, -40, 58), App.Vector(0, 1, 0), 90)
box3 = Part.makeBox(160, 24, 24, App.Vector(-160, -12, -12))
box4 = Part.makeBox(5, 80, 15, App.Vector(-20, -40, 58))
box5 = Part.makeBox(160, 18, 18, App.Vector(-160, -9, -9))
cyl3 = Part.makeCylinder(20, 55, App.Vector(-20, -40, 53), App.Vector(1, 0, 0))
cyl4 = Part.makeCylinder(20, 55, App.Vector(-20, 40, 53), App.Vector(1, 0, 0))
cyl5 = Part.makeCylinder(5, 35, App.Vector(0, 0, 38), App.Vector(1, 0, 0))
box6 = Part.makeBox(7, 88, 15, App.Vector(-22, -44, 75))
shape = box1.fuse([cyl1, box2, box3, box6]).cut(cyl2.fuse([box4, cyl3, cyl4, box5, cyl5]))
movableJaw = doc.addObject("Part::Feature", "MovableJaw")
movableJaw.Shape = shape.removeSplitter()
movableJaw.Placement.Base = App.Vector(150, 100, 0)
cyl1 = Part.makeCylinder(5, 190, App.Vector(0, 0, 0), App.Vector(1, 0, 0))
cyl2 = Part.makeCylinder(10, 20, App.Vector(190, 0, 0), App.Vector(1, 0, 0))
cyl3 = Part.makeCylinder(4, 100, App.Vector(200, 0, -50), App.Vector(0, 0, 1))
shape = cyl1.fuse([cyl2, cyl3])
leverScrew = doc.addObject("Part::Feature", "LeverScrew")
leverScrew.Shape = shape.removeSplitter()
leverScrew.Placement.Base = App.Vector(150, -100, 0)
wire1 = Part.makePolygon([App.Vector(0, 0, 100), App.Vector(0, 0, 0), App.Vector(100, 0, 0)])
crank = doc.addObject("Part::Feature", "Crank")
crank.Shape = wire1
crank.Placement.Base = App.Vector(0, -100, 0)
mat = fixedJaw.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
fixedJaw.ViewObject.ShapeAppearance = (mat,)
mat = movableJaw.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
movableJaw.ViewObject.ShapeAppearance = (mat,)
mat = leverScrew.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.70, 0.30, 0.20, 0.0)
leverScrew.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Eine Baugruppe hinzufügen
Der Befehl Baugruppe erstellen fügt dem Dokument eine Baugruppe hinzu
Die Bauteile in die Baugruppe verschieben
In der Baumansicht die Bauteile in die Baugruppe ziehen und ablegen. Sie können jetzt vom Baugruppen-Gleichungslöser (Assembly solver) verarbeitet werden.
Ein Bauteil festsetzen
Um die Baugruppe an der gewünschten Position festzusetzen, sollte die feststehende Klemmbacke festgesetzt (grounded) werden. Die feststehende Klemmbacke in der Baumansicht oder in der 3D-Ansicht auswählen und den Befehl Festsetzen umschalten aufrufen. Ein GroundedJoint-Objekt wird dem Joints-Behälter hinzugefügt.
Verbindungen hinzufügen
- Eine Drehverbindung zwischen feststehender Klemmbacke und Kurbel
Ausgewählte Elemente + Drehverbindung → neu angeordnete Kurbel
- Eine Gleitverbindung zwischen feststehender und beweglicher Klemmbacke
Ausgewählte Elemente + Gleitverbindung → neu angeordnete bewegliche Klemmbacke
Den kleinsten Abstand (Min length) auf -77 mm und den größten Abstand (Max length) auf -7 mm einstellen. Dies beschränkt die Öffnung des Schraubstockes auf 70 mm.
Die nächsten drei Verbindungen sind notwendig, um die Hebel-Schraube zu folgendem zu zwingen: verschiebe gleich wie die bewegte Klemmbacke, drehe gleich wie die Kurbel, rotiere um die Hauptachse.
- Eine Abstandsverbindung zwischen der Hebel-Schraube und der beweglichen Klemmbacke
Ausgewählte Elemente + Abstandsverbindung → neu angeordnete Hebel-Schraube
Zwei Flächen auswählen. Den Wert des Abstandes auf 20 mm setzen.
- Eine Parallelführung zwischen der Hebel-Schraube und der Kurbel
Ausgewählte Elemente + Parallelführung → neu angeordnete Hebel-Schraube
- Eine zylindrische Führung zwischen der Hebel-Schraube und der feststehenden Klemmbacke
Ausgewählte Elemente + Zylindrische Führung → neu angeordnete Hebel-Schraube
- Eine Schraubverbindung zwischen der beweglichen Klemmbacke und der Kurbel
Ausgewählte Elemente (Hebel-Schraube unsichtbar) + Schraubverbindung → fertiger Mechanismus (Hebel-Schraube sichtbar)
Falls notwendig, während des Auswahlvorganges die Hebel-Schraube ausblenden.
Der Steigung der Schraube auf 5 mm einstellen.
Den Schraubstock antreiben
Der Schraubstock kann angetrieben werden, indem die Kurbel oder die bewegliche Klemmbacke mit der linken Maustaste bewegt wird.
Beispiel Stoßdämpfer
Dies ist ein temporäres Beispiel und kann entfernt werden, sobald ausführliche Beschreibungen bzw. Anleitungen zur Verfügung stehen.
Baugruppe Stoßdämpfer
In diesem Beispiel wird ein Stoßdämpfer (shock absorber) erstellt.
Die Baugruppe besteh aus drei Festkörpern: ei Kolben, ein Zylinder und eine Feder. Außerdem werden drei Nicht-Festkörper-Elemente gebraucht, zwei Achsen und eine Stange. Alle Bauteile werden mit mehreren Verbindungen zusammengefügt.
Das Gelenk des Kolbens rotiert um Achse2 (Axle2), während das Gelenk des Zylinders sich auf einem Kreisbogen mit dem Mittelpunkt auf Achse1 (Axle1) bewegt. Für diese Bewegung wird der Nicht-Festkörper Stange (Rod) verwendet. Die Länge der Stange ist der Radius des Kreisbogens.
Bauteile vorbereiten
Der folgende Python-Code erstellt ein neues Dokument mit 6 Objekten. Ein neues Makro erstellen, den Code kopieren und in den Python-Editor einfügen (nicht in die Python-Konsole). Dann das Makro ausführen.
Der unten stehende Programm-Kode kann nicht in der Python Konsole ausgeführt werden, weil die Feder durch eine Klasse welche die Callback Funktionen execute() und onChanged() enthält, als ein Part::FeaturePython Objekt definiert werden muss. Nur dann kann ihre Höhe durch eine Eigenschaft verändert werden.
import math
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
class Spring():
def __init__(self, spring):
spring.addProperty("App::PropertyLength", "Height", "Spring", "Height of the helix").Height = 200.0
spring.Proxy = self
spring.ViewObject.Proxy = 0
def execute(self, spring):
helix = Part.makeHelix(spring.Height/8.5, spring.Height, 35)
startPnt = helix.Edges[0].Curve.value(0)
section = Part.Wire([Part.Circle(startPnt, App.Vector(0, 1, 0), 5).toShape()])
hel1 = helix.makePipeShell([section], True, True)
box1 = Part.makeBox(80, 80, 10, App.Vector(-40, -40, -10))
box2 = Part.makeBox(80, 80, 10, App.Vector(-40, -40, spring.Height))
shape = hel1.cut(box1).cut(box2)
spring.Shape = shape
def onChanged(self, spring, prop):
if prop == "Height":
self.execute(spring)
spring = doc.addObject("Part::FeaturePython", "Spring")
Spring(spring)
spring.Placement.Base = App.Vector(0, 100, 0)
axle1 = doc.addObject("Part::Line", "Axle1")
axle1.X2 = 0
axle1.Y2 = 80
axle1.Z2 = 0
axle2 = doc.addObject("Part::Line", "Axle2")
axle2.X2 = 0
axle2.Y2 = 80
axle2.Z2 = 0
axle2.Placement.Base = App.Vector(120, 0, -250)
rod = doc.addObject("Part::Line", "Rod")
rod.X2 = 100
rod.Y2 = 0
rod.Z2 = 0
rod.Placement.Base = App.Vector(0, -50, 0)
cyl1 = Part.makeCylinder(40, 10,App.Vector(0, 0, -5))
tor1 = Part.makeTorus(40, 5)
cyl2 = Part.makeCylinder(45, 5)
box1 = Part.makeBox(30, 10, 30,App.Vector(-15, -5, -35))
cyl3 = Part.makeCylinder(15, 10, App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl4 = Part.makeCylinder(40, 5)
cyl5 = Part.makeCylinder(5, 10,App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl6 = Part.makeCylinder(5, 130)
cyl7 = Part.makeCylinder(20, 5,App.Vector(0, 0, 130))
shape = cyl1.fuse([tor1,cyl2, box1, cyl3]).cut(cyl4.fuse([cyl5])).fuse([cyl6, cyl7])
piston = doc.addObject("Part::Feature", "Piston")
piston.Shape = shape.removeSplitter()
piston.Placement.Base = App.Vector(200, 100, -200)
cyl1 = Part.makeCylinder(40, 10,App.Vector(0, 0, -5))
tor1 = Part.makeTorus(40, 5)
cyl2 = Part.makeCylinder(45, 5)
box1 = Part.makeBox(30, 10, 30,App.Vector(-15, -5, -35))
cyl3 = Part.makeCylinder(15, 10,App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl4 = Part.makeCylinder(40, 5)
cyl5 = Part.makeCylinder(5, 10,App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl6 = Part.makeCylinder(25, 130)
tor2 = Part.makeTorus(20, 5,App.Vector(0, 0, 130))
cyl7 = Part.makeCylinder(20, 135)
cyl8 = Part.makeCylinder(20, 130)
cyl9 = Part.makeCylinder(5, 135)
shape = cyl1.fuse([tor1, cyl2, box1, cyl3]).cut(cyl4.fuse([cyl5])).fuse([cyl6, tor2, cyl7]).cut(cyl8.fuse([cyl9]))
cylinder = doc.addObject("Part::Feature", "Cylinder")
cylinder.Shape = shape.removeSplitter()
cylinder.Placement.Rotation.Axis = App.Vector(0, 1, 0)
cylinder.Placement.Rotation.Angle = math.pi
cylinder.Placement.Base = App.Vector(100, 100, 0)
mat = piston.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
piston.ViewObject.ShapeAppearance = (mat,)
mat = cylinder.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
cylinder.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Eine Baugruppe hinzufügen
Der Befehl Baugruppe erstellen fügt dem Dokument eine Baugruppe hinzu.
Die Bauteile in die Baugruppe verschieben
Die Bauteile in der Baumansicht auf das Baugruppenobjekt (Assembly object) ziehen und ablegen. Sie können jetzt vom Assembly-Gleichungslöser verarbeitet werden.
Schleifen der beiden Achsen
Um die Baugruppe an der gewünschten Position zu halten, sollten die beiden Achsen gesperrt oder, wie es hier genannt wird, geerdet werden. Wählen Sie die beiden Achsen in der Baumansicht oder in der 3D-Ansicht aus und verwenden Sie das Werkzeug Geerdet umschalten. Dem Joints-Container werden zwei GroundedJoint-Objekte hinzugefügt.
Verbindungen hinzufügen
- Ein Drehgelenk zwischen Achse2 und Kolben
Ausgewählte Elemente + Assemlby DrehverbindungErstellen → neu angeordneter Kolben
- Eine Schiebeverbindung zwischen Kolben und Zylinder
Ausgewählte Elemente + Assembly PrismatischeFührungErstellen → umgestalteter und verschobener Zylinder
Bitte achten Sie vor der Auswahl einer Fläche auf die Lage des Koordinatensystems. Es sollte sich jeweils im Mittelpunkt der Fläche befinden.
Ziehen Sie den Zylinder, um eine gewisse Abgrenzung zum Kolben zu schaffen. Die Stützflächen für die Feder sollten sichtbar sein.
- Ein Abstandsgelenk zwischen Kolben und Zylinder
Ausgewählte Flächen + Assembly AbstandsVerbindungErstellen → neu angeordneter Zylinderabstand eingestellt auf 200 mm
Setze den Abstands-Wert auf 200 mm.
Die nächsten beiden Gelenke sind notwendig, um das Scharnier des Zylinders zu zwingen, sich auf einem Kreisbogen zu bewegen.
- Eine zylindrische Verbindung zwischen Achse1 und der Stange
Ausgewählte Elemente + Assembly ZylindrischeFührungErstellen → neu geordneter Stab
Stelle sicher, dass die Z-Achse des Koordinatensystems (blau) senkrecht zum Stab ist, indem ein Endpunkt ausgewählt wird.
- Ein Drehgelenk zwischen Stange und Zylinder
Ausgewählte Elemente + Assembly DrehverbindungErstellen → neu angeordnete Zylinder
Achte auch hier darauf, dass die Z-Achse des Koordinatensystems (blau) senkrecht zum Stab steht.
Mit dieser Verbindung können Probleme auftreten. Wenn das der Fall ist, probiere folgendes:
- Lösche die Verbindung.
- Wechsle zur Vorderansicht.
- Drehe den Zusammenbau (durch ziehen des Kolben) und drehe die Stange so, dass die Mitte des Scharnierlochs des Zylinders auf der Stange liegt.
- Erzeuge die Verbindung erneut.
Die nächsten zwei Verbindungen sind notwendig, um die Feder mit der Bezugsfläche zu verbinden.
- Eine parallele Verbindung zwischen Feder und Kolben
Ausgewählte Flächen + Assembly ParallelVerbindungErstellen → neu angeordnete Feder
Wähle das Zentrum der Unterstützungsfläche auf dem Kolben und das Zentrum der Bodenfläche der Feder. Wähle den Abstandswert 0.
- Eine feste Verbindung zwischen Feder und Kolben
Ausgewählte Elemente + Assembly StarreVerbindungErstellen → umgestaltete Feder
Wähle den unteren Scheitelpunkt der Naht des Zylinders im Kolben und den Eckpunkt in der Feder.
- Verbinde die Abstands-Eigenschaft Abstand-Verbindung zur Feder- Höhe-Eigenschaft mittels einer Ausdrücke:
- Wähle die Feder in der Baumansicht.
- Wähle das blaue Icon
im Feld Height Property.
- Öffne den Ausdrücke-Editor:
<<Distance>>.Distance
Bewegen des Stoßdämpfers
Doppelklicken Sie dazu in der Baumansicht auf das Objekt Abstand und ändern Sie dessen Eigenschaft Abstand. Berechnen Sie das Dokument neu. Die Feder ändert ihre Länge.
- Assembly: New Assembly, Component, New Part, Solve Assembly, Exploded View, Simulation, Bill of Materials
- Joints: Toggle Grounded, Fixed Joint, Revolute Joint, Cylindrical Joint, Slider Joint, Ball Joint, Distance Joint, Parallel Joint, Perpendicular Joint, Angle Joint, Rack and Pinion Joint, Screw Joint, Gears Joint, Belt Joint
- Preferences: Preferences
- Erste Schritte
- Installation: Herunterladen, Windows, Linux, Mac, Zusätzliche Komponenten, Docker, AppImage, Ubuntu Snap
- Grundlagen: Über FreeCAD, Graphische Oberfläche, Mausbedienung, Auswahlmethoden, Objektname, Voreinstellungseditor, Arbeitsbereiche, Dokumentstruktur, Objekteigenschaften, FreeCAD unterstützen, Spenden
- Hilfe: Anleitungen, Videoanleitungen
- Arbeitsbereiche: Std Base, Arch, Assembly, BIM, CAM, Draft, FEM, Inspection, Material, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
