Gradient Shader



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 02/09/2012 at 13:36, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   13 
    Platform:   Windows  ;   Mac OSX  ; 
    Language(s) :     C++  ;

    ---------
    Hi,

    can anybody please help me to retrieve the data of a gradien shader? The code below always provides NULL. Am I using the wrong Resource ID? I tried it with the ones from xs**gradient.h, they match the shader panel in the attribute manager.

      
    BaseShader *sh = chn->GetShader();   
    if (sh->GetType() == Xgradient)   
    {                  
        if (sh->GetParameter(DescLevel(1000), d, DESCFLAGS_GET_0)) // Xs**gradient   
        {   
            Gradient *gr = (Gradient* )d.GetCustomDataType(CUSTOMDATATYPE_GRADIENT);   
            if (gr)   
            {   
                 // ... gr is NULL   
            }   
        }   
    }   
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 02/09/2012 at 17:01, xxxxxxxx wrote:

    I'm using Python but maybe you need to use something like InitRenderStructure()
    and InitRender(gr) ?
    Then possibly get the pixel at UVW x,y.
    Haven't done it with a gradient shader but rather a Color Gradient Userdata.

    Cheers
    Lennart



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 00:53, xxxxxxxx wrote:

    Hello Klaus,

    BaseContainer::GetCustomDataType() accepts two arguments. The first one is the ID of the description element, the second the ID of the data-type.

    Gradient* gr = (Gradient* ) d.GetCustomDataType(MY_GRADIENT_ID, CUSTOMDATATYPE_GRADIENT);
    

    If the gradient is part of your own description for your plugin, you need to initialize it in NodeData::Init().

    -Niklas



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 01:08, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    Hello Klaus, BaseContainer::GetCustomDataType() accepts two arguments. The first one is the ID of the description element, the second the ID of the data-type.

    Gradient* gr = (Gradient* ) d.GetCustomDataType(MY_GRADIENT_ID, CUSTOMDATATYPE_GRADIENT);
    

    I think the 'd' in this case is a GeData, not a BaseContainer, and so there's only one argument. I would check the value in the DescID() call, is 1000 really correct?

    Steve



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 02:01, xxxxxxxx wrote:

    Hi Steve,

    yes, d is GeData d. I'm going this way successfully to get the gradient type :

      
    GeData     d;   
    LONG     type = 0;   
      
    if (sh->GetParameter(DescLevel(1001), d, DESCFLAGS_GET_0)) // SLA_GRADIENT_TYPE 1001   
    {        
         type = (LONG)d.GetLong(); // => e.g. 2000 for SLA_GRADIENT_TYPE_2D_U   
    }   
      
    

    So I assume the way to get the data is pricipally right.

    @Niklas: no it's not my plugin using the gradient. I want to get it from a material.

    Here are the IDs of Xs**gradient.h

      
    Xs**gradient                          = 1000,   
      
    SLA_GRADIENT_TYPE                     = 1001,   // LONG   
        SLA_GRADIENT_TYPE_2D_U              = 2000,   
        SLA_GRADIENT_TYPE_2D_V,   
        SLA_GRADIENT_TYPE_2D_DIAG,   
        SLA_GRADIENT_TYPE_2D_RAD,   
        SLA_GRADIENT_TYPE_2D_CIRC,   
        SLA_GRADIENT_TYPE_2D_BOX,   
        SLA_GRADIENT_TYPE_2D_STAR,   
        SLA_GRADIENT_TYPE_2D_FOUR_CORNER,   
        SLA_GRADIENT_TYPE_3D_LINEAR,   
        SLA_GRADIENT_TYPE_3D_CYLINDRICAL,   
        SLA_GRADIENT_TYPE_3D_SPHERICAL,   
      
    SLA_GRADIENT_CYCLE                    = 1002,   // Bool   
    SLA_GRADIENT_START                    = 1003,   // Vector   
    SLA_GRADIENT_END                      = 1004,   // Vector   
    SLA_GRADIENT_RADIUS                   = 1005,   // Real   
    SLA_GRADIENT_SPACE                    = 1006,   // LONG   
        SLA_GRADIENT_SPACE_TEXTURE          = 2020,   
        SLA_GRADIENT_SPACE_OBJECT,   
        SLA_GRADIENT_SPACE_WORLD,   
        SLA_GRADIENT_SPACE_CAMERA,   
        SLA_GRADIENT_SPACE_SCREEN,   
        SLA_GRADIENT_SPACE_RASTER,   
      
    SLA_GRADIENT_TURBULENCE               = 1011, // real   
    ...   
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 02:23, xxxxxxxx wrote:

    I tried the code from Niklas using a base container. That's also the way the gradient sdk eample uses. Type is correct, but the gradient pointer is NULL!

      
    BaseContainer *bc = sh->GetDataInstance();   
    Gradient *gr = (Gradient* )bc->GetCustomDataType(1000, CUSTOMDATATYPE_GRADIENT); // => NULL   
    LONG type = bc->GetLong(1001); => correct values   
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 07:09, xxxxxxxx wrote:

    Right, 1001 does indeed work as the gradient type. However, the actual colour gradient is not 1000 but 1007 (defined as SLA_GRADIENT_GRADIENT) - try that and see if it works.

    Steve



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 08:09, xxxxxxxx wrote:

    Yep! That's it. Don't understand, how I could miss it in the h file.

      
    SLA_GRADIENT_GRADIENT                 = 1007,   // Gradient   
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 12:24, xxxxxxxx wrote:

    Easily done, I've achieved that error many times :-)

    Steve



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/09/2012 at 13:12, xxxxxxxx wrote:

    Hi Klaus,

    why are you not using the actual symbols in the code?

    -Nik



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 04/09/2012 at 02:27, xxxxxxxx wrote:

    you mean the resource IDs? I do so normally, but xs**gradient.h couldn't be found by the compiler. So I would have to setup a path, but I wasn't sure until now, that it is the right file.


Log in to reply