Cinema4D Python Script

Script pour appliquer une couleur d’affichage aléatoire aux objets sélectionnés selon un dégradé

import c4d, random

ID_GRADIENT = 1001
ID_BUTTON_DO = 1002

class MonDlg(c4d.gui.GeDialog):
    
    def CreateLayout(self):
        
        self.grad = self.AddCustomGui(ID_GRADIENT, c4d.CUSTOMGUI_GRADIENT, 'degrade', c4d.BFH_SCALEFIT, 50, 10)#, bc)
        self.AddButton(ID_BUTTON_DO,c4d.BFH_SCALEFIT,name = 'Appliquer la couleur')
        return True
    
    def InitValues(self):
        gradient = c4d.Gradient()
        gradient.InsertKnot(col = c4d.Vector(1,0,0), pos = 0)
        gradient.InsertKnot(col = c4d.Vector(1,1,0), pos = 0.5)       
        gradient.InsertKnot(col = c4d.Vector(0,1,0), pos = 1)
        self.grad.SetGradient(gradient)
        return True
    
    
    def Command(self, id, msg):
        if id == ID_BUTTON_DO:
            
            gradient = self.grad.GetGradient()
            irs = c4d.modules.render.InitRenderStruct()

            if gradient.InitRender(irs):
                doc.StartUndo()
                for o in doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_0):
                    doc.AddUndo(c4d.UNDOTYPE_CHANGE_SMALL,o)
                    o[c4d.ID_BASEOBJECT_USECOLOR] = c4d.ID_BASEOBJECT_USECOLOR_ALWAYS
                    o[c4d.ID_BASEOBJECT_COLOR] = gradient.CalcGradientPixel(random.random())
                gradient.FreeRender()
                
                doc.EndUndo()
                c4d.EventAdd()
            
        return True
    

if __name__=='__main__':
    dlg = MonDlg()
    dlg.Open(c4d.DLG_TYPE_ASYNC)

Leave a Reply