Set Texture by script
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 27/10/2011 at 06:32, xxxxxxxx wrote:
Use
doc.SearchMaterial(name)
to find a material by name.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 01:41, xxxxxxxx wrote:
Thanks to all. I solved the problem. Here is my final script:
import c4d from c4d import gui from c4d import storage import os #Welcome to the world of Python myMaterials = doc.GetMaterials() fileExtension = ".jpg" def main() : pathToTextures = c4d.storage.LoadDialog(0,"Texturpfad wählen",2) for mat in myMaterials: name = mat.GetName() # arrange the new name by replacing # every `_group` with just nothing ``. textureName = name # arrange the new name by replacing # every `_group` with just nothing ``. textureName = name.replace( "material_", "texture_" ) # concetenate the path to textures with the name # of the texture # we use `os.path` because it adapts the operating # systems way to deal with pathnames fullPath = os.path.join( pathToTextures, textureName ) # we need the original texturename, so we add the # file extension now fullPath = fullPath + fileExtension # check if the texture exists if not os.path.exists( fullPath ) : # tell that the object could not be associated # with a texture print "Texture could not be found:", fullPath else: # create a shader for the material sha = c4d.BaseList2D(c4d.Xbitmap) sha[c4d.BITMAPSHADER_FILENAME] = fullPath mat.InsertShader( sha ) mat[c4d.MATERIAL_COLOR_SHADER] = sha # update the material mat.Message( c4d.MSG_UPDATE ) mat.Update( True, True ) # update the Cinema 4D UI c4d.EventAdd() # tell that the processing was finished print "Finished processing." gui.MessageDialog("Finished processing.") if __name__=='__main__': main()
But there are two new questions.
1. If I look into the documentation the function GetMaterials is in the namespace c4d.documents.BaseDocument. But if I use this namespace the command could not be found. Why and from where I can know the namespace doc? I got it from the script above.2. In the documentation for the command LoadDialog is written about constants like FILESELECT_DIRECTORY. But it isn't known by the interpreter. Where are they defined and what I have to import that it works?
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 02:43, xxxxxxxx wrote:
1. c4d.documents.BaseDocument isn't a namespace, it's a class representing a C4D document. To get the current document as doc:
from c4d import documents ... doc = documents.GetActiveDocument()
2. FILESELECT_DIRECTORY and all the constants are defined in the c4d namespace : for example c4d.FILESELECT_DIRECTORY.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 04:46, xxxxxxxx wrote:
As you see in my sourcecode I have never declared doc but it works. Is it declared implicit? I've found nothing in the documentation about it.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 05:11, xxxxxxxx wrote:
Originally posted by xxxxxxxx
As you see in my sourcecode I have never declared doc but it works. Is it declared implicit? I've found nothing in the documentation about it.
Yes, everywhere in the code, 'doc' is the current document and 'op' is the current activate object. I'll add this to the docs.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 05:18, xxxxxxxx wrote:
You don't seem to understand that I have written the code above just for you, and not just because I'm so bored. I don't think many other people would have done this for you.
At least some sort of thank you in your second post would have been appropriate rather than to complain it is not exactly the way you need it. -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 06:20, xxxxxxxx wrote:
Originally posted by xxxxxxxx
You don't seem to understand that I have written the code above just for you, and not just because I'm so bored. I don't think many other people would have done this for you.
At least some sort of thank you in your second post would have been appropriate rather than to complain it is not exactly the way you need it.I think you posted the code in the wrong topic...
The topic about finding a material by name is this one : https://developers.maxon.net/forum/topic/6087/6267_texture-change-python -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 06:20, xxxxxxxx wrote:
As you can see I used the most of your script in my solution. The only difference is that I had already materials and would like to edit them and the dynamic selection of the texture path.
Many thanks for your script Without it I wasn't able to solve the problem.I'm sorry, if it seems that I'm not thankful to you.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/10/2011 at 06:33, xxxxxxxx wrote:
Originally posted by xxxxxxxx
I think you posted the code in the wrong topic...
The topic about finding a material by name is this one : https://developers.maxon.net/forum/topic/6087/6267_texture-change-pythonSorry, I didn't understand your previous post but the code you posted later was quite confusing :
https://developers.maxon.net/forum/topic/6085/6265_set-texture-by-script -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 01/11/2011 at 23:41, xxxxxxxx wrote:
I'm sorry. My reply applies to the post from nux95.
Originally posted by xxxxxxxx
You don't seem to understand that I have written the code above just for you, and not just because I'm so bored. I don't think many other people would have done this for you.
At least some sort of thank you in your second post would have been appropriate rather than to complain it is not exactly the way you need it.