THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 13/07/2012 at 10:55, xxxxxxxx wrote:
So I was toying around with BaseSelect and except for this thread:https://plugincafe.maxon.net/topic/5803/5859_creating-selection-tags I couldn't find much information about it, so I did some tests and I figured I'd post what I learned up here so it could help somebody.
Here's the script:
import c4d
from c4d import gui
#Welcome to the world of Python
def main() :
obj = doc.GetActiveObject() #Get active object
doc.SetMode(c4d.Mpoints)
if obj == None:
return
c4d.CallCommand(12236)#Make the object editable
obj = doc.GetActiveObject() #Get active object
SelectedPoints = obj.GetPointS() #Creates an instance of the objects selection
TotalPoints = obj.GetPointCount()#You need this to loop through and check all the points
OriginalSelection = []
SecondSelection =[]
ThirdSelection = []
print "Number of Points selected:",SelectedPoints.GetCount()#The number of points selected
print "Point states at the beginning:"
for id,state in enumerate(SelectedPoints.GetAll(TotalPoints)) :#prints out the id and the state of that point
print "ID ",id,"State", state#The id of the point and whether it's selected or not
if SelectedPoints.IsSelected(id) == True:
OriginalSelection.append(id)#Creates a list of all the currently selected points Saving the current stat
print "List of the selected points:",OriginalSelection #The points that are slection
for id in range(TotalPoints) :
if SelectedPoints.IsSelected(id) == False:
SelectedPoints.Select(id)#Select point 0 in addition to the runs already selected
SecondSelection.append(id)
break
print "Point states at the middle:"
for id,state in enumerate(SelectedPoints.GetAll(TotalPoints)) :#prints out the id and the state of that point
print "ID ",id,"State", state#The id of the point and whether it's selected or not
print "List of the selected points:",SecondSelection #The points that are slection
for id in OriginalSelection:
SelectedPoints.Deselect(id)#Deselects the orginal selection
#So the new point is what's selected
SelectedPoints.ToggleAll(TotalPoints,0)
#Swaps all the points to the opposite state,
#The SDK is incorrect, the max goes first and then the min,ToggleAll(max,min)
#SelectAll() has the same mistake, it should be SelectAll(max, min)
print "Point states at the end:"
for id,state in enumerate(SelectedPoints.GetAll(TotalPoints)) :#prints out the id and the state of that point
print "ID ",id,"State", state#The id of the point and whether it's selected or not
if SelectedPoints.IsSelected(id) == True:
ThirdSelection.append(id)
print "List of the selected points:",ThirdSelection
c4d.EventAdd()
if __name__=='__main__':
main()
It's just run on an object and prints out some information on which points are selected. It doesn't actually do anything but select different points though. ToggleAll() and SelectAll() had me stumped for a bit because the SDK has incorrect information about them.
Anything I missed would be appreciated.
Daniel
Edit: So I've been trying to use BaseSelect to keep track of edges. Are edges stored as two separate 'id's in the BaseSelect? It doesn't seem to correspond with the points that form the line. Even if they don't correspond to the points is there a reason for which 'id's are used? GetCount() for BaseSelect also seems to double the number of edges that are actually selected, because it says two 'id's have the same edge.
import c4d
from c4d import gui
#Welcome to the world of Python
def main() :
obj = doc.GetActiveObject()
edges = obj.GetEdgeS()
edgecount = edges.GetCount()
print "Number of edges selected", edgecount
print edges.GetAll(50)
if __name__=='__main__':
main()
I need a way to select specific edges that works in both R13, and in R12.
Daniel