Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    time change check?

    Scheduled Pinned Locked Moved SDK Help
    11 Posts 0 Posters 860 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 14/11/2012 at 21:07, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   13 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      I'm still new and asking a very simple question ...

      I want to check the time change (via play...drag...any change in the document time) ...
      what i tried and gives me crashes :

      BaseTime time = doc->GetTime();
      GvCalcTime* H;
      BaseTime G = H->previous;
      if (time.TimeDif(G) != 0)
      {
      GePrint("A");
      }

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 15/11/2012 at 05:00, xxxxxxxx wrote:

        You never allocated GvCalcTime* H. The memory location it points to is invalid.

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 15/11/2012 at 06:40, xxxxxxxx wrote:

          so what should i do? didn't find any call to store previous time

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 15/11/2012 at 09:52, xxxxxxxx wrote:

            I don't know what the GvCalcTime class is for, but it is definitely not what you want. As the SDK states, the class cannot be instantiated. What about just storing the previous time somewhere?

            BaseTime current_time = doc->GetTime();  
            if (current_time == this->previous_time) {  
                GePrint("A");  
                this->previous_time = current_time;  
            }
            

            This code-snippet implies that you have given your plugin-class an attribute BaseTime previous_time. Also, using BaseTime:: operator ==() operator is equal to checking if BaseTime::TimeDif() returns zero.

            Best,
            Niklas

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 15/11/2012 at 13:13, xxxxxxxx wrote:

              well i did that ...but the problem is it acts one time when i execute the plugin ...i need it to check always (not once)

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 15/11/2012 at 23:42, xxxxxxxx wrote:

                What kind of plugin is it?
                CommandData, ObjectData, TagData, SceneHookData, oder something else?

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 16/11/2012 at 01:29, xxxxxxxx wrote:

                  Originally posted by xxxxxxxx

                  well i did that ...but the problem is it acts one time when i execute the plugin ...i need it to check always (not once)

                  'Always' is too vague. Do you mean once per frame, every x milliseconds or what? As Jack implied in his post, it makes a real difference, depending on the plugin type. If it's a CommandData, you could use the SetTimer() and Timer() functions in GeDialog. If it's not, it'll depend on the type of plugin (e.g for an ObjectData plugin, you could check the time in Execute(), for example).

                  1 Reply Last reply Reply Quote 0
                  • H Offline
                    Helper
                    last edited by

                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                    On 16/11/2012 at 02:45, xxxxxxxx wrote:

                    well the plugin (task) is to do a physics simulation (my custom physics calculations)

                    i want to do one step of calculations if only (frame change) so for example it doesn't change object state while time is paused(only when user drags the slider or change time it will calculate 1 step of simulation)

                    1 Reply Last reply Reply Quote 0
                    • H Offline
                      Helper
                      last edited by

                      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                      On 16/11/2012 at 06:25, xxxxxxxx wrote:

                      Right, so it's code that needs to be called on a frame change. Let's say you have an ObjectData plugin, you could test the frame number in the Execute() function, which will always be called at least once per frame. The easiet way to do this is to have a class-level variable which holds the number of the most recent frame before a frame change occurred. The code might look something like this:

                        
                      EXECUTIONRESULT MyPlugin::Execute(BaseObject *op, BaseDocument *doc, BaseThread *bt, LONG priority, EXECUTIONFLAGS flags)   
                      {   
                           LONG frame, startFrame, fps;   
                        
                           fps = doc->GetFps();   
                           startFrame = doc->GetMinTime().GetFrame(fps);          // find start frame   
                           frame = doc->GetTime().GetFrame(fps);               // get current frame   
                        
                           if(frame == startFrame)   
                           {   
                                oldFrame = startFrame;                    // <----- oldFrame is a class-level LONG   
                                // now do whatever else might be needed in the first frame of the animation   
                                // do stuff here...   
                           }   
                        
                           // if the user has changed the frame in some way   
                           if(frame != oldFrame)   
                           {   
                                // update whatever is needed following the frame change   
                                // do stuff here...   
                                // note that this won't be done in the first frame because there, frame == oldFrame   
                                   
                                // now reset oldFrame so these actions aren't done again in this frame   
                                oldFrame = frame;   
                           }   
                        
                           return EXECUTIONRESULT_OK;   
                      }   
                      

                      The code is therefore only carried out when the frame changes. At the start frame of the animation, you might need to do other stuff, like initialising data structures or something, so that frame is treated separately.

                      1 Reply Last reply Reply Quote 0
                      • H Offline
                        Helper
                        last edited by

                        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                        On 16/11/2012 at 09:18, xxxxxxxx wrote:

                        wow,  thanks a lot for this help spedler 🙂 , what i was missing that execute() which checks each frame 😄

                        1 Reply Last reply Reply Quote 0
                        • H Offline
                          Helper
                          last edited by

                          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                          On 16/11/2012 at 15:30, xxxxxxxx wrote:

                          tested it now 😄 ..worked like a charm 🙂
                          thank you again for the help

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post