polygon selection effector



  • On 18/04/2017 at 03:15, xxxxxxxx wrote:

    Hi,guys.

    I try to create an selection effector with plain effector(as in the screenshot).I don't know how to delete xpresso tag when Idelete an polygon selection from taglist.In other words,I want to keep the counts of  xpresso tags equel to the counts of taglist all the time.This is my first question.I know how to add xpresso tags according to the polygon selection in the taglist,but the xpresso tags can't be update,but I delete some xpresso tags,they can be update,I don't know how to fix it,This is my second question.

    Thanks in advanced!

      
      
    import c4d  
      
    def main() :  
      plain = op.GetObject()  
      taglist = plain[c4d.ID_USERDATA,1]  
      xptag = plain.GetTag(c4d.Texpresso,0)  
        
      cnt = taglist.GetObjectCount()  
        
      if len(plain.GetTags()) <= cnt-1:  
          for i in xrange(1,cnt) :  
              xptag1 = plain.MakeTag(c4d.Texpresso,xptag)  
              xptag.CopyTo(xptag1,0)  
                
      for i in xrange(cnt) :  
          seltag = taglist.ObjectFromIndex(doc,i)  
          plain.GetTag(c4d.Texpresso,i)[c4d.ID_USERDATA,1] = seltag  
      
    

    Thank you!

    Best wishes!
    Ching.



  • On 19/04/2017 at 02:51, xxxxxxxx wrote:

    Hi Ching,

    you are not allowed to modify the scene (in this case adding a new tag) from a tag's Execute() function (and the main() function of the Python tag is basically the same, it's called during evaluation of the scene). See also the Important Threading Information on this topic.

    So you will need to do the creation (and deletion) of tags in main thread, easiest to do it is in message function. Declare a message() function next to your main() function in the Python tag. Now, you have several options, like having a button to sync selection tags and xpresso tags or to react on changes of your InExcludeList.

    It would roughly look like so:

    def message(msgType, data) :
      # react to parameter change
      if msgType == c4d.MSG_DESCRIPTION_POSTSETPARAMETER:
        # check for your InEx user data ID:
        if data['descid'][0].id == c4d.ID_USERDATA and data['descid'][1].id == ID_UD_INEX:
          # react on change of the InExList
          pass
      # or react to a button
      elif msgType == c4d.MSG_DESCRIPTION_COMMAND:
        # check for your button's user data ID:
        if data['id'][0].id == c4d.ID_USERDATA and data['id'][1].id == ID_UD_BUTTON:
          # react to button press
          pass
    


  • On 22/04/2017 at 01:38, xxxxxxxx wrote:

    Thanks Andreas. but the problem is still not fixed.



  • On 25/04/2017 at 05:59, xxxxxxxx wrote:

    Hi Ching,

    which problem specifically?


Log in to reply