Macro simulation d'un vilebrequin

From FreeCAD Documentation
Revision as of 19:27, 1 January 2015 by Normandc (talk | contribs) (Created page with "Le blogue [http://freecad-tutorial.blogspot.be/ freecad-tutorial.blogspot]")

File:Text-x-python Crank Simul

Description
Crank simulation.

Auteur: kwahoo
Auteur
kwahoo
Téléchargement
None
Liens
Version Macro
1.0
Dernière modification
None
Version(s) FreeCAD
None
Raccourci clavier
None
Voir aussi
None

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

crank_simul.fcstd

Script

crank_simul.FCMacro

import FreeCAD as App, FreeCADGui as Gui, Part, time, sys, math, Draft, DraftGeomUtils
from PyQt4 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

Other languages: