Bonjour à tous.

Après avoir lu un tweet de Patrick Letourneau : https://twitter.com/PolygonSandwich/...37946457239553,
j'ai décidé de me coller à la programmation d'un script pour résoudre ce problème.

Voici donc ce qu'il est censé réaliser:

Pour chaque objet sélectionné :
- Effacer les doublons de tags de texture
- Effacer les tags de sélection vide
- Effacer les tags de texture restreint à des tag de sélection qui n'existe pas

C'est sûrement très mal programmé, je débute totalement en python, mais si vous avez l'occasion de le tester, je suis avide de retours...

Code:
import c4d
from c4d import gui


### For selected polygon objects
###    - remove empty selection tags
###    - remove texture tags restricted to non-existing selection tag
###






def nettoie_polygon_tag(t,anciens_tags):
    """ on s'occupe des selections de polygones """
    
    s = t.GetBaseSelect()
    if s.GetCount() == 0:
        t.Remove()        
        
def nettoie_texture_tag(t,anciens_tags):
    """ on s'occupe des textures """
    
    flag_a_garder = False


    if t[c4d.TEXTURETAG_RESTRICTION]:
        la_restriction = t[c4d.TEXTURETAG_RESTRICTION]
        
        # verifie si restriction existe dans selectiontag
        for tt in anciens_tags:
            if type(tt) is c4d.SelectionTag:
                
                if tt.GetName() == str (la_restriction):
                    flag_a_garder = True
                    
    else:
        flag_a_garder = True


    if not flag_a_garder:
        t.Remove()


def nettoie_doublon_texture_tag(tag,anciens_tags):
    """ on ne garde que la derniere texture """
    
    tags_tex_liste = []
    for tt in anciens_tags:
        if type(tt) is c4d.TextureTag:
            if not tt[c4d.TEXTURETAG_RESTRICTION]:
                tags_tex_liste.append(tt)
                ## tt.Remove()
    
    ## remet le dernier
    print tags_tex_liste
    print (len (tags_tex_liste) )
        
    
def nettoie_tags(o):
    """
    Nettoyage des Tags
    """
    
    


    ### Passe 1 : virer tag textures doublons
    anciens_tags = o.GetTags()
    for tag in anciens_tags:
        if type(tag) is c4d.TextureTag:        
            tags_tex_liste = []
            for tag in anciens_tags:
                if type(tag) is c4d.TextureTag:
                    if not tag[c4d.TEXTURETAG_RESTRICTION]:
                        tags_tex_liste.append(tag)
                        tag.Remove()
    
    c4d.EventAdd()            
    
    ##  Passe 2 : remetre le dernier tag texture
    if len (tags_tex_liste) > 0:
        le_dernier_tag = tags_tex_liste[len(tags_tex_liste) - 1]
        print le_dernier_tag
    
        o.InsertTag(le_dernier_tag)
    
        c4d.EventAdd()


    ### Passe 3 : virer selection polygones vides
    anciens_tags = o.GetTags()
    for tag in anciens_tags:
        if type(tag) is c4d.SelectionTag:        
            nettoie_polygon_tag(tag,anciens_tags)
    c4d.EventAdd()
    
    ### Passe 4 : virer tag textures dont la restriction n'existe pas
    anciens_tags = o.GetTags()
    for tag in anciens_tags:
        if type(tag) is c4d.TextureTag:        
            nettoie_texture_tag(tag,anciens_tags)
    c4d.EventAdd()
    


def main():
    ledoc = c4d.documents.GetActiveDocument() ## type : c4d.documents.BaseDocument
    laselection = ledoc.GetActiveObjects(0)   ## type : list
    


    
    ledoc.StartUndo()
    for ob in laselection:                    ## type: c4d.PolygonObject
        doc.AddUndo(c4d.UNDOTYPE_CHANGE,ob)
        nettoie_tags(ob)
        
    ledoc.EndUndo()
    c4d.EventAdd()
        
if __name__=='__main__':
    main()