Makro Kurbel Simulation

From FreeCAD Documentation
This page is a translated version of the page Macro crank simul and the translation is 100% complete.
Other languages:

Crank Simul

Beschreibung
Meine einfache Animation verwendet Skizze und Skizzierer Löser, um die Kolbenposition und die Pleuelposition/-rotation zu bestimmen.

Versionsmakro : 1.0
Datum der letzten Änderung : 2014-06-13
FreeCAD version : Alle
Herunterladen : Werkzeugleiste Symbol
Die Datei crank_simul.fcstd
Autor: kwahoo
Autor
kwahoo
Herunterladen
Werkzeugleiste Symbol
Die Datei crank_simul.fcstd
Links
Macro-Version
1.0
Datum der letzten Änderung
2014-06-13
FreeCAD-Version(s)
Alle
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Meine einfache Animation verwendet Skizze und Skizzierer Löser, um die Kolbenposition und die Pleuelposition/-rotation zu bestimmen.

Anwendung

Zum Testen der Animation:

Lade die Dateien herunter und kopiere den Code in die FreeCAD Python Konsole.

1. Öffne die angehängte Datei

Um die Animation anzuhalten tippe: "animation.stop()"

Die Datei

crank_simul.fcstd

Skript

ToolBar Icon

crank_simul.FCMacro

import FreeCAD as App, FreeCADGui as Gui, Part, time, sys, math, Draft, DraftGeomUtils
from PySide import QtGui,QtCore

class Animation(object):
    def __init__(self):
        App.Console.PrintMessage('init')

        App.ActiveDocument.recompute()

        self.timer = QtCore.QTimer()
        QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.my_update)
        self.timer.start(50)

        self.an = 0.1

    def my_update(self):
        string = '{0}'.format(self.an)
        self.an = self.an + 0.01 if self.an < (2 * math.pi) else 0.0

        angle = math.degrees(self.an)
        App.ActiveDocument.Sketch.setDatum(5,App.Units.Quantity(str(angle)+' deg'))
        App.ActiveDocument.recompute()
        p1 = App.ActiveDocument.Sketch.Shape.Vertexes[0].Point
        p2 = App.ActiveDocument.Sketch.Shape.Vertexes[1].Point
        conrodangle = math.degrees(Draft.DraftVecUtils.angle(App.Vector(1,0,0),(p1-p2))) - 90
        App.ActiveDocument.getObject("Cylinder").Placement = App.Placement(p1,App.Rotation(App.Vector(1,0,0),-90))
        App.ActiveDocument.getObject("Sketch001").Placement = App.Placement(p1,App.Rotation(App.Vector(0,0,1),conrodangle))

    def stop(self):
        self.timer.stop()
         

animation = Animation()

Verweise

Die Forum Diskussion Animation eines Reihenvierzylindermotors

Der Blog freecad-tutorial.blogspot