vers l'index général de l'aide

  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.

Utilité

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 peut être utile de connaître les variables locales.

Syntaxe

  1. 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
    
  2. 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)
Faire_Fenetre(5,5,1,1,1)
Fenetre(5,5,3,3,1)
Fenetre(5,51,1,1)


exemples particuliers

Pour vous mettre le pied à l'étrier, voici une série de macros qui font la démonstration des usages les plus évidents de cette fonctionnalité.

  1. objets particuliers
  2. fonctions (la macro retourne une valeur)
  3. récursivité (la macro s'appelle elle-même)

remarque

Si vous définissez vos macros dans un fichier séparé, à inclure dans votre script principal, sachez que l'utilisation d'une extension ".mcr" est un usage qui tend à s'imposer parmi les utilisateurs de POV-Ray.

auteur : Martial Rameaux