Boutique Cinema 4D
Affichage des résultats 1 à 13 sur 13

Discussion: User Data "Bouton" comment s'en servir ?

  1. #1
    Dépendant
    Date d'inscription
    juin 2006
    C4D version
    Cinema 4D R11.5
    OS
    Win 7
    Messages
    446

    User Data "Bouton" comment s'en servir ?

    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.

  2. #2
    Dépendant
    Date d'inscription
    juin 2006
    C4D version
    Cinema 4D R11.5
    OS
    Win 7
    Messages
    446
    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.

  3. #3
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 869
    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.)

  4. #4
    Dépendant
    Date d'inscription
    juin 2006
    C4D version
    Cinema 4D R11.5
    OS
    Win 7
    Messages
    446
    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.

  5. #5
    Dépendant
    Date d'inscription
    octobre 2011
    C4D version
    R15 Studio
    OS
    Win7 64 bits
    Messages
    404
    Citation Envoyé par valkaari Voir le message
    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)
    J'avais vu avec Yann pour faire un bouton en DU pour lancer des callcommand et Yann a bien cherché mais pas trouvé de soluce

  6. #6
    Pilier Avatar de xs_yann
    Date d'inscription
    février 2005
    C4D version
    R19 Studio
    OS
    Mac OS X 10.13
    Messages
    1 989
    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 à 01h32.

  7. #7
    Dépendant
    Date d'inscription
    octobre 2011
    C4D version
    R15 Studio
    OS
    Win7 64 bits
    Messages
    404
    Citation Envoyé par xs_yann Voir le message
    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.
    C'est plus clair quand c'est toi qui le dis

  8. #8
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 869
    On est d'accord sur le fait que le problème, c'est pas de le faire, mais de le faire dans un xpresso ^^

  9. #9
    Squatteur Avatar de Condor34
    Date d'inscription
    mars 2013
    C4D version
    R16 Studio
    OS
    Windows 7/64
    Messages
    173
    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 ?

  10. #10
    Pilier Avatar de pxlntwrk
    Date d'inscription
    janvier 2012
    C4D version
    Autre
    OS
    7x64
    Messages
    1 055
    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

  11. #11
    Squatteur Avatar de Condor34
    Date d'inscription
    mars 2013
    C4D version
    R16 Studio
    OS
    Windows 7/64
    Messages
    173
    Merci, merci.

    Donc on ne peut pas s'en servir.

    Utiliser une checkbox en lieu et place.

    Moins convivial, mais ça fera l'affaire.

  12. #12
    Pilier Avatar de xs_yann
    Date d'inscription
    février 2005
    C4D version
    R19 Studio
    OS
    Mac OS X 10.13
    Messages
    1 989
    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 :
    Code PHP:
    import c4d

    unique_id 
    1038939

    def set_container
    (opbutton_id):
        
    bc op.GetDataInstance()
        
    container bc.GetContainer(unique_id)
        
    container.SetBool(button_idTrue)
        
    bc.SetContainer(unique_idcontainer)

    def message(msg_typedata):
        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(docopc4d.NOTIFY_EVENT_MESSAGE):
            
    bc c4d.BaseContainer()
            
    host.AddEventNotification(opc4d.NOTIFY_EVENT_MESSAGE0bc
    Lorsque un clic est intercepté, l'information est stockée dans le container du contrôleur.

    Ensuite dans l'Xpresso il suffit de vérifier le container pour voir si un bouton a été cliqué (noeud Python) :

    Code PHP:
    import c4d

    unique_id 
    1038939
    UD_BUTTON 
    1

    def get_container
    (opbutton_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(controllerUD_BUTTON
    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

    def main
    ():
        
    controller op.GetNodeMaster().GetOwner().GetObject()
        
    bc controller.GetDataInstance()
        
    container bc.GetContainer(unique_id)
        
    container.FlushAll()
        
    bc.SetContainer(unique_idcontainer


    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):

    Code PHP:
    import c4d

    UD_CHECKBOX 
    1

    def main
    ():
        for 
    descidbc in op.GetUserDataContainer():
            if 
    descid[1].id == UD_CHECKBOX:
                
    bc[c4d.DESC_CUSTOMGUI] = c4d.CUSTOMGUI_BUTTON
                op
    .SetUserDataContainer(descidbc)
        
    c4d.EventAdd()

    if 
    __name__=='__main__':
        
    main() 
    Ce script transforme la donnée utilisateur avec l'ID 1 (de l'objet sélectionné dans l'OM) en bouton.
    Ensuite un simple Xpresso comme ceci devrait suffire :



    Le fichier c4d : http://www.xsyann.com/fc4d/button_ud.c4d

  13. #13
    Squatteur Avatar de Condor34
    Date d'inscription
    mars 2013
    C4D version
    R16 Studio
    OS
    Windows 7/64
    Messages
    173
    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.

Discussions similaires

  1. [Résolu] User Data Inactif
    Par Pandoxyd dans le forum Nouveaux membres
    Réponses: 0
    Dernier message: 08/07/2014, 11h26
  2. xref et user data
    Par jiajo dans le forum Nouveaux membres
    Réponses: 3
    Dernier message: 12/05/2010, 18h37
  3. Réponses: 1
    Dernier message: 15/02/2007, 12h50
  4. Réponses: 10
    Dernier message: 06/02/2007, 12h08
  5. Réponses: 14
    Dernier message: 20/01/2007, 17h06

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet