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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    SendModelingCommand -Loop/Ring

    Scheduled Pinned Locked Moved PYTHON Development
    4 Posts 0 Posters 407 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 05/03/2013 at 17:03, xxxxxxxx wrote:

      I want to select a ring or a loop with SendModelingCommand.
      Unfortunately, the SKD is very confusing here, leaving it up to find out what some do, or not, by trying  😕
      http://chicagoc4d.com/C4DPythonSDK/modules/c4d.utils/index.html#c4d.utils.SendModelingCommand
      For instance there are many indented and duplicate entries under Untriangulate and ConvertSelection, which obviously don´t seem to have to do anything with it?

      Then the tools, which in c4d work not on a selection, but also select it (like loop or ring), don´t seem to take notice of MODELINGCOMMANDMODE_****SELECTION (the same as MODIFY_****SELECTION)?

      With the ring loop I got "some" achievment by this:

          bc = c4d.BaseContainer()  
        bc.SetData(c4d.MDATA_RING_EDGE, 22) # Giving an Edge Id for the ring manually  
        bc.SetData(c4d.MDATA_RING_SELECTION, c4d.SELECTION_NEW)  
        
        
        ring = utils.SendModelingCommand(command=c4d.ID_MODELING_RING_TOOL,  
                                        list=[obj],  
                                        mode=c4d.MODELINGCOMMANDMODE_EDGESELECTION,  
                                        bc=bc,  
                                        doc=doc,  
                                        flags=c4d.MODELINGCOMMANDFLAGS_CREATEUNDO)  
        c4d.EventAdd()  
        print ring
      

      But I have to put the edge ID in there manually and got no idea how to find out an edge ID...

      Doing the same with Loop Tool just gives me a False feedback, even if I fill out all its options.

         bc2 = c4d.BaseContainer()  
        
        bc2.SetData(c4d.MDATA_LOOP_SEL_STOP_AT_BOUNDS, True)  
        bc2.SetData(c4d.MDATA_LOOP_SEL_SELECT_BOUNDS, False)  
        bc2.SetData(c4d.MDATA_LOOP_SEL_GREEDY_SEARCH, False)  
        bc2.SetData(c4d.MDATA_LOOP_LOOP_EDGE, 11)  
        # bc2.SetData(c4d.MDATA_RING_EDGE, 22)  
        # bc2.SetData(c4d.MDATA_LOOP_SKIP, 0)  
        bc2.SetData(c4d.MDATA_LOOP_SELECTION, c4d.SELECTION_NEW)  
        # bc2.SetData(c4d.MDATA_LOOP_SEL_, 0)  
        
        
        loop = utils.SendModelingCommand(command=c4d.ID_MODELING_LOOP_TOOL,  
                                            list=[obj],  
                                            mode=c4d.MODELINGCOMMANDMODE_EDGESELECTION,  
                                            bc=bc2,  
                                            doc=doc,  
                                            flags=c4d.MODELINGCOMMANDFLAGS_CREATEUNDO)  
        print loop  
        c4d.EventAdd()
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 05/03/2013 at 17:18, xxxxxxxx wrote:

        edge ids are being defined under c4d.polygonobject.getedges().

        The edges are indexed by 4 * polygon + edge where polygon is the polygon index and edge is the edge index between 0 and 3.

        so the polygon with the id 4 will hold edge 4*4+0, +1, +2, (+3). the edge order is the same as
        the point order AB, BC, CA or AB, BC, CD, DA.

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

          On 06/03/2013 at 04:27, xxxxxxxx wrote:

          Thanks,

          for ring selection it kind of works now, but I can´t get a proper undo, it always repeats all the iteration Steps from "for index in select_list:" 😕

              doc = c4d.documents.GetActiveDocument()  
            obj = doc.GetActiveObject()  
            select_list = []  
            neigh = utils.Neighbor()    
            neigh.Init(obj)    
            edgecount = neigh.GetEdgeCount()  
            bs_selected = obj.GetSelectedEdges(neigh, c4d.EDGESELECTIONTYPE_SELECTION)  
            
            doc.StartUndo()  
            doc.AddUndo(c4d.UNDOTYPE_CHANGE_SELECTION, obj)  
            
            for i, index in enumerate(bs_selected.GetAll(edgecount)) :  
                if not index:  
                    continue  
                else:  
                    select_list.append(i)  
            
            for index in select_list:  
                bc = c4d.BaseContainer()  
                bc.SetData(c4d.MDATA_RING_EDGE, index)    
                bc.SetData(c4d.MDATA_RING_SELECTION, c4d.SELECTION_ADD)  
                # bc.SetData(c4d.MDATA_RING_SKIP, 35)  
            
                utils.SendModelingCommand(command=c4d.ID_MODELING_RING_TOOL,  
                                          list=[obj],  
                                          mode=c4d.MODELINGCOMMANDMODE_EDGESELECTION,  
                                          bc=bc,  
                                          doc=doc,  
                                          flags=c4d.MODELINGCOMMANDFLAGS_0)  
                doc.EndUndo()  
            c4d.EventAdd()
          

          But ID_MODELING_LOOP_TOOL seems broken, or I´m missing something crucial, anybody got luck with that? It doesn´t do anything besides reporting False...

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

            On 11/03/2013 at 12:15, xxxxxxxx wrote:

            Got the ring Undo, by doing it in an isolated Document with a combination of DoUndo...

            But could anybody test if the ID_MODELING_LOOP_TOOL __ tool is really broken or me? I´ll report it, if its broken...

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