Comment introduire la propriété d'un object dans une macro ? Je ne sais pas faire.
Exemple dans le modèle joint comment introduire la propriété Fusion.Placement.Rotation.Angle dans la macro jointe, gracieusement mise à notre disposition par flachyjoe ?
Merci d'avance.
Code: Select all
###
# AnimSinus.FCMacro pour objet créer avec Part
# Macro pour créer une animation sinusoïdale par pilotage d'une propriété d'un objet.
# par flachyjoe <https://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=984>
###
from math import *
## Configuration de l'animation
ctrtName ="alpha" #Nom de la contrainte à animer
ctrtUnit ="rad" #Unité des valeurs ci-dessous
ctrtMin =-9.2/180*pi #Valeur minimale de la contrainte
ctrtMax =9.2*pi/180 #Valeur maximale de la contrainte
ctrtDelta =pi/180/2 #Valeur du pas
animFreq =10#Frequence (maximale) de l'animation
animLoop =True #L'animation se déroule tant que le bouton de la boite de dialogue n'a pas été cliqué
animFlipFlop =True #Anime en aller-retour (de ctrtMin à ctrtMax puis de ctrtMax à ctrtMin avec un pas de -ctrtDelta)
save =False #Execute UNE boucle d'animation en enregistrant les images résultantes
saveAsGIF =True #Converti la succession de Jpeg en une animation GIF (requière ImageMagick)
gifSize ="400x300" #Dimensions maximales du GIF
savePrefix ="AnimSinus" #Entête de nom des fichiers Jpeg / du fichier GIF /!\ écrase sans avertissement /!\
saveDir ="/tmp/" #Répertoire d'enregistrement des images/de l'animation
## Fin de la configuration
from time import sleep
doc=App.ActiveDocument
driverObj=None
driverId=None
for obj in doc.Objects:
if hasattr(obj, 'Constraints') :
try :
driverId = obj.getIndexByName(ctrtName)
driverObj = obj
break
except LookupError :
pass
if driverId is None:
raise LookupError("Aucune contrainte nommée %s n'a été trouvée" % ctrtName)
#Preparation boite de dialogue
from PySide import QtGui
mb = QtGui.QMessageBox()
mb.setIcon(mb.Icon.Warning)
mb.setText("Animation en cours")
mb.setWindowTitle("Macro Anim Sinus pour sémaphore")
mb.setModal(False)
mb.setStandardButtons(mb.StandardButton.Close)
run = True
userTerminate=False
def terminate(btn):
global run, userTerminate
run = False
userTerminate=True
mb.buttonClicked.connect(terminate)
mb.show()
Msg("Lancement de l'animation\r\n")
#Animation
view=Gui.activeView()
moitie=False
idx=0
alpha = ctrtMin
while run:
driverObj.setDatum(driverId, App.Units.Quantity(str(alpha)+ctrtUnit))
doc.recompute()
FreeCADGui.updateGui()
if save:
view.saveImage(saveDir + savePrefix + '_{:03d}'.format(idx) +'.jpg')
idx+=1
sleep(1./animFreq)
if alpha+ctrtDelta>ctrtMax or (animFlipFlop and alpha+ctrtDelta<ctrtMin):
if animFlipFlop:
ctrtDelta= -ctrtDelta
if moitie and (save or not animLoop):
run=False #fin de l'anim, on a fait un tour
moitie=True
else:
alpha=ctrtMin
if save or not animLoop:
run=False #fin de l'anim, on a fait un tour
alpha += ctrtDelta
Msg("Fin de l'animation\r\n")
if save and saveAsGIF and not userTerminate:
mb.setText("Conversion en GIF… patientez.")
mb.setDisabled(True)
FreeCADGui.updateGui()
import subprocess
params = ['convert', '-resize', gifSize, saveDir + savePrefix + '*.jpg', saveDir + savePrefix + '.gif']
try:
log=subprocess.check_output(params)
except FileNotFoundError:
Err("La conversion en GIF nécessite ImageMagick.\r\n")
except subprocess.CalledProcessError:
Err("Une erreur est survenue lors de la conversion en GIF.\r\n")
else:
#Supression des images Jpg
import os
import glob
fileList = glob.glob(saveDir + savePrefix + '*.jpg')
for filePath in fileList:
try:
os.remove(filePath)
except:
Err("Erreur à la supression de : ", filePath)
mb.close()