Duplicating Materials

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 27/10/2011 at 11:52, xxxxxxxx wrote:

Hey guys.
I'm trying to get my head around this:
I need to duplicate Materials and keep their alpha channels and just get rid of everything else.
As I didn't find an option for just duplicating materials I just created new materials and wanted to copy the content from the active material to the new one.
I did this by using BaseList2D.GetData() and BaseList2D.SetData() -> didn't work.
So I thought of the neat BaseContainer.CopyTo() function -> the material gets duplicated, but shaders are not ... at least not in a way they are working correctly (they seem to be linked to the old material and just don't render).
Again no problem, I just duplicate the shaders. Same problem here but with an Error message:
"free render called illegaly - application stability affected"
or sometimes something about "found more than one object. try inserting one at time"
... interesting.
So my question is: is there an easy way to clone/duplicate materials AND their shaders (because only materials doesn't seem to work).
This is the last script I used:
def main() :
   oldmat = doc.GetActiveMaterial()
   newmat = c4d.BaseMaterial(oldmat.GetType())
   shd = c4d.BaseList2D(oldmat[c4d.MATERIAL_ALPHA_SHADER].GetType())
   oldmat[c4d.MATERIAL_ALPHA_SHADER].CopyTo(shd,1)
   newmat[c4d.MATERIAL_ALPHA_SHADER] = shd
   newmat.InsertShader(shd)
   doc.InsertMaterial(newmat)

if __name__=='__main__':
main()
Hopefully someone can help
thanx
Phil

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 28/10/2011 at 02:07, xxxxxxxx wrote:

You can use GetClone() to get a complete copy of a material:

import c4d
  
def main() :
   mat = doc.GetActiveMaterial()
   copy = mat.GetClone()
   
   print mat
   print mat[c4d.MATERIAL_ALPHA_SHADER]
   
   print copy
   print copy[c4d.MATERIAL_ALPHA_SHADER]
  
  
if __name__=='__main__':
    main()

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 28/10/2011 at 05:26, xxxxxxxx wrote:

Thanx a lot that's it, works like a charm.
cheers
Phil