Get path to textures?

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

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)

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