/************************************************/
/* Olivier BODO : Object_Name_To_Material.ms 	*/
/* Version : 1.0								*/
/*												*/
/* - crée un matériau unique par objet en     	*/
/* en fonction de l'xistant ou de la couleur	*/
/* d'interface.									*/
/* - copie le nom de l'objet dans le matériau	*/
/* - prise en compte des layers, groupes et 	*/
/* multi-sous objets.							*/
/* - passe les matériaux en double face			*/
/* - conserve les textures et les opacités		*/
/************************************************/

animButtonState = false

-- affiche les layers cachés
unhide $* dolayer:true
-- selectionne tous les objets
-- select $*
-- on scanne les objets...

for o in objects
do 
(
	-- on ouvre les eventuels groupes
	if isgroupHead o
		then setGroupOpen o true						-- on ouvre si groupe
		else -- on crée des nouveaux matériaux par objet et on les renomme
		(		
			if (ClassOf o) == Particle_View
			then 
			(
				delete o
				messageBox " une Vue Particule supprimée !!!"
			)
			else
			(
				meditMaterials[1] = Standardmaterial () 		-- nouveau matériau STD dans slot 1 de l'éditeur
				if o.material != undefined						-- s'il y a déja un matériau
				then 
				(
					if classof o.material != Multimaterial	-- si ce n'est pas un multisousobjet
						then 
						(
							meditMaterials[1].diffuse=o.material.diffuse 	-- copie de la couleur originale dans nouveau
						
							if o.material.diffuseMap != undefined			-- si il y a une texture
								do meditMaterials[1].diffuseMap=o.material.diffuseMap -- on la copie
						
							meditMaterials[1].opacity=o.material.opacity	-- en cas de transparence
							meditMaterials[1].twoSided=true
							meditMaterials[1].shaderType = o.material.shaderType
							meditMaterials[1].ambient = o.material.ambient
							meditMaterials[1].Glossiness = o.material.Glossiness
							meditMaterials[1].specular = o.material.specular
							meditMaterials[1].specularLevel = o.material.specularLevel
							meditMaterials[1].soften = o.material.soften

							o.material = meditMaterials[1] 					-- nouveau matériau sur objet
						
							if meditMaterials[1].diffuseMap != undefined
							do showTextureMap meditMaterials[1] meditMaterials[1].diffuseMap on
						)
						else 
						(
							-- on copie le multisub dans le slot 1
							
							meditMaterials[1] = multiMaterial numsubs:o.material.numsubs
							
							-- on copie les sous-matériaux
							
							for i = 1 to meditMaterials[1].numsubs
							do 
							(
								meditMaterials[1][i].diffuse = o.material[i].diffuse
								meditMaterials[1][i].opacity = o.material[i].opacity
								meditMaterials[1][i].twoSided=true
								meditMaterials[1][i].shaderType = o.material[i].shaderType
								meditMaterials[1][i].ambient = o.material[i].ambient
								meditMaterials[1][i].Glossiness = o.material[i].Glossiness
								meditMaterials[1][i].specular = o.material[i].specular
								meditMaterials[1][i].specularLevel = o.material[i].specularLevel
								meditMaterials[1][i].soften = o.material[i].soften
								
								if o.material[i].diffuseMap != undefined			-- si il y a une texture
								do meditMaterials[1][i].diffuseMap=o.material[i].diffuseMap -- on la copie
							)
								
							meditMaterials[1].name = o.name
							
							-- renommage des sous-matériaux
							
							i = 1
							
							while ( i < 10 and i <= (meditMaterials[1].numsubs) ) -- pour les 10 premiers sous matériaux
							do 
							(
								meditMaterials[1][i].name = o.name + "-0" + i as string -- on rajoute un "O" au nom
								
								if meditMaterials[1][i].diffuseMap != undefined
								do showTextureMap meditMaterials[1][i] meditMaterials[1][i].diffuseMap on -- on affiche la texture diffuse
																
								i += 1			-- on passe au sous-matériau suivant
								
								--print meditMaterials[1].materialList[i].name
							)
							
							while i <= (meditMaterials[1].numsubs) -- les sous matériaux suivants
							do 
							(
								meditMaterials[1][i].name = o.name + "-" + i as string -- on renomme
								meditMaterials[1][i].twoSided=true
							
								if meditMaterials[1][i].diffuseMap != undefined
								do showTextureMap meditMaterials[1][i] meditMaterials[1][i].diffuseMap on -- on affiche la texture diffuse
							
								i += 1			-- on passe au sous-matériau suivant
							)
							
							o.material = meditMaterials[1] -- on réapplique le sous-matériau
							
							i = 1 -- réinitialise le compteur pour le prochain sous matériau
						)
				)
				else 
				(
					meditMaterials[1].diffuse=o.wirecolor			-- copie de la couleur d'objet dans le nouveau matériau
					o.material = meditMaterials[1] 					-- nouveau matériau sur objet
				)
			
				o.material.name=o.name 							-- copie du nom de l'objet dans le materiau
			)
		)
)
	
-- et on referme tous les groupes ouverts
for o in objects
	do
		if isGroupHead o
			do setGroupopen o false		

	

