Bonjour à tous,
j'aurais besoin pour mon boulot d'un script python qui aurait les fonctionnalités suivantes :
- import d'un document txt qui contient un texte classique (phrases - paragraphes - .... )
- identification dans ce texte de plusieurs noms d'objet et recherchent de correspondance avec des objets 3d de la médiathèque de c4d
- import de tous ces objets 3d dans une scene c4d.
est ce, à votre avis, possible ou suis-je à coté de la plaque ?
merci
L
Pour ouvrir un fichier texte et le parcourir, ça va, mais pour le chercher dans la médiathèque, là j'avoue que je ne vois pas comment !
J'ai fait rapidement un début de script qui recherche dans un fichier texte une série de mots et affiche ceux trouvés dans la console, mais c'est tout...
Si quelqu'un a une idée pour la suite :
Code PHP:
import c4d
from c4d import gui
# Dictionnaire
# Mot à chercher dans le fichier : mot à chercher dans la médiathèque
dico = {"voiture" : [False, "car"],
"ferrari" : [False, "car"],
"avion" : [False, "plane"]
}
def accents(txt) :
txt = txt.replace("à", "a")
txt = txt.replace("â", "a")
txt = txt.replace("é", "e")
txt = txt.replace("ê", "e")
txt = txt.replace("è", "e")
txt = txt.replace("ë", "e")
txt = txt.replace("î", "i")
txt = txt.replace("ï", "i")
txt = txt.replace("ù", "u")
return txt
def main():
chem = c4d.storage.LoadDialog()
if chem is None : return
chem = chem.decode('UTF-8', 'strict')
fic = open(chem, 'r')
ligne = fic.readline()
while ligne :
ligne = ligne.lower()
ligne = accents(ligne)
for mc in dico.keys() :
if dico[mc][0] : continue
if mc in ligne : dico[mc][0] = True
ligne = fic.readline()
fic.close()
for mot, tab in dico.items() :
if not tab[0] : continue
media = tab[1]
print mot, media
if __name__=='__main__':
main()
Dernière modification par César Vonc ; 30/12/2014 à 20h16.
merci beaucoup , ça fonctionne !
l'idée est de pouvoir créer des scènes rapidement en important les bons objets lorsqu'il faut faire de manière répétitive des illustrations de documents écrits.
Par contre, je n'ai effectivement pas trouvé sur la doc python en ligne de maxon de référence à la médiathèque ?
C'est peut être contournable mais cela oblige à créer une bibliothèque perso de scènes et d'objet en dehors de 4cd
, avec perte des avantages de la médiathèque.
je continue à chercher..et je vais étudier ton code à la loupe (je démarre dans le python)
Merci encore
L
Bonjour,
Pour la médiathèque voici un exemple pour charger Fred de la bibliothèque Prime :
Variante si on veut importer tout le document :Code:import c4d def main(): #le nom commence par preset:// ensuite nom de la librairie, etc... la casse n'a apparemment pas d'influence fn = 'preset://prime.lib4d/humans/fred.c4d' #chargement du doc sans l'ouvrir dans c4d (sinon utiliser LoadFile) #dans ce cas je ne charge que les objets voir exemple suivant pour avoir objets et matériaux doc_media = c4d.documents.LoadDocument(fn,c4d.SCENEFILTER_OBJECTS) #on cherche l'objet Fred (atention ici la casse est importante fred = doc_media.SearchObject('Fred') #on clone l'objet et on l'insère dans notre document ouvert (doc) copie = fred.GetClone() doc.InsertObject(copie) #on rafraichit la vue c4d.EventAdd() if __name__=='__main__': main()
Par contre vu que l'on n'a pas accès aux dossiers de la médiathèque via la bibliothèque os ou glob je ne vois pas comment lister les contenu d'un dossier autrement qu'à la main ( ce qui protège un peu les éléments de la médiathèque selon la version de c4d...)Code:import c4d def main(): #le nom commence par preset:// ensuite nom de la librairie, etc... la casse n'a apparemment pas d'influence fn = 'preset://prime.lib4d/humans/fred.c4d' #on importe tout le document dans notre document ouvert (doc) # dans ce cas on importe les matériaux et les objets c4d.documents.MergeDocument(doc, fn, c4d.SCENEFILTER_MATERIALS | c4d.SCENEFILTER_OBJECTS) #on rafraichit la vue c4d.EventAdd() if __name__=='__main__': main()
Dernière modification par oli_d ; 31/12/2014 à 07h10.