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

Discussion: Script python: conversion de l'image du presse-papier en matériau

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

    Script python: conversion de l'image du presse-papier en matériau

    Joyeux Noël à toutes et à tous,

    Je n'ai pas eu le temps de participer au calendrier cette année, je mets donc mon petit cadeau sous le sapin.

    Il s’agit d'un script pour coller sous forme de texture une image provenant du presse-papier. Très pratique pour récupérer des images provenant d'internet ou des zones sélectionnées depuis photoshop.
    • par défaut, si le document est enregistré l'image est directement enregistrée dans le dossier tex sous un nom incrémental de type image001, sinon on choisit le nom et l'emplacement
    • si un objet est sélectionné, il lui applique la texture
    • un objet plan avec la texture appliquée est directement placé dans le document avec les bonne proportions


    Sinon en modifiant dans le code les constantes en majuscules vous pouvez modifier les paramètres par défaut:

    • CHOISIR_NOM = True (attention de respecter la casse) vous donne la possibilité de choisir l'emplacement et le nom de l'image chaque fois
    • CREER_PLAN = False évite que l'on crée un nouvel objet plan
    • NOM_IMG_DEFAUT = 'xxxx' (entre guillemets simples ou double) vous permet de choisir le nom de l'image par défaut

    Code:
    import c4d,os
    
    #si CHOISIR_NOM = True une boîte de dialogue s'ouvre pour choisir le nom et l'emplacement de la sauvegarde
    
    #si CHOISIR_NOM = False c'est NOM_IMG_DEFAUT qui est pris en compte et l'image est sauvagardée dans le dossier tex
    #les images sont numérotées pour ne pas écraser une existante
    
    #Attention si le document actif n'est pas enregistré CHOISIR_NOM = True'
    
    CHOISIR_NOM = False
    
    #Mettre CREER_PLAN = True pour creer un plan avec la texture appliquée sinon False
    CREER_PLAN = True
    
    NOM_IMG_DEFAUT = 'image'
    SUFFIXE = '.jpg'
    
    def main():
        choix_nom = CHOISIR_NOM
        
        bmp =  c4d.GetBitmapFromClipboard()
        if not bmp : return
        
        path =  doc.GetDocumentPath()
        if not path : 
            choix_nom = True
        else :
            path = os.path.join(path,'tex')
            if not os.path.isdir(path):
                os.makedirs(path, mode=0777)
        
        x, y = bmp.GetSize()
        relatif = True
        
        if choix_nom:
            fn = c4d.storage.SaveDialog(type=c4d.FILESELECTTYPE_IMAGES, title="Sauvegarder l'image :", force_suffix=SUFFIXE[1:],  def_path = path)
            if not fn : return
            if os.path.dirname(fn)!= doc.GetDocumentPath():
                relatif = False
            
            
        else :
            id_nom = 0
        
            fn = os.path.join(path, NOM_IMG_DEFAUT+str(id_nom).zfill(3)+SUFFIXE)
            
            while os.path.isfile(fn):
                id_nom+=1
                fn = os.path.join(path, NOM_IMG_DEFAUT+str(id_nom).zfill(3)+SUFFIXE)
        
        bmp.Save(fn, c4d.FILTER_JPG)
        
        
        mat = c4d.BaseMaterial(c4d.Mmaterial)
        mat.SetName( os.path.basename(fn))
        doc.InsertMaterial(mat)
        shd = c4d.BaseList2D(c4d.Xbitmap)
        
        if relatif:
            shd[c4d.BITMAPSHADER_FILENAME] = os.path.basename(fn)
        else :
            shd[c4d.BITMAPSHADER_FILENAME] = fn
            
        mat[c4d.MATERIAL_COLOR_SHADER] = shd
        mat.InsertShader(shd)
        mat[c4d.MATERIAL_PREVIEWSIZE] = c4d.MATERIAL_PREVIEWSIZE_NO_SCALE
        mat.Message(c4d.MSG_UPDATE)
        mat.Update(True, True)
        
        if op:
            tag = c4d.TextureTag()
            tag.SetMaterial(mat)
            op.InsertTag(tag)
        
        if CREER_PLAN:
            #rep = c4d.gui.QuestionDialog('Créer un plan ? ')
            #if not rep : return
    
            plan = c4d.BaseObject(c4d.Oplane)
            plan[c4d.PRIM_PLANE_WIDTH] = x
            plan[c4d.PRIM_PLANE_HEIGHT] = y
            plan[c4d.PRIM_PLANE_SUBW] = plan[c4d.PRIM_PLANE_SUBH] = 1
            plan.SetName(os.path.basename(fn))
            tag = c4d.TextureTag()
            tag[c4d.TEXTURETAG_PROJECTION] = c4d.TEXTURETAG_PROJECTION_UVW
            tag.SetMaterial(mat)
            plan.InsertTag(tag)
            doc.InsertObject(plan)
            
        c4d.EventAdd()
    
        
        
    
    if __name__=='__main__':
        main()
    Pour l'instant je n'ai testé que sous MacOs et sur la r16

    Merci à tous les contributeurs pour le calendrier de l'avent et l'année prochaine j'essaierai d'être à l'heure.
    Dernière modification par oli_d ; 03/01/2015 à 18h22.

  2. #2
    Vieux Croûton Avatar de Aurety
    Date d'inscription
    juillet 2002
    C4D version
    R17 Studio
    OS
    Mac
    Messages
    14 477
    Billets dans le blog
    3
    Merci Oli !! Quelle bonne idée, je teste dès que mon rendu est terminé
    kenavo !! // Pinterest KAMIGAZ®

  3. #3
    Vieux Croûton Avatar de Aurety
    Date d'inscription
    juillet 2002
    C4D version
    R17 Studio
    OS
    Mac
    Messages
    14 477
    Billets dans le blog
    3
    Top ! Ca marche super bien.. ca serait cool si dans le cas de Photoshop, on pouvait récuperer un png+alpha plutôt qu'un Jpg car si on met dans le presse papier un calque, on se retrouve avec un fond-noir en lieu et place de l'alpha.
    Merci encore Oli
    kenavo !! // Pinterest KAMIGAZ®

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

    J'y avais pensé, mais l'image du presse-papier que je récupère via une méthode du python c4d ne semble pas avoir de couche alpha, ou alors je m'y prends mal. Donc cela ne changera rien en png.

    Si je trouve une autre piste, je modifierai....

Discussions similaires

  1. Rown script Python
    Par iolofato dans le forum Plugins
    Réponses: 0
    Dernier message: 28/11/2012, 13h12
  2. [WIP] Orange Pressé II
    Par Thierry HL dans le forum Travaux en cours
    Réponses: 256
    Dernier message: 23/09/2007, 01h48
  3. [WIP] Orange Pressé I
    Par base80 dans le forum Travaux en cours
    Réponses: 904
    Dernier message: 30/11/2006, 00h36
  4. Dessin de presse
    Par matt roussel dans le forum Travaux en cours
    Réponses: 4
    Dernier message: 06/07/2004, 15h08

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