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

    Hidden Tag / Operation Complete [SOLVED]

    PYTHON Development
    0
    11
    1.0k
    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
      Helper
      last edited by

      On 13/10/2014 at 02:51, xxxxxxxx wrote:

      Hello,

      i have a simple script that gernerates a TextureBake Tag and bake the AO to Vertexmap. But if i will rename the generetet VertexMap or set to selected, in the Console is all good but in the Objectmanager is the old name in the VertexMap Tag and no VertexMap is selected.

      I need a Solution for this.

      Here is the Simple Code:

      tag=op.GetTag(c4d.Tbaketexture)
          tag[c4d.BAKETEXTURE_CHANNEL_AO]=True
          tag[c4d.BAKETEXTURE_AO_TO_VERTEX]=True
          c4d.CallButton(tag, c4d.BAKETEXTURE_BAKE)

      tag=obj.GetTag(c4d.Tvertexmap) # Select VertexMap
          tag.SetName("Ao Dirt Map")
          doc.SetActiveTag(tag)

      greetz iDani

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

        On 13/10/2014 at 04:34, xxxxxxxx wrote:

        Hi,

        the second time you write obj instead of op.

        tag=obj.GetTag(c4d.Tvertexmap) # Select VertexMap

        and a

        c4d.EventAdd()

        is needed to update your selection choice at the end

        Cheers,
        Martin

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

          On 13/10/2014 at 05:41, xxxxxxxx wrote:

          Hello Monkeytrack,

          thanks for your feedback.

          The c4d.EventAdd() doesn't fix it. The Tag is for Miliseconds selected and than unselected.

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

            On 13/10/2014 at 06:13, xxxxxxxx wrote:

            You can call me Martin, 😉

            everything works fine here.
            You can use
            tag.SetBit(c4d.BIT_ACTIVE) with an addevent, too.

            But it seems there is another problem with your code.
            Post a little bit more from it, that we can find the problem.

            cheers,
            Martin

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

              On 13/10/2014 at 07:29, xxxxxxxx wrote:

              Hello Martin,

              the tag is for miliseconds selected und renamed in Attributesmanager but than ist overwritten.

              Here is my complete code (a materialtag must be on the polygonobject to work) :
              import c4d
              from c4d import documents, utils, internals

              #Welcome to the world of Python

              def main() :

              c4d.CallCommand(1011133) # Bake Texture...
                  
                  tag=op.GetTag(c4d.Tbaketexture)
                  tag[c4d.BAKETEXTURE_CHANNEL_AO]=True
                  tag[c4d.BAKETEXTURE_AO_TO_VERTEX]=True
                  c4d.CallButton(tag, c4d.BAKETEXTURE_BAKE)
                      
                  c4d.EventAdd()

              tag=op.GetTag(c4d.Tvertexmap) # Select VertexMap     
                  tag.SetBit(c4d.BIT_ACTIVE)
                  tag.SetName("Ao Dirt Map")
                  doc.SetActiveTag(tag)
                  
                  #tag[c4d.ID_BASELIST_NAME]="Material_obj.Dirt Map1111"

              c4d.EventAdd()

              if __name__=='__main__':
                  main()

              thanks for your help
              greetz
              iDani

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

                On 13/10/2014 at 11:14, xxxxxxxx wrote:

                crossroadtraffic...

                your texture bake was´nt finished jet (including rendering the picture in the viewer)and the script  handled the selection step in between.
                To many tasks at once.

                It´s maybe a little bit dirty to sort it out like this, but you can open another userthread and within you let your selection task wait until your baking is finished.
                But I have no solution jet how we can detect if the baking is finished, like in a rendering.

                In this example I used the clause `if a vertex map exists´, but this is no solution for every case.
                If you find a better solution I´ll be interested.
                But as a starting point this works.
                cheers
                Martin

                  
                import c4d  
                from c4d import documents, utils, internals  
                import os, time, thread  
                  
                def Vertex(op,time) :  
                  time.sleep(0.5)  
                  tag2=op.GetTag(c4d.Tvertexmap) # Select VertexMap       
                  tag2.SetBit(c4d.BIT_ACTIVE)  
                  tag2.SetName("Ao Dirt Map")  
                  c4d.EventAdd()  
                  
                    
                  
                def main() :  
                    
                  
                        
                  tag=op.MakeTag(c4d.Tbaketexture)  
                  tag[c4d.BAKETEXTURE_CHANNEL_AO]=True  
                  tag[c4d.BAKETEXTURE_AO_TO_VERTEX]=True  
                    
                  tag[c4d.BAKETEXTURE_BAKE]  
                  c4d.CallButton(tag, c4d.BAKETEXTURE_BAKE)  
                  c4d.EventAdd()  
                    
                  
                  if  op.GetTag(c4d.Tvertexmap)!= None:  
                     thread.start_new(Vertex,(op, time))  
                        
                  
                  
                  
                  c4d.EventAdd()  
                
                1 Reply Last reply Reply Quote 0
                • H
                  Helper
                  last edited by

                  On 14/10/2014 at 00:16, xxxxxxxx wrote:

                  Hello,

                  as Martin indicated, the BAKETEXTURE_BAKE command starts a process that involves threads. So the vertex map tag will be changed after the bake process is finished (and also after your script is done).

                  The bake command already gives the vertex map a new name: "Object.Dirt Map". Maybe you can use this name for your purposes.

                  best wishes,
                  Sebastian

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

                    On 14/10/2014 at 01:06, xxxxxxxx wrote:

                    Hello Sebastian,

                    is there any way to detect the progress of texturebaking, as it is possilble with e.g. the batchrendering?

                    batch = c4d.documents.GetBatchRender()
                    if batch.IsRendering() :

                    Thanks in advance
                    Martin

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

                      On 14/10/2014 at 01:35, xxxxxxxx wrote:

                      Hello Martin,

                      this helps me a lot. Thank you for your help. 🙂
                      You are great! 🙂

                      Greetz
                      iDani

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

                        On 15/10/2014 at 07:58, xxxxxxxx wrote:

                        Hello,

                        it seems that it is not possible to get the progress in Python. But using the C++ API you can use BakeTexture[URL-REMOVED] to bake a texture. You can then add a callback[URL-REMOVED] to get the progress.

                        Best wishes,
                        Sebastian


                        [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.

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

                          On 15/10/2014 at 08:18, xxxxxxxx wrote:

                          Hello,

                          thank you for the reply!
                          It´s a real timesaver, if someone experienced says :"It´s not possible"
                          But for iDani it works so far and that´s good to know.

                          to iDani
                          You´re welcome.

                          Best wishes,
                          Martin

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