document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!BPY
  2. """
  3. Name: \'Material by Element\'
  4. Blender: 262
  5. Group: \'Material\'
  6. Tooltip: \'Material by Element\'
  7. """
  8.  
  9. import bpy
  10. import random
  11. import string
  12.  
  13.  
  14. print("MaterialByElement:")     #to test output...
  15.  
  16. scena = bpy.context.scene       #active scene
  17. contesto = bpy.context          #context
  18.  
  19. N=8    #n. of material you want to be created
  20. K=40   #KAOS - N*5 gives more contrast - N*20 is regular
  21.  
  22. MATNAME="MatByEl_"      #this constant will be use to choose materials\' name
  23.  
  24. #put here RGB values of main color:
  25. #(N is calculated here do not recalcute it every time
  26. r=0.2    #R
  27. g=0.01   #G
  28. b=0.02   #B
  29.  
  30. i = 0                           #reset counter
  31.  
  32. mats=bpy.data.materials
  33.  
  34. obj=scena.objects.active                #makes it active
  35. objName=obj.name[0:obj.name.find(\'.\')]  #take the first part of object\'s name
  36.                                         #blender usually give a name to the separated part
  37.                                         #taking "name"+"."+progressive number
  38. bpy.ops.object.editmode_toggle()        #enters in edit mode
  39. bpy.ops.mesh.separate(type=\'LOOSE\')     #separate it by loose parts
  40. bpy.ops.object.editmode_toggle()        #exit edit mode
  41.    
  42.  
  43. #unlink all materials and deletes them
  44. for matter in mats:
  45.     m_name=matter.name
  46.     if m_name.find(MATNAME) != -1:
  47.         print(m_name+" deleted")            #for debugging purposes
  48.         matter.user_clear()                 #unlink
  49.         bpy.data.materials.remove(matter)   #remove "matter" from materials slot
  50.     i+=1
  51.  
  52. i=0                             #reset counter
  53.  
  54. #creates new material set
  55. for i in range(0,N):
  56.     k=bpy.data.materials.new(MATNAME+"_"+str(i))
  57.     #this is to have more difference between objects
  58.     if i%2==0:
  59.         k.diffuse_color=(r+(i/K), g+(i/K), b+(i/K))
  60.     else:
  61.         k.diffuse_color=(r-(i/K), g-(i/K), b-(i/K))
  62.    
  63. matter=bpy.data.materials   #gets material list
  64.  
  65. bpy.ops.object.select_pattern(pattern=objName+"*", case_sensitive=True, extend=True)
  66.  
  67.  
  68. for obj in contesto.selected_objects:                       #for every object in selection
  69.     scena.objects.active = obj                              #makes it active
  70.     for mat in obj.material_slots:
  71.         bpy.ops.object.material_slot_remove()               #remove all materials
  72.     bpy.ops.object.material_slot_add()                      #add ONE material
  73.     obj.data.materials[0]=matter[random.randrange(0,N-1)]   #assign one of the N materials
');