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

    Image in material preview

    Scheduled Pinned Locked Moved SDK Help
    9 Posts 0 Posters 879 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 21/01/2010 at 01:41, xxxxxxxx wrote:

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

      ---------
      Hello all,
      in my material plugin i need to substitute standard material preview with a simple bitmap, any way to do this ?
      Thanks in advance
      franz

      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 21/01/2010 at 02:13, xxxxxxxx wrote:

        Please check the MATPREVIEW_ messages in the documentation and the particlevolume.cpp and simplematerial.cpp SDK example files. These two plugin materials replace the the standard material with a custom preview scene.

        cheers,
        Matthias

        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 22/01/2010 at 06:19, xxxxxxxx wrote:

          Hello Matthias,
          thanks i found some interesting thisngs in the examples:
          i have some problem to add a bitmap in material here my complete message for preview generation :
          Bool TheaMaterial::Message(GeListNode* node, LONG type, void* data)
          {
               if (type == MSG_UPDATE)
                    updatecount++;

          switch (type)
               {
               case MSG_EDIT:
                    {
                         //my material stuff
                         break;
                    }

          case MATPREVIEW_GET_OBJECT_INFO:
                    // the preview needs our object information
                    {

          MatPreviewObjectInfo* info = (MatPreviewObjectInfo* )data;
                         info->bHandlePreview = TRUE; // own preview handling
                         info->bNeedsOwnScene = TRUE; // we need our own entry in the preview scene cache
                         info->bNoStandardScene = TRUE; // create our own preview scene
                         info->lFlags = MATPREVIEW_FLAG_HIDE_SCENE_SETTINGS; // hide the scene settings entry
                         return TRUE;
                    }
                    break;
               case MATPREVIEW_MODIFY_CACHE_SCENE:
                    {
                         MatPreviewModifyCacheScene* scene = (MatPreviewModifyCacheScene* )data;
                         BaseObject * back = BaseObject::Alloc(Obackground);
                         if (!back) return FALSE;
                         back->SetName("back");
                         BaseTag* mattag = back->MakeTag(Ttexture);
                         if (!mattag) return FALSE;
                         scene->pDoc->InsertObject(back, NULL, NULL);
                         return TRUE;
                    }
                    break;
               case MATPREVIEW_PREPARE_SCENE:
                    {
                         MatPreviewPrepareScene* preparescene = (MatPreviewPrepareScene* )data;

          BaseMaterial *matclone = BaseMaterial::Alloc(Mmaterial);

          AutoAlloc<AliasTrans> trans;
                         if (!trans)
                              return FALSE;
                         if (!trans->Init(GetActiveDocument()))
                              return FALSE;

          Filename mypreview;
                         mypreview.SetString("tempprev.jpg");
                         BaseBitmap * bitprev = BaseBitmap::Alloc();
                         LONG test = bitprev->Init(mypreview,-1,0);
                         if ( test != IMAGE_OK) GePrint ("error");

          PluginShader *shd = NULL;
                         shd = PluginShader::Alloc(Xbitmap);
                         if(!shd) return FALSE;

          BaseContainer *shddata = shd->GetDataInstance();
                         BaseContainer * matdata = matclone->GetDataInstance();

          matdata->SetLink(MATERIAL_COLOR_SHADER, shd);
                         matclone->InsertShader(shd, NULL);

          shddata->SetFilename(BITMAPSHADER_FILENAME, "mypreview");
                         shd->Message(MSG_UPDATE);
                         matclone->Message(MSG_UPDATE);
                         matclone->Update(TRUE, FALSE);
                         EventAdd();

          BaseMaterial* matclone2 = (BaseMaterial* )(matclone->GetClone(0, trans));

          preparescene->pDoc->InsertMaterial(matclone2);

          if (preparescene->pLink) preparescene->pLink->SetLink(matclone2); // necessary

          BaseObject* back = preparescene->pDoc->SearchObject("back");
                         if (back)
                         {
                              TextureTag* textag = (TextureTag* )back->GetTag(Ttexture);
                              if (textag)
                                   textag->SetMaterial(matclone2);
                         }

          preparescene->bScenePrepared = TRUE;
                         return TRUE;
                    }
                    break;
               case MATPREVIEW_GET_POPUP_OPTIONS:
                    {
                         return TRUE;
                    }
                    break;
               case MATPREVIEW_HANDLE_POPUP_MSG:
                    {
                         return TRUE;
                    }
                    break;
               case MATPREVIEW_GENERATE_IMAGE:
                    {
                         MatPreviewGenerateImage* image = (MatPreviewGenerateImage* )data;
                         if (!image->bEditorPreview)
                         {
                              if (image->pDoc)
                              {
                                   LONG w = image->pDest->GetBw();
                                   LONG h = image->pDest->GetBh();
                                   BaseContainer bcRender = image->pDoc->GetActiveRenderData()->GetData();
                                   bcRender.SetReal(RDATA_XRES, w);
                                   bcRender.SetReal(RDATA_YRES, h);
                                   bcRender.SetLong(RDATA_ANTIALIASING, ANTI_GEOMETRY);

          image->pDest->Clear(0, 0, 0);
                                   image->lResult = RenderDocument(image->pDoc, bcRender, NULL, NULL, image->pDest, RENDERFLAG_EXTERNAL | RENDERFLAG_PREVIEWRENDER, image->pThread);
                              }
                         }
                         return TRUE;
                    }
                    break;

          }
               return MaterialData::Message(node, type, data);
          }

          i tried colors and various parameter of material work fine...
          textuore shader don't work
          any sugestion ?
          Franz

          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 26/01/2010 at 07:01, xxxxxxxx wrote:

            no news ? 🙂
            Franz

            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 27/01/2010 at 06:24, xxxxxxxx wrote:

              Still working on it. I post again if I've found a solution.

              cheers,
              Matthias

              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 04/02/2010 at 05:30, xxxxxxxx wrote:

                one more question, is this a static background image or does it have to be updated by the material?

                cheers,
                Matthias

                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 04/02/2010 at 05:43, xxxxxxxx wrote:

                  i am working on an external renderer exporter, after material editing (in a external application material editor) i can save the image in a file then i'dd like to load it in cinema material preview.
                  franz

                  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 04/02/2010 at 12:35, xxxxxxxx wrote:

                    For just displaying an image it's probably easier to directly modify the displayed bitmap. You can do this in MATPREVIEW_GENERATE_IMAGE. Instead of rendering the preview document simply fill the preview bitmap. This will react to changes made in the AM too. Here is some example code:

                      
                    Bool ParticleVolume::Message(GeListNode *node, LONG type, void *data)  
                    {  
                      switch (type)  
                      {  
                          case MATPREVIEW_GET_OBJECT_INFO:  
                          {  
                              MatPreviewObjectInfo* info = (MatPreviewObjectInfo* )data;  
                              info->bHandlePreview = TRUE; // own preview handling  
                              info->bNeedsOwnScene = TRUE; // we need our own entry in the preview scene cache  
                              info->bNoStandardScene = TRUE; // create our own preview scene  
                              info->lFlags = MATPREVIEW_FLAG_HIDE_SCENE_SETTINGS; // hide the scene settings entry  
                                
                              return TRUE;  
                          }  
                          break;  
                      
                          case MATPREVIEW_MODIFY_CACHE_SCENE:  
                          {  
                              return TRUE;  
                          }  
                          break;  
                      
                          case MATPREVIEW_PREPARE_SCENE:  
                          {  
                              MatPreviewPrepareScene* preparescene = (MatPreviewPrepareScene* )data;  
                      
                              AutoAlloc<AliasTrans> trans;  
                              if (!trans) return FALSE;  
                              if (!trans->Init(GetActiveDocument())) return FALSE;  
                                
                              BaseMaterial* matclone = (BaseMaterial* )(Get()->GetClone(0, trans));  
                              preparescene->pDoc->InsertMaterial(matclone);  
                              trans->Translate(TRUE);  
                                
                              if (preparescene->pLink) preparescene->pLink->SetLink(matclone);  
                      
                              preparescene->bScenePrepared = TRUE;  
                      
                              return TRUE;  
                          }  
                          break;  
                      
                          case MATPREVIEW_GENERATE_IMAGE:  
                          {  
                              MatPreviewGenerateImage* image = (MatPreviewGenerateImage* )data;  
                                
                              if (image->pDoc)  
                              {  
                                  if (!image->bEditorPreview)  
                                  {  
                                      AutoAlloc<BaseBitmap> bmp;  
                                      if (!bmp || bmp->Init(Filename("C:\\test.jpg")) != IMAGE_OK) return FALSE;  
                      
                                      bmp->ScaleIt(image->pDest, 256, TRUE, TRUE);  
                      
                                      image->lResult = RAY_OK;  
                                  }  
                              }  
                      
                              return TRUE;  
                          }  
                          break;  
                      }  
                      
                      return MaterialData::Message(node, type, data);  
                    }  
                    

                    hope this helps

                    cheers,
                    Matthias

                    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 04/02/2010 at 13:40, xxxxxxxx wrote:

                      Thanks Matthias,
                      i'll try this!
                      As usual your help is invaluable.
                      🙂
                      Franz

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