Setting Gradient Interpolation for Sketch and Toon

  • On 02/05/2014 at 22:35, xxxxxxxx wrote:

    I am building a plugin that renders using Sketch and Toon, I am writing a bit that checks is S&T is enabled, if not turns it on and sets the settings to what I need them to be.

    My problem is I want to set the Gradient Interpolation on the Shading tab to 'Smooth Knot'

    I have absolutely no idea how to get/set this value..

    I don't suppose anyone here knows do they?

  • On 03/05/2014 at 01:24, xxxxxxxx wrote:

    Hi Anadin,

    it´s written in the SDK like:

    Gradient.SetData( id , data )
    Sets a data item from the gradient container.
    To be more specific, with:

    You can get the interpolation id

    I´m not sure if this helps?


  • On 04/05/2014 at 00:49, xxxxxxxx wrote:

    Ooh that looks interesting, didn't think to search for a generic gradient - I think you are on to something but I can't figure out how to use it..

    import c4d
    from c4d import gui
    #Welcome to the world of Python

    XRes = 1024
    YRes = 768
    OutputPath = '/Users/user/Desktop/test.png'

    def main() :    
        print "Setting RenderData"
        #Get the current documents render settings
        RenderData = doc.GetActiveRenderData()
        print "RenderData : " + str(RenderData)
        #Store a copy of those settings
        RenderDataBackup = RenderData.GetClone()
        #Access the basedraw of the render view (filters etc.)
        BaseDraw = doc.GetActiveBaseDraw()
        #Basic Settings
        RenderData[c4d.RDATA_AUTOLIGHT] = False
        RenderData[c4d.RDATA_SAVEIMAGE] = True
        RenderData[c4d.RDATA_ALPHACHANNEL] = True
        RenderData[c4d.RDATA_STRAIGHTALPHA] = True
        RenderData[c4d.RDATA_XRES] = float(XRes)
        RenderData[c4d.RDATA_YRES] = float(YRes)
        RenderData[c4d.RDATA_FORMAT] = 1023671
        RenderData[c4d.RDATA_MULTIPASS_SAVEIMAGE] = False
        #Actual Output
        RenderData[c4d.RDATA_PATH] = OutputPath

    #Add Sketch And Toon if it's not there and required and set up the defaults

    if c4d.modules.CheckSketch() : #if Sketch and Toon is installed && it is wanted. set it up and use it (Do the check)
            rd = doc.GetActiveRenderData() # Get the current renderdata
            vp = rd.GetFirstVideoPost() # Get the first Video Post in the Renderdata object
            if vp == None:
                SketchEffect = c4d.BaseList2D(1011015) # set a baseList2D with the ID of Sketch and Toon
                rd.InsertVideoPost(SketchEffect) #insert the S&T video post
                vp = rd.GetFirstVideoPost()

    BrowseRD(vp, True) #Run the Function

    if vp.GetName() == "Sketch and Toon": #if S&T was found, the rdata name var should be "Sketch and Toon"...
                SketchEffect = vp #Set the "SketchEffect" variable to the current S&T

    else: #if not, set the "SketchEffect" to a NEW S&T videopost
                SketchEffect = c4d.BaseList2D(1011015) # set a baseList2D with the ID of Sketch and Toon
                rd.InsertVideoPost(SketchEffect) #insert the S&T video post

    SketchEffect[c4d.OUTLINEMAT_SHADING_BACK] = 0
            SketchEffect[c4d.OUTLINEMAT_SHADING_OBJECT_MODEL] = 1

    #Remove Sketch Tags and Replace?
        #Make Sketch Mat?
    def BrowseRD(rd, children) : #function that scrolls through the video post effects to find S&T
        if not rd: return
        if rd.GetName() == "Sketch and Toon":
            print("S&T Vido Post is Present...")
        BrowseRD(rd.GetNext(), children)
        if children:
          BrowseRD(rd.GetDown(), children)

    if __name__=='__main__':

  • On 04/05/2014 at 08:45, xxxxxxxx wrote:

    get it,set it and write it back to your effect

    print gradient.GetData(c4d.GRADIENT_INTERPOLATION),"ID"  
    print gradient.GetData(c4d.GRADIENT_INTERPOLATION),"ID2"  

    cheers martin

  • On 08/05/2014 at 05:08, xxxxxxxx wrote:

    aha! thanks so much Martin

Log in to reply