Les premiers résultats, un portail qui s'ouvre, reste ouvert pendant deux secondes, puis se ferme, et reste fermé pendant 2 secondes.
J'ai détaillé au maximum le programme.
A régler :
Le portail, ne tourne pas autour de l'axe qui est prévu, mais autour d'une arrête du poteau.
Il faudrait pouvoir déplacer l'axe de rotation Z en x, et y.
Le prochain, un portail à crémaillère. Cela va être plus difficile.
ET MERCI A TOUT CEUX QUI M'ONT AIDE.
Code: Select all
import math, time, Part
# -*- coding: utf-8 -*-
#la ligne ci dessus permet d'avoir des accents dans le fichier
def ouvrir():
i=0
common = p.Shape.common(car.Shape ) # common fait l'intersection forme des pièces, ici la butée avant et le portail
while not(common.Volume)>0.0:# tant que me portail n'est pas ouvert
i=i+0.5 # incrémente de 0.5 degré l'angle pour ouvrir la barrière.
p.Placement = App.Placement(App.Vector(0,0,0), App.Rotation(App.Vector(0,1,0),i), App.Vector(0,0,0)) # modifie le Placement de p (Rotation Axe Z)
Gui.updateGui() #Met l'écran graphique à jour
common = p.Shape.common( car.Shape ) # refait common fait l'intersection forme des pièces, ici la butée avant et le portail avres le nouveau de déplacementde 0.5 degré.
def fermer():
i=110
common = p.Shape.common(cav.Shape ) # common fait l'intersection forme des pièces, ici la butée avant et le portail
while not(common.Volume)>0.0:
i=i-0.5 # Décrémente la variable de 1/10, donc a chaque passag dans la boucle While, la barrière tourne 1/10 de degré.
p.Placement = App.Placement(App.Vector(0,0,0), App.Rotation(App.Vector(0,1,0),i), App.Vector(0,0,0)) # modifie le Placement de p (Rotation Axe Y)
Gui.updateGui() #Met l'écran graphique à jour
common = p.Shape.common(cav.Shape ) # refait common fait l'intersection forme des pièces, ici la butée avant et le portail avres le nouveau de déplacementde 0.5 degré.
from PySide import QtGui #on charge les outils qu'il faut
dial = QtGui.QProgressDialog(u"Animation en cours...", u"Stopper",0,0) #Definition d'une boite de message
dial.setModal(True) #En faire un message bloquant (pas d'utilisation de FreeCAD pendant ce temps)
dial.show() #Afficher le message
p = FreeCAD.ActiveDocument.getObjectsByLabel("portail_01")[0] # on travaille sur p qui represente les données de "portail"
cav = FreeCAD.ActiveDocument.getObjectsByLabel("capteur_avant_01")[0] # on travaille sur le capteur avant
car = FreeCAD.ActiveDocument.getObjectsByLabel("capteur_arriere_01")[0] # on travaille sur le capteur arrière
animer=True
while(animer):
ouvrir()# appel la fonction ouvrir
time.sleep(2) # Attendre 2s
fermer() # appel la fonction fermer
time.sleep(2) # Attendre 2s
QtGui.qApp.processEvents() #Laisser le gestionnaire graphique faire son boulot
animer= not dial.wasCanceled() #Vérifier l'appui sur le bouton