ManuEffect
22/01/2016, 14h50
Bonjour à tous.
Après avoir lu un tweet de Patrick Letourneau : https://twitter.com/PolygonSandwich/status/690237946457239553,
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...
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()
Après avoir lu un tweet de Patrick Letourneau : https://twitter.com/PolygonSandwich/status/690237946457239553,
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...
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()