Delete marker with python
-
Hello,
I have a Python Generator with an integer UserData. My code functions by adding markers based on the integer from my user data. Adding markers is working as expected. However deleting markers does not. I can't find anything in the API that deletes markers from the timeline. How would I do this? The only other option would be to delete all markers with command data. My code:
def GetMarkers(doc=c4d.documents.GetActiveDocument(), sort=True): markers = [] thisMarker = c4d.documents.GetFirstMarker(doc) while thisMarker is not None: markers.append(thisMarker) thisMarker = thisMarker.GetNext() return markers def main(): #Get a list of markers markers = GetMarkers(doc) print len(markers) #check if my user data integer is greater/less than the number of markers if len(markers) < op[c4d.ID_USERDATA,1]: c4d.documents.AddMarker(doc, None, c4d.BaseTime(len(markers)), 'name') print 'add Marker' elif len(markers) > op[c4d.ID_USERDATA,1]: #Removing or del from Markers list doesnt work... print 'delete Marker' #Here I loop through the list and set the name,time, length, color etc. if needed for i in range(0, len(markers)): markers[i].SetName('fred') c4d.EventAdd()
-
Hi @gsmetzer please read and apply for your next topics:
Regarding your issue.
a Marker is a BaseList2D, which is also a GeListNode. So you can call GeListNode.RemoveHowever, note that you are in a generator and a generator is not supposed to change the scene structure (aka add a new object to it (and a marker is a new object). For more information see Threading Information. The correct way to do it would be to create a CommandData plugin.
Cheers,
Maxime. -
Thank you @m_adam
markers[0].Remove()
worked in the Python Generator without crashing. I hope it isn't stupid to try this. I do plan on converting it to a plugin. Thanks, you can solve this question.