Hello les gars,
Je voulait demander comment se servir du type de donné utilisateur "boutton" car je ne la trouve pas dans les propriété de l'objet à qui elle appartient quand je la glisse dans une fenêtre xpresso.
Merci d'avance
Pour savoir, il faut vouloir. Pour pouvoir il faut savoir.
De, meme pour le bouton "Reinitialiser FK" dans les propriétés du tag "IK" je ne peux pas l'extraire dans Xpresso, du coup si j'anime je doit aller chercher le tag ik dans la hierarchie pour pouvoir reinitialiser la pose FK
Pour savoir, il faut vouloir. Pour pouvoir il faut savoir.
j'aurais eu tendance à dire qu'il fallait utiliser un script python ou coffee et faire un "callButton" pour simuler le click sur le bouton mais ça ne marche pas dans un xpresso.
Je vois pas trop là... (j'ai pas passé un temps fou à chercher non plus remarque)
Par contre, peut être qu'un script t'aiderais, on pourrais reset tous les tag trouvé enfant d'un objet sélectionné. (pour ne pas faire un reset de tous les tag ik de la scène.)
Pour le moment le seul truc que j'ai trouvé plus pratique que d'aller chercher dans la hiérarchie c'est d'ajouter le tag à l'affichage frontal (hu) en l'affichant en permanence, dans l'absolu ça règle mon problème mais je me demande quand même à quoi sert donc l'user data button. jusqu’à la R13 j’utilisais la case à cocher couplé a un noeux bool pour faire un bouton (méthode cactus dan) et quand j'ai vu qu'avec la version suivante il ont inclut un data bouton la je pensait que se fera plus facilement mais à apparemment ça ne sert à rien, je pense même qu'ils (les dev de maxon) on commencé le truc, qu'il n'ont pas eu le temps de le terminer mais qu'il ont aussi oublié de le retiré hahahah ! après faire un script que pour ça je pense pas qu'il en vaut vraiment le coup hiihihi
Merci en tout cas Valkaari
Pour savoir, il faut vouloir. Pour pouvoir il faut savoir.
Je sais faire un bouton en DU (http://frenchcinema4d.fr/showthread....918-PointeuseY) mais pas simuler un clic sur un bouton dans un Xpresso.
edit : un thread qui résume bien la situation : http://www.plugincafe.com/forum/foru...s.asp?TID=5678
La solution serait d'utiliser c4d.SpecialEventAdd() et d'intercepter le message dans un plugin.
Dernière modification par xs_yann ; 10/10/2014 à 00h32.
On est d'accord sur le fait que le problème, c'est pas de le faire, mais de le faire dans un xpresso ^^
Bonjour à tous.
Désolé de déterrer un topic aussi ancien, mais comme il existe...
Je suis confronté au même problème, pas d'accès au bouton dans les données utilisateur du nœud expresso.
Savez-vous si la situation est restée inchangée depuis, où est-il maintenant possible de capter le "onClick" de ce bouton dans un xpresso ?
salut
ici > http://forums.cgsociety.org/showthread.php?t=1241344
tu trouveras un exemple d'utilisation du bouton pour appeler une fonction ou commande.
Mais ne me demande pas de t'expliquer ...
::::::::::::::
pxlntwrk.net
Merci, merci.
Donc on ne peut pas s'en servir.
Utiliser une checkbox en lieu et place.
Moins convivial, mais ça fera l'affaire.
Je ne crois pas qu'il y ai possibilité d'écouter un événement dans un Xpresso (type Message).
La seule solution à mon sens est donc de récupérer une valeur "statique" (un booléen) et de réinitialiser après le traitement.
Méthode 1
En utilisant un vrai bouton et la méthode de pxlntwrk (code de Niklas Rosenstein).
Code à mettre dans un tag python sur le contrôleur qui possède les données utilisateur :
Lorsque un clic est intercepté, l'information est stockée dans le container du contrôleur.Code PHP:
import c4d
unique_id = 1038939
def set_container(op, button_id):
bc = op.GetDataInstance()
container = bc.GetContainer(unique_id)
container.SetBool(button_id, True)
bc.SetContainer(unique_id, container)
def message(msg_type, data):
if msg_type == c4d.MSG_NOTIFY_EVENT:
event_data = data['event_data']
if event_data['msg_id'] == c4d.MSG_DESCRIPTION_COMMAND:
desc_id = event_data['msg_data']['id']
set_container(data['bl'], desc_id[1].id)
def main():
host = op.GetObject()
if not host.FindEventNotification(doc, op, c4d.NOTIFY_EVENT_MESSAGE):
bc = c4d.BaseContainer()
host.AddEventNotification(op, c4d.NOTIFY_EVENT_MESSAGE, 0, bc)
Ensuite dans l'Xpresso il suffit de vérifier le container pour voir si un bouton a été cliqué (noeud Python) :
Et via un second noeud Python, remettre les valeurs du container à False pour ne pas que le bouton soit considéré comme cliqué à la prochaine exécution :Code PHP:
import c4d
unique_id = 1038939
UD_BUTTON = 1
def get_container(op, button_id):
bc = op.GetData()
container = bc.GetContainer(unique_id)
return container.GetBool(button_id)
def main():
global button_clicked
controller = op.GetNodeMaster().GetOwner().GetObject()
button_clicked = get_container(controller, UD_BUTTON)
Code PHP:
import c4d
unique_id = 1038939
def main():
controller = op.GetNodeMaster().GetOwner().GetObject()
bc = controller.GetDataInstance()
container = bc.GetContainer(unique_id)
container.FlushAll()
bc.SetContainer(unique_id, container)
Méthode 2
Cette méthode consiste à utiliser une checkbox mais qui s'affiche sous forme de bouton.
Quand le bouton est cliqué, il reste enfoncé jusqu'à ce qu'il soit re-cliqué (ou remis à zéro via Python/Xpresso).
Le seul moyen que je connaisse est de passer par un script (à exécuter via le Script Manager):
Ce script transforme la donnée utilisateur avec l'ID 1 (de l'objet sélectionné dans l'OM) en bouton.Code PHP:
import c4d
UD_CHECKBOX = 1
def main():
for descid, bc in op.GetUserDataContainer():
if descid[1].id == UD_CHECKBOX:
bc[c4d.DESC_CUSTOMGUI] = c4d.CUSTOMGUI_BUTTON
op.SetUserDataContainer(descid, bc)
c4d.EventAdd()
if __name__=='__main__':
main()
Ensuite un simple Xpresso comme ceci devrait suffire :
Le fichier c4d : http://www.xsyann.com/fc4d/button_ud.c4d
Pour le plaisir de la compréhension de cette explication, je vais tenter de mettre en œuvre ces deux méthodes. La seconde répondant plus particulièrement à ce que j'envisage de faire.
Maintenant, c'est vraiment aller profondément dans une programmation qui est loin d'être à la portée du premier venu, tout ceci pour capturer un "onClick".
Je comprends dès lors que l'on trouve peu de littérature sur cet objet (maxon ne le décrivant pas même dans ses documents d'aide) et que les utilisateurs préfèrent s'en remettre à une case à cocher.
Merci beaucoup à vous deux.