Image in material preview
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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