Hello...
Question à 2 balles sur un truc qui me fait souvent perdre du temps.
Comment fait-on pour retrouver le matériau qui utilise une map spécifique?
Exemple: je sais que le fichier bidule.psd est utilisé dans l'un de mes 400 shaders, mais je ne sais pas lequel et j'ai un peu la flemme (on me comprend) d'aller le chercher à la mano et au hasard dans tous les canaux. Le menu Edit > Project Info > Structure me hiérarchise bien toutes les maps présentes dans mon projet, mais de là il n'y a pas de raccourci pour remonter au shader qui utilise cette map.
Alors comment on fait?
Merci d'avance pour toute suggestion!
NiKo
--- www.aerografik.fr ---
Y aune astuce. J'ai vu ça sur internet.
Je vais chercher mes gosses et je te tiens au jus.
Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.
J'ai pas la solution, mais déjà comme tu l'as dit via menu Edit > Project Info > Textures de l'éditeur d'attributs tu peux choisir matériau sélectionné au lieu de projet, comme ça tu n'a pas besoin de cliquer dans chaque canal, mais bon ça fait toujours encore 400 clics...
En python cela doit être faisable, simple si on regarde dans chaque canal à la racine, par contre si on a des calques je n'ai jamais regardé comment ça marche, mais cela doit être possible... A voir si personne n'a d'autre solution toute faite
Pas vraiment de solution finalement.
Tu peux verrouiller ta palette Attributs > Mode Infos projet > Textures, Matériau sélection sélectionné puis ensuite cliquer sur tes matériaux dans ton gestionnaire de matériaux pour voir quelle textures sont utilisées. Mais rien d'automatique.
Dernière modification par lenogre ; 30/04/2013 à 17h35.
Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.
Salut !
Ben si tu n'as pas mieux tu vires l'image du fichier tex, tu fais enregistrer le projet et là il te donne l'image manquante et le matériau.
C'est pas vachement élégant mais tu le fais quand personne te voit.
Bon en fait en python c'était plus simple que je pensais, colle ce code dans le gestionnaire de script puis exécuter
Tu rentres le nom de l'image dans la boîte de dialogue (pas le chemin juste le nom) et normalement cela te sélectionne tous les matériaux qui utilisent cette image :
J'ai testé que sur mac, mais cela devrait marcher sur PCCode PHP:
import c4d
import os.path
def searchBitmap(shd, liste):
while shd:
if shd.CheckType(c4d.Xbitmap):
fn = shd[c4d.BITMAPSHADER_FILENAME]
name = os.path.basename(fn)
liste.append(name)
searchBitmap(shd.GetDown(), liste)
shd = shd.GetNext()
def main():
nom_img = c4d.gui.InputDialog("Rentrez le nom de l'image :")
mat = doc .GetFirstMaterial()
while mat:
lst = []
shd = mat.GetFirstShader()
searchBitmap(shd, lst)
if nom_img in lst :
mat.SetBit(c4d.BIT_ACTIVE)
else : mat.DelBit(c4d.BIT_ACTIVE)
mat = mat.GetNext()
c4d.EventAdd()
if __name__=='__main__':
main()
Dernière modification par oli_d ; 30/04/2013 à 18h28.
Super efficace ton script… un gros merci.
Cela évite un temps fou à chercher une aiguille dans une botte de foin
Je comprends vite, mais faut m'expliquer longtemps…
simple, précis efficace nickel quoi
Vous en rêviez? Oli-d l'a fait!
Bravissimo! Super merci!
Peloton de tête sur la liste (conséquente) des gens à qui je dois payer une binouze!
--- www.aerografik.fr ---
Mortel merci Oli_D !
2x6coreXéon2.66(24T);64Gram; GTX 1080; OSX10.13.6 ////
Mac Studio 128 Ram ; OSX 12.3.1 ; papiercrayoncerveau;S22Studio;Redshift;Zbrush2022; CS2022
///SHTL 2011 DEMO HERE : http://demo.shtl.org/ /// NEW! 2014 WIP
Super Oli_d ! Merki
merci Oli_D !
Pouce haut !
Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.
Oli_D passe ici et c'est réglé
A fait d'énormes progrès pour se rapprocher du radiateur
Excellent oli_d
Je sens qu'il va me servir souvent : je l'ai déjà intégré dans mon interface.
rhoooo ça fait plaisir ces retours, merci les z'amis
Terrible !!! Merci Oli
kenavo !! // Pinterest KAMIGAZ®
Petite amélioration avec menu déroulant contenant toutes les images utilisées pour le choix de l'image :
Code PHP:
import c4d
import os.path
class MonDlg(c4d.gui.GeDialog):
"""Dialogue pour le choix de l'image, avec liste dérouante de toutes les images
utilisées dans les différents matériaux du doc"""
def __init__(self,lst):
self.lst = lst
self.choix = lst[0]
def CreateLayout(self):
self.SetTitle("Sélecteur de matériau par image ")
self.GroupBegin(1000,flags=c4d.BFH_SCALEFIT, cols=2, rows=1)
self.GroupBorderSpace(10, 10, 10, 0)
self.AddStaticText(1001,name="Image : ", flags=c4d.BFH_MASK, initw=100)
self.AddComboBox(1002,flags=c4d.BFH_MASK, initw=250)
self.GroupEnd()
self.GroupBegin(2000,flags=c4d.BFH_CENTER, cols=2, rows=1)
self.GroupBorderSpace(10, 10, 10, 0)
self.AddButton(2001, flags=c4d.BFH_CENTER, initw=100, name="OK")
self.AddButton(2002, flags=c4d.BFH_CENTER, initw=100, name="Annuler")
self.GroupEnd()
return True
def InitValues(self):
for i,n in enumerate(self.lst):
self.AddChild(1002,i,n)
return True
def Command(self,id,msg):
if id==1002 :#choix dans la liste
self.choix = self.lst[self.GetLong(1002)]
if id==2001:#bouton ok
selectMatImg(self.choix)
self.Close()
if id==2002:#bouton annuler
self.Close()
return True
def searchBitmap(shd, liste):
"""fonction récursive qui renvoie une liste avec les noms des fichiers images
utilisés dans le shader"""
while shd:
if shd.CheckType(c4d.Xbitmap):
fn = shd[c4d.BITMAPSHADER_FILENAME]
name = os.path.basename(fn)
liste.append(name)
searchBitmap(shd.GetDown(), liste)
shd = shd.GetNext()
def getListImg(docu=doc):
"""renvoie la liste de toutes les images contenue dasn les materiaux du doc"""
return sorted([os.path.basename(tex) for i,tex in docu.GetAllTextures()])
def selectMatImg(nom_img, docu=doc):
"""selectionne les materiaux qui utilisent l'image"""
if not nom_img : return
mat = docu .GetFirstMaterial()
while mat:
lst = []
shd = mat.GetFirstShader()
searchBitmap(shd, lst)
if nom_img in lst :
mat.SetBit(c4d.BIT_ACTIVE)
else : mat.DelBit(c4d.BIT_ACTIVE)
mat = mat.GetNext()
c4d.EventAdd()
def main():
imgs = getListImg(docu=doc)
if not len(imgs):
c4d.gui.MessageDialog("Il n'y a aucune image utilisée")
return
dlg = MonDlg(imgs)
dlg.Open(c4d.DLG_TYPE_MODAL)
return
if __name__=='__main__':
main()
Dernière modification par oli_d ; 04/05/2013 à 07h35.
franchement génial !! Je me suis permis de le poster chez nos amis de CGTalk Oli
kenavo !! // Pinterest KAMIGAZ®
Super, tu as bien fait !
merci Oli tu es zun chef !
Super!
Question annexe: j'ai docké le script dans mon interface. J'ai moyen de lui attribuer une icone spécifique créée toute exprès?
--- www.aerografik.fr ---
Je n'arrive pas à coller le code dans le gestionnaire de scripts. Tout reste grisé...
Y a une manip particulière à faire ?
www.paradoxstudio.fr - MacPro 12 core 2.93 ghz - 16 Go Ram - NVIDIA Quadro 4000 + GT120 / MacPro Octo-core 3.2 ghz / Wacom Cintiq 12 WX
gestionnaire de script -> nouveau script ( en Python ) - > tu colles le script -> ensuite executer
kenavo !! // Pinterest KAMIGAZ®
Haaaa merci les potos !
Moi et les lignes de codes, ça fait pas bon ménage.... J'avais point vu le menu Fichier dans le gestionnaire......
C'est top Oli_d, ça marche du feu de dieu. Hop ! Docké directement !
www.paradoxstudio.fr - MacPro 12 core 2.93 ghz - 16 Go Ram - NVIDIA Quadro 4000 + GT120 / MacPro Octo-core 3.2 ghz / Wacom Cintiq 12 WX
Je me suis permis de faire une icone spécifique pour docker tout ça proprement. Si ça intéresse quelqu'un, je partage l'image.
www.paradoxstudio.fr - MacPro 12 core 2.93 ghz - 16 Go Ram - NVIDIA Quadro 4000 + GT120 / MacPro Octo-core 3.2 ghz / Wacom Cintiq 12 WX
Yep... Pris. Merci Paradox.
J'ai appelé le script Bitmap2shader. Docké. Imppec.
Mille bravo Oli
--- www.aerografik.fr ---
Wouahou ! Vous êtes vraiment trop fort !
Merci Oli_D
Et merci Paradox pour l'icone
http://dr-graphix.blogspot.com/-DRG Design / Portfolio