String Cache Oddity Command Plugin
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 06/01/2011 at 09:38, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R12.032
Platform: Mac OSX ;
Language(s) : C.O.F.F.E.E ;---------
Hi.
Had this strange thing happening.
I've used the string counting code for a while without issues but just
recently the following has happened.
I'm not sure if it's the R12.032 I've had since it came or the OSX
update I just did ( to latest OSX 10.6.5)I set a string with a fixed amount of characters ("00000").
Then for each frame I up the string ("00001", "00002" etc.).I use the code as Coffee Command Menu (cof/cob) and also
in regular scripts (CSC) and it behaves different !I thought that a Command, once run, was detached from the document,
no cacheing of the code in it etc. but…. as a script (CSC) it works fine
but as a cof/cob it only works correct the first time (after start of Cinema
or reloading the cof in console.)
Any subsequent runs, the string is not at it's default, "00000".
Instead, depending on how many frames that have been run before,
it could look like "00100".
To solve it for now, I added a reset of the string last in the while loop.
Just thought if I'm dreaming here….Cheers
LennartThe code that could be used both as CSC and cof:
doc->SetTime(doc->GetLoopMinTime()); // Set doc to PreView start time while(doc->GetTime()->GetSecond() <= doc->GetLoopMaxTime()->GetSecond()) // while within preview range { var digits = "00000"; // how many digits, default string var cframe = tostring(int(doc->GetTime()->GetFrame(doc->GetFps()))); // Current frame digits = strins(digits,cframe,sizeof(digits)-sizeof(cframe)); // Build the resulting string println(digits); // Check the resulting string CallCommand(12414); // Go To next frame DrawViews(DRAWFLAGS_NO_THREAD); // Viewport update digits = strins(digits,"00000",0); //// !overwrite the cached(?) string. Needed for cof/cob command plugin. Strange? } doc->SetTime(doc->GetLoopMinTime()); // Set doc back to PreView start time
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 14/01/2011 at 02:43, xxxxxxxx wrote:
Sorry I can't confirm.
This simple test plugin seems to work fine:
//////////////////// // MyMenuPlugin class MyMenuPlugin : MenuPlugin { public: MyMenuPlugin(); GetID(); GetName(); GetHelp(); Execute(doc); } MyMenuPlugin::MyMenuPlugin() { // Call the parent constructor super(); } MyMenuPlugin::GetID() { // TODO: Return a unique plugin id from http://www.plugincafe.com return 1020660; } MyMenuPlugin::GetName() { // TODO: Return the text of the menu entry return "test"; } MyMenuPlugin::GetHelp() { // TODO: Return a help text that's displayed when the menu item is selected return "test"; } MyMenuPlugin::Execute(doc) { // Called when the menu item is chosen // TODO: Do whatever you want doc->SetTime(doc->GetLoopMinTime()); // Set doc to PreView start time while(doc->GetTime()->GetSecond() <= doc->GetLoopMaxTime()->GetSecond()) // while within preview range { var digits = "00000"; // how many digits, default string var cframe = tostring(int(doc->GetTime()->GetFrame(doc->GetFps()))); // Current frame digits = strins(digits,cframe,sizeof(digits)-sizeof(cframe)); // Build the resulting string println(digits); // Check the resulting string CallCommand(12414); // Go To next frame DrawViews(DRAWFLAGS_NO_THREAD); // Viewport update } doc->SetTime(doc->GetLoopMinTime()); // Set doc back to PreView start time } main() { Register(MyMenuPlugin); }
cheers,
Matthias