Macro simulation d'un vilebrequin
| Description | 
|---|
| Simulation de mouvement d'un vilebrequin. Version macro : 1.0 Date dernière modification : 2014-06-13 Version FreeCAD : All Téléchargement : ToolBar Icon The file crank_simul.fcstd Auteur: kwahoo | 
| Auteur | 
| kwahoo | 
| Téléchargement | 
| ToolBar Icon The file crank_simul.fcstd | 
| Liens | 
| Page des macros Comment installer une macro Comment créer une barre d'outils | 
| Version Macro | 
| 1.0 | 
| Dernière modification | 
| 2014-06-13 | 
| Version(s) FreeCAD | 
| All | 
| Raccourci clavier | 
| None | 
| Voir aussi | 
| None | 
Description
Cette animation simple utilise une esquisse et le solveur afin de déterminer la position et la rotation du piston et de la bielle.
Utilisation
Pour tester l'animation :
Télécharger les fichiers et copier le code dans la console Python de FreeCAD.
1. Ouvrir le fichier joint
Pour stopper l'animation, taper dans la console : "animation.stop()"
Le fichier
Script
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()
Liens
La discussion sur le forum (en anglais) Inline-four engine animation
Le blogue freecad-tutorial.blogspot


