Grasshopper et la programmation sur Rhinoceros 4: une introduction

Auteurs : Aurélie de Boissieu et François Guéna_

Plusieurs niveaux de programmation permettent de développer des codes sur Rhinoceros. Au plus haut niveau, c’est-à-dire dans le langage le plus accessible au non-spécialiste de la programmation, il y a Grasshopper qui permet de faire de la programmation visuelle. Cependant, si ce mode de programmation est facile d’accès, ces potentialités sont limitées : son fonctionnement est plus proche de la modélisation paramétrique que de la programmation algorithmique.

Grasshopper (GH) est un plugin de Rhinoceros 3D. Un plugin (encore appelé module d’extension ou module externe) est un programme complétant les fonctionnalités d’un logiciel. Le plugin GH permet de créer des modèles paramétriques sur Rhinoceros grâce à de la programmation visuelle. Un modèle paramétrique définit une géométrie dynamique où la modification de valeurs de paramètres se répercute sur l’ensemble de celle-ci.
Mais, autour de Rhinoceros, Grasshopper n’est pas seul et il existe d’autres outils de programmation permettant de définir des modèles paramétriques ou de développer de nouvelles fonctionnalités. Quelles différences existe-t-il alors entre GH et tous ces outils de programmation ?

Pluggins et niveaux de programmation dans Rhinoceros v4

Plusieurs « niveaux de programmation » sont accessibles dans Rhinoceros 3D v4 (schéma 1) à travers l’usage de différents langages. Tous les langages sont, avant ou au moment de l’exécution du programme, nécessairement traduits en langage machine (binaire, constitué de 0 et de 1) afin d’être compréhensible par le micro-processeur. Un langage est dit de bas niveau lorsqu’il est proche de ce langage « machine ». Un langage de haut niveau est, quant à lui, plus proche du langage naturel (humain). L’utilisation d’un langage de bas niveau est réservé aux « pro » de l’informatique dont c’est généralement le métier, alors que les langages de hauts niveaux sont plus accessibles aux non spécialistes.
Le cœur (ou noyau) de Rhinoceros est programmé en C++. Rhinoceros offre un kit de développement en C++ (SDK : System Development Kit) qui donne accès à l’ensemble des objets qui le composent : objets géométriques, outils de visualisation, d’interaction, etc. Avec ce SDK on peut atteindre le cœur du logiciel et développer des applications très sophistiquées. Cependant, C++ est un langage de relativement bas niveau et demande des connaissances avancées en programmation. Ainsi il requiert en particulier une gestion fine de la mémoire qui sera utilisée par le programme lors de son exécution. Son usage est donc plutôt réservé aux informaticiens.
Pour les utilisateurs non-informaticiens, McNeel (l’éditeur de Rhinoceros) met à disposition des langages de plus haut niveau permettant d’écrire de petits programmes (des scripts) qui permettent d’adapter efficacement Rhinoceros à des besoins spécifiques. Ainsi RhinoScript est un langage de programmation proche de VBScript. C’est un langage de plus haut niveau que C++ et plus simple à utiliser. Il donne accès à certains objets de Rhinoceros à travers une bibliothèque de fonctions. Ces fonctions sont par contre en nombre limité ce qui a pour effet de restreindre les possibilités de programmation. Par exemple aucune fonction n’est prévue pour accéder directement aux sommets, aux arêtes ou aux faces d’une surface ou d’un solide. Il est possible d’ajouter de nouvelles bibliothèques de fonctions accessibles par Rhinoscript, mais dans ce cas il faut revenir à du C++.

Pour accéder à la plupart des objets internes de Rhinoceros sans utiliser C++, Mc Neel offre un autre kit de développement « enveloppant » le kit C++ : Rhinoceros SDK .NET. Ce dernier permet l’utilisation de langages de plus haut niveau que C++ comme VB. NET ou C#. NET . Ces langages sont à peine plus compliqués que RhinoScript et donc à la portée d’utilisateurs, aguerris certes, mais non nécessairement informaticiens de métier.

Niveaux de programmation sur Rhinoceros 3D
Aurélie de Boissieu et François Guéna, sous licence CC by

Cependant, quelque soit ces langages, leur usage nécessite une compétence en algorithmique et dans les techniques de base de la programmation informatique. C’est pourquoi McNeel propose également aux utilisateurs de Rhinoceros un outil de programmation visuelle ne nécessitant l’usage d’aucun langage de programmation : le Plugin Grasshopper.

Interface de Grasshopper et prévisualisation de la géométrie sur Rhinoceros.
Aurélie de Boissieu et François Guéna, sous licence CC by

Qu’est ce que la Programmation visuelle ?

La programmation visuelle (ou programmation graphique) est un langage de programmation procédant d‘éléments à assembler. Ces éléments, généralement représentés par des symboles graphiques rectangulaires « encapsulent » du code, c’est-à-dire des fonctions ou des sous-programmes. En programmation l’encapsulation est une méthode permettant de protéger un fragment de code. Un code encapsulé fonctionne tel-quel, il ne peut être modifié. Pour l’utilisateur, ces éléments sont des « boites noires » effectuant un traitement dont on ne connaît que le type des données demandées en entrées et produites en sorties. Avec la programmation visuelle, le programmeur construit un code en reliant les entrées et sorties de ces boîtes. On obtient alors un graphe dont les nœuds expriment les traitements à effectuer par le programme et les arcs (ou liens) le flot des données. Le programme est exécuté en parcourant le graphe. Une modification de donnée d’entrée du graphe entraine une nouvelle exécution du programme.
Ce mode de programmation est relativement simple. Le code étant encapsulé dans les nœuds du graphe, il n’y a pas de risque d’erreur de syntaxe. Aucune connaissance sur les structures de contrôles et plus généralement en algorithmique n’est requise. La programmation visuelle est donc un outil de programmation utilisable par des « programmeurs amateurs », c’est-à-dire par des acteurs dont la programmation n’est pas le métier. C’est par exemple le cas de Pure Data, développé depuis 1988. Ce logiciel est un environnement de programmation pour la création musicale et multimédia en temps réel.

Programmation graphique sur Pure Data. Crédit : Pure Data par codelab

Grasshopper fonctionne de cette manière. Des « boites » (composantes ou params) sont proposées à l’utilisateur. Des « fils » peuvent être ensuite tissés par le programmeur improvisé pour créer des liens entre les composants et ainsi organiser le flux de données et son traitement.
Les modèles développés sur Grasshopper sont visualisables au moyen de l’interface graphique de Rhinoceros. Contrairement à la programmation avec Rhinoscript qui crée des objets « instanciés » définitif dans la scène Rhinoceros, Grasshopper crée des prévisualisations d’instances. Une « instance » d’objet est le cas particulier, définitif d’un modèle paramétrique. En programmation orientée objet, une instance est le cas d’une classe. Pour obtenir un objet définitif à partir d’un modèle paramétrique sur la scène Rhinoceros, le modèle doit être « cuit » (fonction bake).

Limites de la programmation visuelle

Par rapport à Rhinoscript, Grasshopper ne permet pas d’inclure de récursivité dans un modèle. En effet, dans un modèle Grasshopper, les entrées sont traitées jusqu’à obtenir un certains nombre de sorties. Ce « traitement » est linéaire et dirigé : le graph est dit acyclique (il ne fait pas de cycle). Or inclure de la récursivité, c’est faire une boucle : une sortie doit pouvoir être alors traitée plusieurs fois suivant les mêmes instructions (comme pour créer une fractale par exemple, schéma 2A). Ce n’est pas possible sur Grasshopper: une sortie ne peut être utilisée en entrée pour le même traitement (schéma 2B). Pour que se soit possible, il faut soit « copier » le traitement pour l’appliquer plusieurs fois (voir schéma 2C), soit inclure un élément de programme (en VB ou en C#) dans le modèle.

Grasshopper utilise un langage de programmation graphique qui, pour être simple et rapide d’utilisation, possède de nombreuses limites. Ainsi il ne permet pas de faire de boucles. De plus dès qu’un modèle GH se complexifie, il prend le syndrome « plat de nouilles » et devient illisible.

Schéma 2 : La récursivité dans Grasshopper (A : l’exemple du triangle de Sierpinsky, B : un graph sur GH étant acyclique, les boucles ne sont pas possibles, C : Pour avoir un effet de récursivité il faudrait copier le traitement et l’inclure au graph plusieurs fois.
Aurélie de Boissieu et François Guéna, sous licence CC by

 

Finalement le caractère acyclique des codes de Grasshopper, s’il facilite le travail de programmation, réduit les potentialités de représentation des codes. Il semble qu’en ce sens, Grasshopper soit plus un moteur de modélisation paramétrique que de modélisation algorithmique.

Richesse de Grasshopper : la communauté de développeurs

Cependant toutes ces limites sont peu à peu repoussées par des développements par la communauté de codes ou pluggins pour Grasshopper. Ceux-ci prennent la forme de codes encapsulés ou de composants à ajouter, faciles à utiliser, et étendant les fonctionnalités de GH.
Par exemple HoopSnake permet aujourd’hui de faire des boucles. Et firefly permet l’interopérabilité de GH avec Arduino et divers protocoles d’échanges (OSC, UDP) de façon simple.

 

Pour citer cet article

Aurélie de Boissieu et François Guéna, « Grasshopper et la programmation sur Rhinoceros 4: une introduction », DNArchi, 01/02/2012, <http://dnarchi.fr/outils/grasshopper-et-la-programmation-sur-rhinoceros-4-une-introduction/>

 

Références
http://scratch.mit.edu/
http://www.siteduzero.com/
http://www.fireflyexperiments.com/
http://www.volatileprototypes.com/projects/hoopsnake/

 

About author
Aurélie est doctorante en Architecture au MAP-MAACC depuis 2009. Ses recherches portent sur les usages de la modélisation paramétrique en architecture. Dans le cadre de ses recherches, elle enseigne également Grasshopper et la géométrie des projections à l'Ecole Nationale Supérieure de Paris-La Villette.
1 comment on this postSubmit yours
  1. Merci pour cet article (que j’ai trouvé depuis http://www.rhino4you.com/1/grasshopper_326673.html). J’ai beaucoup apprécié le parallèle que vous effectuez avec des applicatifs comme Pure Data. J’ai appris en outre qu’avec Firefly on pouvait bénéficier de l’interopérabilité avec Arduino.
    Bonne continuation.

1 pingback on this post
Submit your comment

Please enter your name

Your name is required

Please enter a valid email address

An email address is required

Please enter your message

Licence Creative Commons
Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage à l'Identique 2.0 France.
Designed by WPSHOWER
Powered by WordPress
Image de fond: Taichi SUNAYAMA www.whiteweekendkites.com