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

Discussion: Touver les dependances d'un objet

  1. #1
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617

    Touver les dependances d'un objet

    Hello

    Est ce quelqu'un saurait si il y a un moyen de trouver les dépendances d'un objet.
    Par exemple si un objet a servi a créer des instances, trouver toutes les instances appelant cet objet.

  2. #2
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Salut,

    Je ne sais pas si la fonction existe, mais en python c'est assez facile avec une fonction récursive. Le script ci-dessous sélectionne toutes les instances qui ont comme source l'objet sélectionné.

    Code PHP:
    #coding : utf-8
    import c4d


    def sel_inst_from_source
    (source,obj=doc.GetFirstObject()):
        
    """fonction récursive pour sélectionner toutes les instances
           de l'objet source"""
        
    while obj:
            if 
    obj.CheckType(c4d.Oinstance):
                if 
    obj[c4d.INSTANCEOBJECT_LINK] == source:
                    
    #sélection de l'instance
                    
    obj.SetBit(c4d.BIT_ACTIVE)
            
    #récursion
            
    sel_inst_from_source(source,obj.GetDown())
            
    obj obj.GetNext()
        
        
    def main():
        
        if 
    not op:
            
    c4d.gui.MessageDialog("""Vous devez sélectionner un seul objet source des instances""")
            return
        
        
    #on déselectionne l'objet actif
        
    op.DelBit(c4d.BIT_ACTIVE)
        
        
    #sélection de toutes les instances de l'objet
        
    sel_inst_from_source(op)
        
        
    c4d.EventAdd()

    if 
    __name__=='__main__':
        
    main() 

  3. #3
    Pilier Avatar de pxlntwrk
    Date d'inscription
    janvier 2012
    C4D version
    Autre
    OS
    7x64
    Messages
    1 122
    Salut!

    sinon tu peux essayer le plugin Instance renamer
    https://www.rendertaxi.de/blog/en/c4...tance-renamer/
    il te donne le nombre d'instances dépendantes et les renomme aussi ,
    bien pratique
    ::::::::::::::
    pxlntwrk.net

  4. #4
    Pilier Avatar de Philippe casu
    Date d'inscription
    juillet 2002
    C4D version
    R20 Studio
    OS
    W 11 PRO 64
    Messages
    1 284
    tu peux peut être prendre le problème à l'envers et savoir à partir d'une instance quel objet est son référent et donc par déduction ...

    ça C4D le fait très bien mais tu dois déjà savoir faire ..

    bon après relecture de ton message pas sur que ça fasse l'affaire mon truc ..
    Dernière modification par Philippe casu ; 26/07/2018 à 16h49.
    Deux hommes intelligents, d'idées opposées, trouvent beaucoup plus de choses à se dire que deux cons appartenant à un même parti.

  5. #5
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617
    @oli_d
    Grand merci ton script marche nickel !


    @pxl
    Alors le plug-in est bien free, mais j'ais pas pu le telecharger. Ca te renvoie sur leur cloud ou il faut un compte et j'ai beau avoir cherché je n'ai pas trouver ou en creer un !
    Dommage pouvoir les renommer en plus de les trouver c'etait pas mal.
    Mais merci quand même


    @Philippe
    Oui je suis pas trop sur non plus, mais merci quand même

  6. #6
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Tu peux toujours renommer avec l'outil nom, mais j'ai adapté le script pour qu'il ait le même comportement que le plugin proposé par pxlntwrk.
    Tu peux sélectionner plusieurs objets sources et les instances sont automatiquement renommées selon l'objet source et numérotées.

    J'ai rajouté un undo aussi pour pouvoir annuler

    Code PHP:
    #coding : utf-8
    import c4d


    def rename_inst_from_source
    (source,no=0,obj=doc.GetFirstObject()):
        
    """fonction récursive pour renommer toutes les instances
           de l'objet source"""
        
    while obj:
            if 
    obj.CheckType(c4d.Oinstance):
                if 
    obj[c4d.INSTANCEOBJECT_LINK] == source:
                    
    no+=1
                    doc
    .AddUndo(c4d.UNDOTYPE_CHANGE,obj)
                    
    obj.SetName("{0}_instance_{1}".format(source.GetName(),str(no)))
            
    #récursion
            
    no rename_inst_from_source(source,no,obj.GetDown())
            
    obj obj.GetNext()
        return 
    no
        
    def main
    ():
        
        
    msg ''
        
    doc.StartUndo()
        for 
    o in doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_0):
            
    nb rename_inst_from_source(o)
            
    msg += "{0} : {1} instances trouvées et renommées\n".format(o.GetName(),nb)
        
    doc.EndUndo()    
        
    c4d.gui.MessageDialog(msg
        
    c4d.EventAdd()    

    if 
    __name__=='__main__':
        
    main() 
    Dernière modification par oli_d ; 27/07/2018 à 10h29.

  7. #7
    Pilier Avatar de ozchan
    Date d'inscription
    mars 2004
    C4D version
    R16 Studio
    OS
    Windows 10 pro
    Messages
    540
    ça marche super bien et quelle bonne idée de pouvoir renommer !
    merci
    Oser rêver, et mentir

  8. #8
    Pilier Avatar de Floc
    Date d'inscription
    novembre 2012
    C4D version
    R15 Studio
    OS
    WindOSX
    Messages
    1 617
    Excellent !
    Merci beaucoup Oli_d

  9. #9
    merci Oli_D de cet exemple concret, je me met aussi au python et au python sous C4D, c'est très interessant !
    J'ai réussi à modifier ton code pour qu'il affiche le pluriel ou le singulier dans le message final si il n'y a qu'une seule instance d'un objet. évidemment ça n'est pas très utile sinon à ce que je comprenne le code.

    Code PHP:
    #coding : utf-8
    import c4d

    def rename_inst_from_source
    (source,no=0,plu='',obj=doc.GetFirstObject()):    
        
    """fonction récursive pour renommer toutes les instances de l'objet source"""    
        
    while obj:        
            if 
    obj.CheckType(c4d.Oinstance):            
                if 
    obj[c4d.INSTANCEOBJECT_LINK] == source:                
                    
    no+=1                
                    doc
    .AddUndo(c4d.UNDOTYPE_CHANGE,obj)                
                    
    obj.SetName("{0}_instance_{1}".format(source.GetName(),str(no)))        
             
    #récursion        
             
    no rename_inst_from_source(source,no,plu,obj.GetDown())        
             
    obj obj.GetNext()    
          return 
    no    

    def main
    ():    
        
    msg ''    
        
    doc.StartUndo()    
        for 
    o in doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_0):        
             
    plu ''        
             
    nb rename_inst_from_source(o)        
             if 
    nb plu "s"        
             
    msg += "{0} : {1} instance{2} trouvée{2} et renommée{2}\n".format(o.GetName(),nb,plu)    
        
    doc.EndUndo()    
        
    c4d.gui.MessageDialog(msg)    
        
    c4d.EventAdd()

    if 
    __name__=='__main__':    
        
    main() 
    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		pluriel.jpg 
Affichages :	31 
Taille :		2,4 Ko 
ID : 			21904

Discussions similaires

  1. Aligner l'axe d'un objet vers un objet cible
    Par pasto dans le forum Modélisation
    Réponses: 12
    Dernier message: 02/06/2012, 01h40
  2. [ OBJET CLONEUR ] Comment passer d'un objet à l'autre
    Par 6nezDDDD dans le forum Nouveaux membres
    Réponses: 4
    Dernier message: 13/09/2011, 16h48
  3. Réponses: 5
    Dernier message: 02/09/2011, 12h32
  4. Explosion d'un objet texte contre un objet rectangle
    Par marijan dans le forum Nouveaux membres
    Réponses: 17
    Dernier message: 14/02/2008, 03h17
  5. Coller des éléments d'un objet sur un autre objet, possib?
    Par diskobox dans le forum Modélisation
    Réponses: 3
    Dernier message: 09/10/2004, 16h56

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