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

    Strip Texture Path using Python

    Cinema 4D SDK
    python
    2
    5
    895
    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.
    • D
      Djoneeeee
      last edited by

      Hello.
      How can I remove the texture path from a project in c4d r17 using python, so that another person on his computer does not have to re-bind the texture path

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

        Hello @Djoneeeee,

        Thank you for reaching out to us. I first must state that R17 is way out of the official SDK support cycle, which goes up to two versions prior to the current version, e.g., up to R23 for R25. We usually make some exceptions here and there, but I do not even have R17 currently installed on any machine, because it was released in 2014.

        We could provide help for a more recent version, e.g., R20, which is similar in its principal architecture of using Python 2. But there is also the problem of the scope of your question:

        1. What constitutes as a texture path for you? It is not only materials which can reference images or videos as shaders, but there are also other entities, as for example a Relief Object or Shader Effector, which can hold textures.
        2. I assume you want to make these paths relative instead of absolute when you say "so that another person on his computer does not have to re-bind the texture path".

        First of all, Cinema 4D has for quite a long time an already built-in feature for that, the Save Project with Assets ... command which will pack up the dependencies of a scene into a folder. I think this feature was already present with R17. In R21 we also introduced a tool to repair broken asset paths.

        093b90d8-cd40-4021-b131-9136291ec1f6-image.png

        If you want to do this yourself, you must iterate over all nodes in the scene, then inspect their description, and search for base links of type TEX. For each of the parameter values you then must apply whatever you want to do with these paths. The topic has been discussed multiple times in the past, but can be tricky to implement when certain goals must be met.

        I also must point out that we cannot provide from-the-ground-up solutions here, you first must provide code with a specific question and we, the SDK-Team, will then provide answers for that coding problem.

        Thank you for your understanding,
        Ferdinand

        MAXON SDK Specialist
        developers.maxon.net

        D 1 Reply Last reply Reply Quote 0
        • D
          Djoneeeee @ferdinand
          last edited by

          @ferdinand
          I need to remove file paths only for textures.
          manually, I only know this method:
          Window -> Texture Manager
          a7f926ea-0e07-4ef0-a406-031b2148f53a-изображение.png
          in Texture Manager: Edit -> Select All -> Relink Textures and Change your Computer Folder
          dfce640c-8327-4d59-835d-ebeef802d5b0-изображение.png
          But I don't know how to do it automatically without using the instructions above. If it’s not difficult, you can share code snippets, how you can save Project with Assets??

          I use this code to create textures:

          userPath = # My PC Folder
          theNode = c4d.BaseList2D(c4d.Xbitmap)
                      filename = # File Name 
                      if filename != None:
                          theNode[c4d.BITMAPSHADER_FILENAME] = userPath + filename
                          #theNode[c4d.BITMAPSHADER_FILENAME] = filename
          

          When I use the script the textures have the given file format:
          cb0dc176-a03e-4407-86fa-187b6c69e0af-изображение.png
          But I want to achieve this file format:
          c7d2b7b5-f4a2-444c-a3b5-2337ac579e07-изображение.png
          When manually adding a texture, this window appears:
          88f48bdb-cede-4682-9521-59981718e2dc-изображение.png
          which can regulate this, if there is a fragment to solve this problem, I will be grateful.
          Thanks for Answer, will be wait feedback.

          ferdinandF 2 Replies Last reply Reply Quote 0
          • ferdinandF
            ferdinand @Djoneeeee
            last edited by ferdinand

            Hello @djoneeeee,

            the Texture Manger is not exposed in our APIs, so you cannot use it programmatically. I lined out the procedures you must employ when you want to write something like this from the ground up and we cannot provide the starting point for your code, this must be done by you, but we will help you along the way when you have questions.

            You can invoke the Save Project with Assets ... command programmatically with c4d.documents.SaveProject(). There is also BaseDocument.GetAllTextures() which can be useful when you want to go with a more manual path.

            Cheers,
            Ferdinand

            MAXON SDK Specialist
            developers.maxon.net

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

              Hello @djoneeeee,

              without any further activity before Wednesday, the 16.03.2022, we will consider this topic as solved and remove the "unsolved" state from this topic.

              Thank you for your understanding,
              Ferdinand

              MAXON SDK Specialist
              developers.maxon.net

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