Existe-t-il un Atelier animation schéma cinématique

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
User avatar
jpg87
Posts: 809
Joined: Thu Mar 16, 2017 7:16 am
Location: Limoges - France
Contact:

Re: Existe-t-il un Atelier animation schéma cinématique

Post by jpg87 »

murfodef wrote: Wed May 13, 2020 6:38 pm Mais déjà une 1ère question: dans les ateliers j'ai A2plus, Assembly2 et Assembly4 mais pas de Assembly 3.
Assembly 3 est un atelier externe à télécharger ou je prends un des 3 Déjà en place?
Assembly 3 est disponible par la branche spéciale de Realthunder :
https://github.com/realthunder/FreeCAD_ ... s/tag/0.11

mais depuis quelques temps il est disponible dans l'AppImage pour Linux :
https://github.com/FreeCAD/FreeCAD/rele ... 4.AppImage

ou pour Windows :
https://github.com/FreeCAD/FreeCAD/rele ... -x86_64.7z

(page générale des mises à jour pre-releases 0.19 :
https://github.com/FreeCAD/FreeCAD/releases )

J'ai aussi testé Asm 2+ mais j'ai mes préférences pour Asm3.
My website : http://help-freecad-jpg87.fr updated 2023/11/06
murfodef
Posts: 7
Joined: Sun Feb 23, 2020 12:29 pm
Location: Lyon

Re: Existe-t-il un Atelier animation schéma cinématique

Post by murfodef »

flachyjoe wrote: Wed May 13, 2020 4:56 pm Si c'est en 2d, le sketcher fonctionne très bien pour une animation à la souris.
Capture d’écran_2020-05-13_18-54-09.png
Et ça doit pas demander beaucoup de python pour faire varier automatiquement l'angle.
Piste intéressante à laquelle je n'avais pas pensé.
Parfois on se complique bien la vie. ;) ;)
A l'arrache j'ai réussi à faire ça:
Sketch_Cinétique_BiellePiston.FCStd
(3.93 KiB) Downloaded 55 times
Mais je suis nouveau sous FreeCAD et j'ai un souci quand j'anime à la souris.
Un problème de contrainte certainement que je n'arrive pas à trouver. :roll: :roll: :roll:
Tu peux m'aider?
User avatar
flachyjoe
Veteran
Posts: 1869
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Existe-t-il un Atelier animation schéma cinématique

Post by flachyjoe »

Ton esquisse a 6 degrés de libertés, c'est pas normal un tel système ne devrait en avoir qu'un.
En fait il y a 4 points qui sont inutiles et que tu peux supprimer.
Capture d’écran_2020-05-13_23-12-49.png
Capture d’écran_2020-05-13_23-12-49.png (14.96 KiB) Viewed 1285 times
Ensuite les dimensions à 0 c'est pas une bonne idée. Les contraintes coïncidence et point-sur-un-objet sont là pour ça.
[Le wiki est tombé, je peux pas te mettre les liens vers les pages correspondantes :? ]

Une fois qu'il n'y a plus qu'un degré de liberté ça fonctionne. En faisant tourner la manivelle elle saute parfois à 180° de la souris, il faut alors la lâcher et la reprendre (bug ou limitation du solveur d'esquisse qui n'est pas vraiment fait pour la manipulation :?: )
EDIT : ça marche mieux quand on fait glisser l'extrémité de la ligne plutôt que la ligne.
- Flachy Joe -
Image
User avatar
jpg87
Posts: 809
Joined: Thu Mar 16, 2017 7:16 am
Location: Limoges - France
Contact:

Re: Existe-t-il un Atelier animation schéma cinématique

Post by jpg87 »

murfodef wrote: Wed May 13, 2020 8:25 pm...
Je pensais que tu voulais animer des mécanismes ou des schémas cinématiques du type scolaire.

Si c'est le cas, voici l'animation automatisée :
biellmaniAuto.gif
biellmaniAuto.gif (596.5 KiB) Viewed 1260 times
Le fichier et sa commande d'animation :
Asm3BiellMani.FCStd
(38.07 KiB) Downloaded 38 times
anim_asm3biellmani.py
(414 Bytes) Downloaded 36 times
BiellManiAuto.png
BiellManiAuto.png (37.29 KiB) Viewed 1260 times
Les contraintes PlaneAlignment que j'ai utilisées m'ont permis
1- de piloter l'angle correctement,
2- d'assurer des mouvements plans du mécanisme.
La contrainte Angle_Coulisseau-Bati assure l'horizontalité du coulisseau et la contrainte PointOnLine_Coulisseau-Bati assure la position verticale du coulisseau.

Pour animer le mécanisme, il faut éditer la macro, (passer en multi-fenêtrage) vérifier le paramètre indiqué, puis lire la macro.
My website : http://help-freecad-jpg87.fr updated 2023/11/06
murfodef
Posts: 7
Joined: Sun Feb 23, 2020 12:29 pm
Location: Lyon

Re: Existe-t-il un Atelier animation schéma cinématique

Post by murfodef »

jpg87 wrote: Thu May 14, 2020 6:50 am
murfodef wrote: Wed May 13, 2020 8:25 pm...
Je pensais que tu voulais animer des mécanismes ou des schémas cinématiques du type scolaire.

Si c'est le cas, voici l'animation automatisée :
.... / .....

Pour animer le mécanisme, il faut éditer la macro, (passer en multi-fenêtrage) vérifier le paramètre indiqué, puis lire la macro.
Merci bcp pour les infos.
Je ne m'y connais vraiment pas en macro (un jour il va quand même falloir que je m'y mette ;-) ).
Mais je vais regarder cela plus en détail pour voir et comprendre comment tu as procédé.

Ta démo (ainsi que celles qui précédent) est la preuve que l'on peut animer un schéma cinématique avec FreeCAD en choisissant les bons ateliers.

C'est une bonne nouvelle même si apparemment ce n'est pas forcément à la portée de tous: maîtrise de FreeCAD (que je découvre :oops: :oops: ), connaissance Assembly, macro, etc.

Je cherchais quelque chose de plus "intuitif" et ergonomique plutôt que d'aller mettre les mains dans le cambouis d'une macro. :geek: :ugeek: :shock: :o

Mais merci, ça fait avancer! ;) ;)
User avatar
flachyjoe
Veteran
Posts: 1869
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Existe-t-il un Atelier animation schéma cinématique

Post by flachyjoe »

Salut,
jpg87 wrote: Thu May 14, 2020 6:50 am
murfodef wrote: Wed May 13, 2020 8:25 pm...
La même en Sketcher ;)
Sketch_Cinétique_BiellePiston.FCStd
(10.77 KiB) Downloaded 66 times
Avec une macro pour animer la contrainte nommée Alpha (où qu'elle se trouve dans le document)
Anim Alpha.FCMacro
(961 Bytes) Downloaded 57 times
Capture d’écran_2020-05-14_14-50-39.png
Capture d’écran_2020-05-14_14-50-39.png (21.72 KiB) Viewed 1230 times
- Flachy Joe -
Image
User avatar
jpg87
Posts: 809
Joined: Thu Mar 16, 2017 7:16 am
Location: Limoges - France
Contact:

Re: Existe-t-il un Atelier animation schéma cinématique

Post by jpg87 »

flachyjoe wrote: Thu May 14, 2020 12:52 pm...
Salut Flachyjoe ! C'est un plaisir de te lire.
Waoo, j'apprécie ta solution et j'aimerais savoir faire des petits programmes comme ta macro.
Je ne connais rien en programmation, et la petite boucle que j'ai jointe précédemment m'a donné du mal par tests successifs et comparaison avec d'autres macros disponibles sur le forum ... et des aides bienvenues !

Toutefois, nous n'avons pas le même objectif :
Animer un schéma cinématique consiste à représenter chaque groupe de pièces solidaires (classes d'équivalences cinématiques), à mettre des contraintes entre ces blocs, puis un "moteur" (rotatif ou linéaire) voire plusieurs, pour "faire fonctionner" le mécanisme.
Donc ici 4 blocs : bâti, maneton (ou vilebrequin), bielle, coulisseau (ou piston).
On devrait pouvoir piloter la position du piston par une sinusoïde (moteur thermique) ou celle du maneton (compresseur).
J'attends avec impatience ces types de moteurs de pilotage où l'usager informe le système de différents paramètres, par ex. position/temps, vitesse, accélération, et le must, à partir de graphiques ...

Si le Covid me fout la paix, peut-être qu'un jour j'aurai le plaisir de trouver ça dans FreeCAD !

Si ça te branche de construire ce genre d'outil ...
My website : http://help-freecad-jpg87.fr updated 2023/11/06
User avatar
flachyjoe
Veteran
Posts: 1869
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Existe-t-il un Atelier animation schéma cinématique

Post by flachyjoe »

jpg87 wrote: Fri May 15, 2020 6:14 am représenter chaque groupe de pièces solidaires
Rien ne t’empêche d'accrocher des objets à l'esquisse animée :
Objets_Cinétique_BiellePiston.FCStd
(33.23 KiB) Downloaded 28 times
Pour ce qui est de piloter la position du piston, c'est pas beaucoup plus compliqué tant qu'on a une contrainte qui le positionne. Ma macro peut facilement être modifiée pour faire une boucle sur une variable t qui pilote une contrainte en k*sin(omega*t).
- Flachy Joe -
Image
User avatar
jpg87
Posts: 809
Joined: Thu Mar 16, 2017 7:16 am
Location: Limoges - France
Contact:

Re: Existe-t-il un Atelier animation schéma cinématique

Post by jpg87 »

flachyjoe wrote: Fri May 15, 2020 3:07 pm Rien ne t’empêche d'accrocher des objets à l'esquisse animée :
Tu as parfaitement raison, mais c'est difficile de lutter contre les habitudes.
Pendant plusieurs décennies, j'ai utilisé les contraintes d'assemblage dans Catia et SolidWorks.
On avait un logiciel complémentaire (Meca3D, toujours utilisé) qui nous permettait de conduire des études cinématiques, statiques et même dynamiques, à partir de nos assemblages.
Je vais donc tout naturellement vers ces contraintes d'assemblage et je retrouve mes vieux réflexes !

En plus, mes limites me rendent incapable de comprendre la structure des macros comme la tienne, et donc même par analogie je ne peux pas les reproduire ou les adapter ...
My website : http://help-freecad-jpg87.fr updated 2023/11/06
User avatar
flachyjoe
Veteran
Posts: 1869
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Existe-t-il un Atelier animation schéma cinématique

Post by flachyjoe »

Voila la macro d'animation un peu plus facile à utiliser (par la même occasion elle permet d’enregistrer un GIF :ugeek: ) :

Code: Select all

###
# Anim Alpha.FCMacro
# Macro pour créer une animation par pilotage d'une contrainte
# 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		=0		#Valeur minimale de la contrainte
ctrtMax		=2*pi		#Valeur maximale de la contrainte
ctrtDelta	=pi/24		#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	=False		#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	="anim"		#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 Alpha")
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…")
	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()
- Flachy Joe -
Image
Post Reply