Update timeline markers on user data slider input.



  • I have a python generator with two integers as user data. The two integer sliders control the start and length of a timeline marker. Currently the timeline markers only update to the new integer value on mouse-up. However I would like the timeline markers to update on each value change as the user slides the integer.
    How is this possible? I have been trying different messaging and event add techniques but not finding a solution. Thank You for any help.



  • Hi,

    you should show us some code, it is really hard to tell what you are doing otherwise.

    1. Note that the Python Generator's main() function is bound by threading limitations.

    2. The appropriate choice to force a redraw of managers is usually c4d.GeSyncMessage().

    Cheers
    zipit



  • hello,

    On your generator you can create the Message function and react accordingly.
    To check if the marker already exist, the most direct and easiest way is to use its name.

    you can find other ids you can use on this page

    This is a basic example, you may want to add some extra functionalities.

    import c4d
    
    
    
    def FindMarker(timeOfMarker, name):
        # Retrieves the first marker of document
        fm = c4d.documents.GetFirstMarker(doc)
        
        # for each markers checks compare its name
        while fm:
            if fm.GetName() == name:
                return fm
            fm = fm.GetNext()
        return None
    
    
    def RemoveAndCreate(timeOfMarker, name):
        # Checks if marker alread exist (compare name)
        mark = FindMarker(timeOfMarker, name)
    
        # Removes the maker if it exist
        if mark is not None:
            mark.Remove()
        
        # Returns the exising marker
        return c4d.documents.AddMarker(doc, None, timeOfMarker, name)
        
    
    def message(id, data):
        # if User Data are changed
        if id == c4d.MSG_DESCRIPTION_VALIDATE:
            # Retrieves the User Data values
            fmt = op[c4d.ID_USERDATA,1]
            smt = op[c4d.ID_USERDATA,2]
             
            # Creates the Marker, Removes the existing ones first)
            RemoveAndCreate(fmt, "First Maker")
            RemoveAndCreate(smt, "Second Marker")
            c4d.EventAdd()
        return True
    
    
    
    def main():
        pass
        
    

    Cheers
    Manuel



  • Thank You @m_magalhaes and @zipit

    Both your suggestions were very helpful. The controller works very well @m_magalhaes I just needed to convert my user data input to BaseTime and it works perfectly.

    I was able to solve the updating issue to work how I want. I only needed to add:

    c4d.GeSyncMessage(c4d.EVMSG_TIMECHANGED)

    Now my timeline markers update nicely as I change values.

    This topic can be marked solved.


Log in to reply