Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
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++?
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
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; }
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