vers l'index général de l'aide / vers l'index des directives

  Macro

Objectif

Créer une fonction, une procédure, un module, complexe ou pas, qui sera paramétrable à chaque appel.

Cette macro pourra donner, en sortie, une forme, un nombre, une texture, ou un objet complexe, arbre, bibliothèque, fenêtre, herbe, lens flare, engrenage hélicoïdal, etc...

Compatibilité

POV-Ray 3.1+sup.

Explication

Une macro est un ensemble, plus ou moins complexe, de commandes éventuellement "nourries" de paramètres spécifiés au moment ou la macro sera invoquée dans le script.

L'usage des macros permet de simplifier les scripts et de réaliser des opérations complexes inimaginables autrement. Une fois la macro écrite, elle pourra être réemployée indéfiniment par un simple appel. Les macros ont fait avancer POV-Ray un peu plus vers le monde de la programmation et certains problèmes ne sont solubles qu'à l'aide de macros.

Il est utile de connaître les variables locales, lorsqu'on crée des #macros.

Syntaxe

Création -

// nom de la macro avec nom des paramètres
#macro Ma_Macro (Parametre_1,...,Parametre_n)

// développement de la macro
	blabla Parametre_1		//appel des paramètres
	.../....
	blabla Parametre_n
#end

Appel - On donne des valeurs concrètes aux paramètres. (Parametre_1,...,Parametre_n)

Ma_Macro(5,..,2)

Exemple

Création de la Macro avec 5 paramètres

 
	// déclaration de la macro avec nom des paramètres

#macro Faire_Fenetre (Largeur_Ext, Hauteur_Ext, Largeur_Int, Hauteur_Int, Profondeur)

	// développement de la macro avec appel des paramètres

	#local Horz = (Hauteur_Ext - Hauteur_Int)/2;
	#local Vert = (Largeur_Ext - Largeur_Int)/2;
	difference{
		box{<0,0,0>,<Largeur_Ext,Hauteur_Ext,Profondeur>}
		box{<Vert,Horz,-0.1>,<Largeur_Ext-Vert,Hauteur_Ext-Horz,Profondeur+0.1> }
		translate <-Largeur_Ext/2,-Hauteur_Ext/2,0> // pour centrer
	}

#end

Appel de la Macro

Faire_Fenetre(5,5,4,4,15) // appelle la macro avec passage des paramètres

object {Faire_Fenetre(5,5,3,3,1) pigment {Red} } // ou bien pour avoir un pigment

union  {
        Faire_Fenetre(5,5,1,1,1) pigment {Blue} // une autre manière
        object {...}
        ...
        }

Faire_Fenetre(5,5,3,3,1) Fenetre(5,5,3,3,1) Faire_Fenetre(5,5,1,1,1) Fenetre(5,51,1,1)

auteur : Martial Rameaux