BaseSelect updated, plus questions!



  • 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



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

    On 06/08/2012 at 09:23, xxxxxxxx wrote:

    I think you should take a look at this interesting topic about BaseSelect and the edges of a mesh: https://plugincafe.maxon.net/topic/6226/6566_getedgecount--bug

    I'll fix the documentation. Thanks for reporting these errors.


Log in to reply