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).
On 28/06/2013 at 15:24, xxxxxxxx wrote:
User Information: Cinema 4D Version: R13-R14 Platform: Language(s) :
--------- Hi, if you add a C-Motion to your project, you will find two buttons under the Basic tab: Load preset.. and Save preset.. I would like to implement these in my custom tag, if possible at all. Having searched high and low, googled and bing-ed and read the docs and searched this and other forums, it seems that reading from file and saving to file is not much discussed.
I CAN use an ordinary filesave dialog or the like. But I am much more interested in a function similar to the one mentioned in the C-Motion. And code examples would be very much welcome!
On 28/06/2013 at 17:07, xxxxxxxx wrote:
You can load/save descriptions and other settings using the World Plugin Container. Check SetWorldPluginData() and GetWorldPluginData() in the API docs. For specific presets, just put the settings in a container with a name and maybe an element noting that it is a preset and save that container (BaseContainer) as above.
Bool MyPlugin::Init(GeListNode* node) { BaseContainer* bc = static_cast<BaseTag*>(node)->GetDataInstance(); // Get stored settings BaseContainer* pbc = GetWorldPluginData(ID_MYPLUGIN); if (!pbc) return TRUE; bc->SetLong(MYPLUGIN_MODE, pbc->GetLong(MYPLUGIN_MODE, MYPLUGIN_MODE_CIRCLE)); bc->SetVector(MYPLUGIN_COLOR, pbc->GetVector(MYPLUGIN_COLOR, Vector(1.0,1.0,0.0))); bc->SetLong(MYPLUGIN_RADIUS, pbc->GetLong(MYPLUGIN_RADIUS, 20L)); bc->SetLong(MYPLUGIN_RECT_W, pbc->GetLong(MYPLUGIN_RECT_W, 20L)); bc->SetLong(MYPLUGIN_RECT_H, pbc->GetLong(MYPLUGIN_RECT_H, 20L)); return TRUE; } void MyPlugin::Free(GeListNode* node) { BaseContainer* bc = static_cast<BaseTag*>(node)->GetDataInstance(); // Store settings BaseContainer pbc; pbc.SetLong(MYPLUGIN_MODE, bc->GetLong(MYPLUGIN_MODE)); pbc.SetVector(MYPLUGIN_COLOR, bc->GetVector(MYPLUGIN_COLOR)); pbc.SetLong(MYPLUGIN_RADIUS, bc->GetLong(MYPLUGIN_RADIUS)); pbc.SetLong(MYPLUGIN_RECT_W, bc->GetLong(MYPLUGIN_RECT_W)); pbc.SetLong(MYPLUGIN_RECT_H, bc->GetLong(MYPLUGIN_RECT_H)); SetWorldPluginData(ID_MYPLUGIN, pbc); }
On 28/06/2013 at 23:46, xxxxxxxx wrote:
Thanks a lot for this, absolutely essential for me when writing plugins. Although, it is not actually what I am asking for, though.
What I want, is for the user to being able to load and store the current settings as a preset using the dialog that C-Motion uses:
I do not know at all how to invoke and use such a dialog. If at all possible. And by the way, the data I want to store is complicated, it is not as easy as a couple of description values.
On 29/06/2013 at 00:08, xxxxxxxx wrote:
It is just a custom GeDialog. There is nothing like a preset dialog in c4d, you will have to build your own. In c4d_file you can find FileSelect() which will open the OS specific file selection dialog.
On 29/06/2013 at 00:23, xxxxxxxx wrote:
Aha! I understand. So I'll have to make a GeDialog then, and use it form inside my tag plugin?!?
On 29/06/2013 at 00:29, xxxxxxxx wrote:
You can have a button to save a named preset. Again, you want to open a GeDialog with a text entry element (and Ok/Cancel).
You can have a button to load a saved preset. You can get the world plugin data, get the BaseContainers that each represent the presets. Open a GeDialog and use that list to fill a listview or a combo or whatever for the user to select a preset.