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: texbut anyway. thanks for your help