Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python 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
    • Recent
    • Tags
    • Users
    • Login

    Changing Material's Icon?

    Scheduled Pinned Locked Moved SDK Help
    4 Posts 0 Posters 379 Views
    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 Offline
      Helper
      last edited by

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

      On 01/06/2011 at 10:14, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   12 
      Platform:   Windows  ;   
      Language(s) :   C.O.F.F.E.E  ;    PYTHON  ;

      ---------
      Hi,
      I've tried everything I can think of. But I can't figure out how to change the icon previews on materials.

      I started with the basics:

      var mat = doc->GetActiveMaterial();  
      mat#MatPreviewFlat2D = true; //<---invalid ID
      

      Then I tried getting at them from the material's container:

      var mat = doc->GetActiveMaterial();  
      var bc = mat->GetContainer();  
      var preview = bc->SetData(MatPreviewFlat2D, true);//<--- member not found  
      bc->SetContainer(preview);
      

      Then I thought maybe that they weren't held by the material.
      But held by another object(ID_MATERIAL_PREVIEW) inside of the material:

      //No errors...But it doesn't do anything  
      var mat = doc->GetActiveMaterial();  
      var preview = mat#ID_MATERIAL_PREVIEW;  
      preview = MatPreviewFlat2D;  
      CallCommand(12252); // Render Materials updates the ICON
      

      Nope.
      Can anyone tell me what I'm doing wrong?
      If it's not possible in Coffee. Then a Python or C++ solution is ok.

      Thanks,
      -ScottA

      *Edit:
      After more looking. I found a preview class in the C++ SDK.
      It has a SetPreviewType(MatPreviewType t) method in it.
      But I could not find these in the Python and Coffee SDK's. So does that mean that this is only supported in C++?

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

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

        On 02/06/2011 at 17:16, xxxxxxxx wrote:

        Am I even close with this?
        Or am I way off?

        Bool SimplePlugin::Execute(BaseDocument *doc)  
        {   
          BaseMaterial *mat = doc->GetActiveMaterial();  
          Bool Init(BaseMaterial* mat, LONG lCount);  
          MaterialPreviewData *MPD = What the heck goes here?  
          MPD->SetPreviewType(MatPreviewFlat2D);      
          
          return TRUE;   
        }
        

        -ScottA

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

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

          On 06/06/2011 at 06:28, xxxxxxxx wrote:

          It's possible through C++, probably Python too. The material preview is a custom data type which are not supported by COFFEE.

          Example:

            
          #include "customgui_matpreview.h"  
            
          ...  
            
          Bool MenuTest::Execute(BaseDocument *doc)  
          {  
            BaseMaterial *mat = doc->GetActiveMaterial();  
            if (!mat) return FALSE;  
            
            GeData d;  
            
            if (mat->GetParameter(DescLevel(MATERIAL_PREVIEW), d, DESCFLAGS_GET_0))  
            {  
                MaterialPreviewData *mp = (MaterialPreviewData* )d.GetCustomDataType(CUSTOMDATATYPE_MATPREVIEW);  
            
                // set the preview type, see the C++ docs  
                if (mp) mp->SetPreviewType(MatPreviewTorus);  
            
                mat->SetParameter(DescLevel(MATERIAL_PREVIEW), d, DESCFLAGS_SET_0);  
            }  
            
            mat->Message(MSG_UPDATE);  
            mat->Update(TRUE, FALSE);  
            
            EventAdd();  
              
            return TRUE;  
          }  
          
          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

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

            On 06/06/2011 at 07:54, xxxxxxxx wrote:

            Thanks.
            I was trying out every combination of GeData and SetParameter() I could think of over the weekend. But I just couldn't find the magic combination to make it work.

            The SDK also confused me a lot. Because under "customgui_matpreview.h" it says that it must be created with Alloc. And then there's three different types of Init() functions.
            I know now that those functions are for different things than setting the built-in preview types. But the whole experience was extremely confusing to me.

            I hope the C++ SDK gets some sort of attention in the future. And a more clear way of explaining things to newer users is found. This C++ stuff is actually pretty easy to do when it's explained.
            If I can be of any help in that area. Please let me know. I'm willing to volunteer some time to that.

            Thanks again for the help,
            -ScottA

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