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

    Get path to textures?

    Scheduled Pinned Locked Moved PYTHON Development
    3 Posts 0 Posters 202 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 16/09/2014 at 09:22, xxxxxxxx wrote:

      Hello mates.

      I am woundering how i can get the texture path(s) & filename(s) from the selected material.
      im trying to return a list containing the path+filename foreach channel in the material.
      Anyone got an idea how i can do this ?

      filename = texture[c4d.MATERIAL_COLOR_SHADER][c4d.BITMAPSHADER_FILENAME]

      will only reurn the filename, but i need full path + filename
      i tried my luck on c4dcafe, but no one seems to know this.

      Thanks

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

        On 16/09/2014 at 09:58, xxxxxxxx wrote:

        You will have to get the document path and add it to your filename. This should do what you want.

        filename = texture[c4d.MATERIAL_COLOR_SHADER][c4d.BITMAPSHADER_FILENAME]
        dPath = doc.GetDocumentPath()
          
        print (dPath+"	ex"+filename)
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 16/09/2014 at 10:50, xxxxxxxx wrote:

          Hi and thanks for your reply.
          however im not getting that to work. it only errors on me with.

          NameError: global name 'doc' is not defined

          This is my plugin code.
          ****************************************************

            
          import c4d  
          import os  
          from c4d import documents, gui, plugins, bitmaps  
            
          PLUGIN_ID = 1011310  
            
          class MyDialog(gui.GeDialog) :  
             def CreateLayout(self) :  
               self.SetTitle("My Plugin")  
               self.GroupBegin(id=1013,  flags=c4d.BFH_SCALEFIT,cols=2, title="Texture")  
               self.GroupBorder(c4d.BORDER_GROUP_IN)  
               self.GroupBorderSpace(10, 15 ,10 , 5 )  
               self.AddStaticText(id=1003, flags=c4d.BFH_LEFT, name=" Drag the Material here:")  
               self.linkbox = self.AddCustomGui(3000, c4d.CUSTOMGUI_LINKBOX, "", c4d.BFH_SCALEFIT|c4d.BFV_SCALEFIT,0 ,0)  
               self.GroupEnd()  
               self.GroupBegin(id=1013,  flags=c4d.BFH_SCALEFIT,cols=1, title="Channels")          
               self.GroupBorder(c4d.BORDER_GROUP_IN)  
               self.GroupBorderSpace(10, 15 ,10 , 5 )          
               self.AddCheckbox(2001, c4d.BFH_LEFT, 0, 0, 'Color Channel')  
               self.AddCheckbox(2002, c4d.BFH_LEFT, 0, 0, 'Specular Channel')  
               self.AddCheckbox(2003, c4d.BFH_LEFT, 0, 0, 'Normal Channel')  
               self.GroupEnd()  
               return True  
                 
            def Command(self, id, msg) :  
                  
                # Check if its the id of the link box  
                if id == 3000:  
                      
                    tex = self.linkbox.GetLink()  
                      
                    # check if the link box obj is a material  
                    if tex is None or tex.GetType() != 5703:  
                        gui.MessageDialog("No Texture selected")  
                        return -1  
                      
                    else:  
                        filename = tex[c4d.MATERIAL_COLOR_SHADER][c4d.BITMAPSHADER_FILENAME]  
                        #dPath = doc.GetDocumentPath()  
            
                      
                return True  
            
          class MyPlugin(plugins.CommandData) :  
            dialog = None  
              
            def Execute(self, doc) :  
                # Create main dialog  
                if self.dialog is None:  
                    self.dialog = MyDialog()  
                return self.dialog.Open( dlgtype = c4d.DLG_TYPE_ASYNC, pluginid=PLUGIN_ID, defaultw=450, defaulth=200, xpos=-1, ypos=-1)  
            
          if __name__ == "__main__":  
            path, fn = os.path.split(__file__)  
            bmp = bitmaps.BaseBitmap()  
            bmp.InitWith(os.path.join(path, "res/icons", "icon.tif"))  
            
            okyn = plugins.RegisterCommandPlugin(PLUGIN_ID, "MY Plugin", 0, bmp , "OSM", MyPlugin())  
            if okyn:  
                print "MyPlugin started"   
          

          EDIT:
          i got it to work. i had to include this.

            
          doc = c4d.documents.GetActiveDocument()  
          dPath = doc.GetDocumentPath()  
          

          Altho i dont like this method since one have to know the name of the texture dir.
          Making the plugin useless on projects where textures are not saved in a common dir, Ie: tex

          but anyway. thanks for your help

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