Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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

    Packed Automatic UVs Command in S22?

    Cinema 4D SDK
    s22
    4
    10
    1.5k
    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.
    • W
      wuzelwazel
      last edited by wuzelwazel

      Hello, I'm struggling to figure out how to call the new Packed Automatic UV command from Python. I've found the BaseContainer where I can modify settings, but haven't figured out how to invoke the command.

      Alternatively being able to invoke the Set UVW From Projection... command with the automatic packed option would be even more straightforward in this case. Is that possible?

      W 1 Reply Last reply Reply Quote 0
      • W
        wuzelwazel @wuzelwazel
        last edited by

        @wuzelwazel said in Packed Automatic UVs Command in S22?:

        Alternatively being able to invoke the Set UVW From Projection... command with the automatic packed option would be even more straightforward in this case. Is that possible?

        I should mention that I can use c4d.CallCommand(c4d.UV_SET_FROM_PROJECTION_CMD_ID) but in that case I don't know how to set the options for the command via Python.

        1 Reply Last reply Reply Quote 0
        • M
          m_adam
          last edited by

          Hi, I'm sorry I didn't get the time today to look more in detail, but you have CallUvCommand which accept one of the next flags (documentation is not yet correctly updated I will do next week):

          • c4d.UVCOMMAND_PACK_UV
          • c4d.UVCOMMAND_AUTOMATICUV
          • c4d.UVCOMMAND_PACK_RASTERIZED
          • c4d.UVCOMMAND_PACK_GEOMETRIC
          • c4d.UVCOMMAND_PACK_BOUNDINGBOX

          Next week I will provide examples about how to use them, in any case, you can find an example about CallUvCommand in the call_uv_command.py Example.

          Cheers,
          Maxime.

          MAXON SDK Specialist

          Development Blog, MAXON Registered Developer

          W 1 Reply Last reply Reply Quote 0
          • W
            wuzelwazel @m_adam
            last edited by wuzelwazel

            @m_adam Thanks Maxime!

            I'd found UVCOMMAND_AUTOMATICUV while perusing the depths of symbols.h yesterday but I couldn't find a way to make it work and I wasn't sure if it was what I needed... so I stopped looking into it. Your post renewed my enthusiasm and I went looking in the C++ SDK docs to find this:

            https://developers.maxon.net/docs/cpp/2023_2/group___m_d_a_t_a___a_u_t_o_m_a_t_i_c_u_v.html#gadd449518eb3bc7a84abe96673e62488a

            Which I believe will allow me to create my settings container for the command. I'll try this later today and let you know the results.

            It would be nice to have the python documentation updated too 👍

            1 Reply Last reply Reply Quote 0
            • W
              wuzelwazel
              last edited by wuzelwazel

              Well, it was a beautiful dream. The CallUVCommand to UVCOMMAND_AUTOMATICUV still fails when supplying a settings container based on the MDATA I found. In retrospect it does seem odd that these would be MDATA when the other UV command settings are not.

              Looking forward to your examples. I'll keep stabbing blindly in the dark in the meantime.

              1 Reply Last reply Reply Quote 0
              • M
                m_adam
                last edited by

                Hi @wuzelwazel this command being part of the new command, that is supposed to work without bodypaint it needs to be called via SendModelingCommand.
                Unfortunately for the moment, there is no symbols for this command ID.
                But here you are:

                import c4d
                
                # Main function
                def main():
                    op = doc.GetActiveObject()
                    settings = c4d.BaseContainer()
                    settings[c4d.MDATA_AUTOMATICUV_TAGINDEX] = 0
                    settings[c4d.MDATA_AUTOMATICUV_FORCESEAMS] = False
                    settings[c4d.MDATA_AUTOMATICUV_OVERLAPMIRRORED] = False
                    settings[c4d.MDATA_AUTOMATICUV_OVERLAPIDENTICAL] = False
                    settings[c4d.MDATA_AUTOMATICUV_SPACING] = 0.01
                    settings[c4d.MDATA_AUTOMATICUV_USENORMALS] = True
                    settings[c4d.MDATA_AUTOMATICUV_SPACINGASPECT] = 1.0
                    res = c4d.utils.SendModelingCommand(command=1053624,
                                                list=[op],
                                                mode=c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                                bc=settings,
                                                doc=doc)
                    c4d.EventAdd()
                
                # Execute main()
                if __name__=='__main__':
                    main()
                

                MAXON SDK Specialist

                Development Blog, MAXON Registered Developer

                1 Reply Last reply Reply Quote 0
                • W
                  wuzelwazel
                  last edited by

                  I never would've found the command id so thanks a ton for sharing that. Marking as solved.

                  1 Reply Last reply Reply Quote 0
                  • DunhouD
                    Dunhou
                    last edited by

                    This script did not work in S26.013(win),but work in R25. Is there any change between 26 and 25?
                    SDK seems not update UV mod
                    Please Help

                    https://boghma.com
                    https://github.com/DunHouGo

                    ferdinandF 1 Reply Last reply Reply Quote 0
                    • ferdinandF
                      ferdinand @Dunhou
                      last edited by ferdinand

                      Hello @dunhou,

                      Thank you for reaching out to us. The script is working fine for me. Could you please describe more precisely what is not working for you?

                      @m_adam was a bit thin-lipped in his example, the example requires the user to select the object to unwrap. I have added a more verbose variant at the end of my posting.

                      Cheers,
                      Ferdinand

                      The result:
                      unwrap.gif

                      The code:

                      """Unwraps the active polygon object with MCOMMAND_AUTOMATICUV.
                      """
                      import c4d
                      
                      
                      # Main function
                      def main():
                          """
                          """
                          # Bail when there is either no selection or the selection is not a polygon object.
                          if not isinstance(op, c4d.PolygonObject):
                              return c4d.gui.MessageDialog("Please select a polygon object to unwrap.")
                      
                          # Run MCOMMAND_AUTOMATICUV
                          settings = c4d.BaseContainer()
                          settings[c4d.MDATA_AUTOMATICUV_TAGINDEX] = 0
                          settings[c4d.MDATA_AUTOMATICUV_FORCESEAMS] = False
                          settings[c4d.MDATA_AUTOMATICUV_OVERLAPMIRRORED] = False
                          settings[c4d.MDATA_AUTOMATICUV_OVERLAPIDENTICAL] = False
                          settings[c4d.MDATA_AUTOMATICUV_SPACING] = 0.01
                          settings[c4d.MDATA_AUTOMATICUV_USENORMALS] = True
                          settings[c4d.MDATA_AUTOMATICUV_SPACINGASPECT] = 1.0
                          res = c4d.utils.SendModelingCommand(command=1053624,
                                                      list=[op],
                                                      mode=c4d.MODELINGCOMMANDMODE_POLYGONSELECTION,
                                                      bc=settings,
                                                      doc=doc)
                      
                          # Push an update even to Cinema 4D.
                          c4d.EventAdd()
                      
                      # Execute main()
                      if __name__=='__main__':
                          main()
                      

                      MAXON SDK Specialist
                      developers.maxon.net

                      DunhouD 1 Reply Last reply Reply Quote 0
                      • DunhouD
                        Dunhou @ferdinand
                        last edited by

                        @ferdinand Thanks for your example,I do select a op in the OM.Last time I try it ,it did not work ,but this time it works well,I think last time I use S26 preset python text, and Optional is not import probly, anyway It's work well right now . Great thanks for you

                        https://boghma.com
                        https://github.com/DunHouGo

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