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

    Globalize FilePath

    Scheduled Pinned Locked Moved PYTHON Development
    6 Posts 0 Posters 660 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 01/05/2014 at 20:29, xxxxxxxx wrote:

      Hi,
      I am writing a python script in c4d and i need some help.

      The script i have written requires the global(absolute) filepath of the textures.
      As, i require it to copy the texture file into a new directory.

      Currently, i have resorted to using call command, to get the filepath:

      c4d.CallCommand(1029486) #Open Texture Manager
      c4d.CallCommand(1029813) #Select All texture
      c4d.CallCommand(1029820) #Globalize filenames

      But i know that this is method may lead to complications in the future.

      I have tried googling every possible term i can think of, and i still have not
      come up with a solution.
      So i would like to know if anyone can help me, with how i would go along writing a
      python alternative on how to get the global(absolute) filepath.

      -Harry

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

        On 02/05/2014 at 06:16, xxxxxxxx wrote:

        You need to check in what folder the texture exists, if it not already is an absolute filename.
        Use os.path.join(directory, filename) to join to paths into one. The directories Cinema will use
        to search for textures are

        1. Document's tex/ folder
        2. Document's parent folder
        3. User texture folder (use the c4d.storage.GeGetC4DPath() function)
        4. Global texture folders (use the c4d.GetGlobalTexturePath() function)

        os.path.isfile() will tell you whether a path is pointing to a file. It'll return False if it's a directory
        or if the path does not exist.

        -Niklas

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

          On 04/05/2014 at 20:03, xxxxxxxx wrote:

          Thanks for the reply Niklas. This is the script that i came up with:

          #Get Textures
              def getTextures(self) :
                      
                  global texturePathArray
                  global Textures
                 
                  texturePathArray = []    
                  Textures = doc.GetAllTextures()    #Get All textures
                      
                  for (i,texture) in Textures:
                      if os.path.isfile(texture) == False:
                        
                         if os.path.isfile(projectDir + "\" + texture) == True:
                              texturePathArray.append(projectDir + "\" + texture)
                        
                         elif os.path.isfile(projectDir + "\ ex" + texture) == True:
                              texturePathArray.append(projectDir + "\ ex" + texture)
                        
                         for i in range(8) :
                              if os.path.isfile(c4d.storage.GeGetC4DPath(i) + "\" + texture) == True:
                                  texturePathArray.append(c4d.storage.GeGetC4DPath(i) + "\" + texture)
                        
                         for i in range(9) :
                              if os.path.isfile(c4d.GetGlobalTexturePath(i) + "\" + texture) == True:
                                  texturePathArray.append(c4d.GetGlobalTexturePath(i) + "\" + texture)
                      
                      else:
                         texturePathArray.append(texture)

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

            On 05/05/2014 at 17:28, xxxxxxxx wrote:

            @harryseow94: Small hint: use os.path.join(...) instead of '+ \", otherwise this does not work on OSX.

            Cheers, s_rath

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

              On 05/05/2014 at 20:04, xxxxxxxx wrote:

              @s_rath: Cool. i didnt know that till you mentioned it. Thanks.

              -Harry

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

                On 10/02/2015 at 01:58, xxxxxxxx wrote:

                Hi,

                I am doing something similar in my script where I want to extract the full path of the textures. I came across this thread which precisely gives me an idea how to go about it. But what I am confused about, is the order in which I should search these paths. E.g. I have a texture water.jpg in tex folder and another water.jpg in one of my search paths. The images are different. My texture contains /searchpath1/water.jpg. But if I start the search in /tex and I get /tex/water.jpg, I stop my search, thus getting the incorrect image path. So how to determine when should I stop my search? Hope I could explain the problem..

                Thanks.

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