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
    Lennart

    The 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


Log in to reply