Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    Python tag refresh editor selection

    Scheduled Pinned Locked Moved PYTHON Development
    4 Posts 0 Posters 373 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      On 08/10/2014 at 04:19, xxxxxxxx wrote:

      Hallo,

      in this script ( c4d file https://www.hidrive.strato.com/share/mvm9t4h3vi#$/) i want to deselect a number of selected polygons but the editor is not refreshed.

      import c4d
      #Welcome to the world of Python

      changed=0 # glabal variable

      def main() :
          # global changed # must be defined in function as global
          # null=op.GetObject() # object of python tag
          print " "
          obj=doc.GetActiveObject()
          if not (obj==None) :
              print "selected object =",obj.GetName(), obj.GetTypeName()
              if (obj.CheckType(c4d.Opolygon)) :
                  n=obj.GetPolygonCount()
                  sel=obj.GetPolygonS()
                  nsel=sel.GetCount()
                  nth=op[c4d.ID_USERDATA,1]
                  print "number of selected polygons:",n,nsel,nth
                  if (nsel>3) :
                      for i in range(0,nsel) :
                          if (i % nth==0) :
                              sel.Deselect(i)
                              print i,"deselected"
                      # here i want to refresh the editor
                      # c4dtools.utils.update_editor() # nothing happens
                      # obj.Message(c4d.MSG_UPDATE) # nothing happens
                      # c4d.EventAdd(); # endless loop calling this function
                      return

      I have googleing one day without any result. Please excuse me its my first posting in forums.

      Thanks Udo Welz

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 08/10/2014 at 08:24, xxxxxxxx wrote:

        Welcome.

        Try it like this:

          
        import c4d  
        def main() :  
          
          #The object the tag is on  
          obj = op.GetObject()  
          if not obj: return False  
          
          totalpolys = obj.GetPolygonCount()      
          PolyS = obj.GetPolygonS()  
            
          #If the user selects 4 or more polygons  
          #The code below will automatically de-select every other polygon  
          if PolyS.GetCount() > 3:  
            
              #We will De-Select every other polygon  
              #Change this variable. Or use a UserData gizmo to change it  
              nth = 2  
          
              #First this code selects all of the polygons  
              #Then it de-selects every other one  
              for poly in xrange(totalpolys) :  
                  PolyS.Select(poly)  
                  if poly % nth==0: PolyS.Deselect(poly)
        

        -ScottA

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 09/10/2014 at 04:12, xxxxxxxx wrote:

          Thank you ScottA.

          It's my first test in programming cinema. My goal is to select a bunch of polygons in editor e.g. like the loop selection on sphere. Then run the script to deselect nth polygon. Then i want to continue modelling with this selection in editor. I thought that sel is an array or so and the loop index e.g. 2 selected the 2.th selected polygon but it's only selecting the 2.th polygon of all polygons wich was not select. Sorry for my english. I am german and speaking or writting is not so good. Your suggestion was very helpful.

          Udo

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 09/10/2014 at 05:10, xxxxxxxx wrote:

            👍 I've solved this problem by doing this

            import c4d
            import new
            #Welcome to the world of Python

            changed=0 # glabal variable

            def main() :
                # global changed # must be defined in function as global
                # null=op.GetObject() # object of python tag
                if (op!=doc.GetActiveTag()) : return
                print " "
                obj=doc.GetActiveObject()
                if not (obj==None) :
                    print "selected object =",obj.GetName(), obj.GetTypeName()
                    if (obj.CheckType(c4d.Opolygon)) :
                        n=obj.GetPolygonCount()
                        sel=obj.GetPolygonS()
                        nsel=sel.GetCount()
                        nth=op[c4d.ID_USERDATA,1]
                        print "number of selected polygons:",n,nsel,nth
                        if (nsel>3) :
                            j=0
                            for i in xrange(n) :
                                if (sel.IsSelected(i)) :
                                    if (j % nth==0) :
                                        sel.Toggle(i)
                                        print i,"deselected"
                                    j+=1

            Thank you ScottA for help

            1 Reply Last reply Reply Quote 0
            • First post
              Last post