Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Copying a material channel

    SDK Help
    0
    2
    212
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

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

      On 10/09/2007 at 02:48, xxxxxxxx wrote:

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

      ---------
      Hi there again and sry for starting another thread so soon.

      My last thread's title ("Problems baking textures") doesn't fit my problem too good and I want to rephrase my question, as it has become a rather simple issue:
      I need to copy a material's channel to another channel of another material.

      My current method (just getting the source BaseChannel and copy its data to the destination BaseChannel of the destination material) only results in the top-most level of information being copied (i.e. the color, blend mode, blend factor and the used shader, but _not_ the settings for the shader). I need a copy of the whole hierarchy (for example the settings for a Noise shader should be copied, too, or a whole hierarchy of Fusion shaders and so on).

      What I want to do is the "Copy channel" / "Paste channel" functions that C4D got, but programmatically.
      Can anyone shed some light on this?

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

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

        On 11/09/2007 at 09:58, xxxxxxxx wrote:

        just wanted to post I finally solved my problem.
        First I copy the source channel's data to the destination channel, then I get the matching shader from the source material and copy that to the destination material's respective shader parameter:

          
        //sourceMat is a Material*, sourceChannel is a LONG  
        //same for destMat and destChannel  
        destMat->GetChannel(destChannel)->SetData(sourceMat->GetChannel(sourceChannel)->GetData());  
        GeData shaderData;  
        Bool result;  
        switch(sourceChannel)  
        {  
        case CHANNEL_COLOR: result = sourceMat->GetParameter(DescID(MATERIAL_COLOR_SHADER), shaderData, 0); break;  
        //same for all other channels where possible  
        }  
        if(!result) return;  
        switch(destChannel)  
        {  
        case CHANNEL_COLOR: result = destMat->SetParameter(DescID(MATERIAL_COLOR_SHADER), shaderData, 0); break;  
        //same for all other channels where possible  
        }  
        

        So far that worked quite well for me, but if you want to use the destination material afterwards you probably should do something more, the material preview seems to be screwed with my method. Since I don't need the material for other things than baking the copied channel and destroy it afterwards anyway, I'm fine with that.

        Thanks to everybody who read and thought about my problem. Just thought it would be nice to post my solution for others with the same problem.

        1 Reply Last reply Reply Quote 0
        • First post
          Last post