Bonjour à tous.
A partir d'un top (basculement d'un booléen), je souhaite réaliser une action de rotation d'un axe en un temps donné. En fait, obtenir une vitesse angulaire.
Je pensais pouvoir programmer ceci en xpresso, mais je me heurte au problème suivant : tous les nœuds de contrôle de temps que j'ai pu trouver sont relatif au nombre de Frames.
Or, je ne souhaite pas lancer une animation, au sens timeline. Juste pouvoir déclencher un évènement en fonction du temps réel écoulé.
Savez-vous si l'on peut arriver à ce résultat par cette voie ?
tu peux freezer la valeur du temps au moment du déclenchement (booléen ) et soustraire cette valeur freezée à la valeur de temps à l'instant du déclenchement (enfin l'inverse Tréel - Tfreeze , ce qui offset le temps et le met à zéro au départ de ton action )
ici un petit exemple , lance la lecture et cliques sur le booléen 'Action' dans la vue ou sur le null object : il démarre le comptage quand tu l'actives et stop et freeze le comptage quand tu le repasses à 0 . ce booléen peut-être remplacé par une action d'un objet par ex .
Dernière modification par clemz ; 01/03/2017 à 10h43.
Merci Clemz.
Malheureusement il faut lancer l'animation pour avoir ce temps. C'est bien le problème que j'essaie de contourner.
Je souhaite capturer le temps système (l'heure en fait), au moment du basculement de l'état du booléen, puis faire qu'une rotation angulaire se réalise en un temps donné (environ 70° en 4 secondes).
Mais je ne suis pas encore en phase d'animation telle qu'on peut le comprendre en lançant une timeline.
Dans ce cas tu peux remplacer le noeud Time de l'Xpresso de clemz par un noeud Python (avec un port nommé 'Time' en output) :
Code PHP:
import time
def main():
global Time
Time = time.time()
La valeur qui est en sortie est un timestamp qui représente le nombre de secondes écoulées depuis Epoch (1 janvier 1970 00:00).
En faisant une soustraction, comme clemz l'explique, tu obtiens le nombre de secondes écoulées entre tes deux mesures.
Je suis confronté à deux problèmes :
1) Erreur de format
voici mon code de test :
Voici mes nodes de test : la sortie (Time) et l'entrée du résultat sont au format "temps".Code:import c4d, time #Welcome to the world of Python def main(): global Time Time = time.time() print "temps = ",Time
et voici le message d'erreur :
temps = 1488376591.41
TypeError: Node Python.Time expected c4d.BaseTime, not float
Time est bien calculé, mais pas moyen de l'exploiter en sortie, que ce soit un format temps ou réel. J'imagine que c4d.Basetime est le format traduit par "temps" en version FR.
2) Fonctionnement
Si je lance l'animation (F8) ce code est calculé en permanence. J'imagine à chaque frame.
Si je ne lance pas l'animation, ce code n'est calculé qu'une fois, donc pas de chronométrage possible. Comment réactualiser le code sans passer par le lancement d'une timeline ?
Merci pour votre aide à tous les deux.
tu peux nous en dire plus sur ce que tu veux exactement faire stp ? pas un chrono du coup ? un bouton on/off qui fasse tourner un objet avec les secondes qui passent , sans avoir à lire la timeline ?
Exactement !
Il s'agit en fait de séquencer la rentrée d'un train d'atterrissage.
A l'appui sur le bouton de sortie/rentrée du train, le train pivote puis, sur la fin de course, les trappes se ferment.
Comme je l'écrivais ci-avant, pour les trappes, c'est une rotation d'environ 70° pendant 4 secondes pour passer de la position ouverte à fermée (ou vice-versa bien sûr).
Quelque-chose de relativement simple en fait. Mais ce qui me semble simple, n'est pas toujours si évident.
Dernière modification par Condor34 ; 01/03/2017 à 15h36.
hmm ok ,
voila une version un peu comme celle de XSYann mais en coffee parceque je suis nul .
mais bon je ne comprends pas bien l'intérêt derrière car ton animation sera saccadée car elle jouera 1 image par seconde .. au lieu de 25/30 en temps normal .
voilou : donc tu as un booléen 'Action' qui met en marche ou arrête le décompte ; un booléen 'reset' qui lui remet à 0 quand tu relances 'Action' ; et une slider de contrôle de ta vitesse angulaire en degrés (donc à chaque seconde , ton objet tourne de cette valeur angulaire )
Merci Clemz pour toute cette aide.
En analysant ce matin avec un peu plus de recul, mon approche est mauvaise. Je souhaitais changer du slider, mais visiblement ça n'est pas dans l'esprit du logiciel.
Je vais donc revoir cette action dans un sens plus conventionnel, mais ce travail n'est pas perdu, j'ai une autre application de ce principe en vue. Et puis ça me permet de tester et d'apprendre.
Merci encore.