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
    • Admin
    • Login

    Restore old Pointselection

    Scheduled Pinned Locked Moved PYTHON Development
    9 Posts 0 Posters 779 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 22/12/2015 at 02:45, xxxxxxxx wrote:

      Hi, I want to store a Pointsselection and later restore that Selection on another Identical Object.
      I tried this...but with no luck

      points = obj.GetPointS()
      count =  NewObj.GetPointCount()
      newPoints = NewObj.GetPointS()
      newPoints.DeselectAll()
        
      for i in xrange(count) :
      	if points.IsSelected(i) :
      		newPoints.Select(i)
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 22/12/2015 at 03:02, xxxxxxxx wrote:

        Hi Holgar,

        You can simply use BaseSelect.CopyTo() to copy a selection to another. Note you have to send a MSG_UPDATE after changing the selection:

        sel = obj.GetPointS()
        otherSel = newObj.GetPointS()
        sel.CopyTo(otherSel)
        newObj.Message(c4d.MSG_UPDATE)
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 22/12/2015 at 03:49, xxxxxxxx wrote:

          Thanks Yannick. But it does not work for me. What I do is I make CallCommand with Shrinkselection and than I want to restore the old selection. Its not working.

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

            On 22/12/2015 at 03:52, xxxxxxxx wrote:

            Could you post some code?

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

              On 22/12/2015 at 04:16, xxxxxxxx wrote:

              def main() :
                
                  
                  selobj=doc.GetSelection()
                
                  obj=selobj[0]
                  sel = obj.GetPointS()
                  obj.Message(c4d.MSG_UPDATE)
                
                  c4d.CallCommand(12559) # Shrink Selection
                  newobj=obj.GetClone()
                  newobj.InsertAfter(obj)
                  
                  
                  otherSel = newobj.GetPointS()
                  sel.CopyTo(otherSel)
                  newobj.Message(c4d.MSG_UPDATE)
                  obj.Remove()
                
                  c4d.EventAdd()
                
                
              if __name__=='__main__':
                  main()
              
              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                On 22/12/2015 at 05:26, xxxxxxxx wrote:

                Just some question:

                selobj=doc.GetSelection()  
                Why dont you use doc.GetActiveObject() or doc.GetActiveObjects?  
                You just wanna work with Objects, rigth?  
                
                
                
                obj.Message(c4d.MSG_UPDATE)  
                Why do you send this message befor the selection change?  
                  
                c4d.CallCommand(12559) # Shrink Selection  
                Isnt it more comfortable to use   
                c4d.utils.SendModelingCommand(command = c4d.MCOMMAND_SELECTSHRINK,  
                                                list = [selobj],  
                                                mode = c4d.MODELINGCOMMANDMODE_POINTSELECTION,  
                                                bc = c4d.BaseContainer(),  
                                                doc = doc)  
                Ok, in this case selobj is the active object in any cases.  
                  
                And finally just to clearify:   
                - you store the selection of an object  
                - you shrink the selection  
                - you create and insert a clone of the object with the shrinked selection  
                - you put the unshrinked selection at the clone and remove the object  
                Where is the difference before and after the script?       
                
                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  On 22/12/2015 at 06:19, xxxxxxxx wrote:

                  This is just an example copied from a script. I store the selection before I shrink the selection. So I would expect i can restore it later from the state before I shrink it. But I guess something is wrong with my logic.

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

                    On 22/12/2015 at 06:33, xxxxxxxx wrote:

                    Ok, I understand.

                    I think sel isnt an instance or clone of obj.GetPointS(), so you change sel with SELECTSHRINK, too.

                    import c4d  
                    from c4d import gui  
                    #Welcome to the world of Python  
                      
                    def main() :  
                      
                      obj = doc.GetActiveObject()  
                      if obj == None: return  
                        
                      sel = c4d.BaseSelect()  
                      obj.GetPointS().CopyTo(sel)  
                      
                      c4d.utils.SendModelingCommand(command = c4d.MCOMMAND_SELECTSHRINK,  
                                                  list = [obj],  
                                                  mode = c4d.MODELINGCOMMANDMODE_POINTSELECTION,  
                                                  bc = c4d.BaseContainer(),  
                                                  doc = doc)  
                                                    
                      newobj = obj.GetClone()  
                      newobj.InsertAfter(obj)  
                      newobj.SetRelPos(c4d.Vector(0,0,200))  
                        
                      other_sel = newobj.GetPointS()  
                      sel.CopyTo(other_sel)  
                      newobj.Message(c4d.MSG_UPDATE)  
                      
                      c4d.EventAdd()  
                        
                      
                    if __name__=='__main__':  
                      main()
                    
                    1 Reply Last reply Reply Quote 0
                    • H Offline
                      Helper
                      last edited by

                      On 23/12/2015 at 00:30, xxxxxxxx wrote:

                      so How would I be able to restore my old selection than? Any Idea?

                      Edit: Sorry..just realized that your code is now working. I see. Thanks.

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