Presentation openscad : Etape 5

De Wiki du ThiLab

Retour a la presentation

Etape 5 : les modules et les bibliotheques

Pour cette etape, nous allons garder les memes elements mais ameliorer la lisibilite du code.

Pour commencer, nous allons utiliser un module. Un module est un objet definit par l'utilisateur dont il pourra se resservir sans avoir a retaper le code complet.

Reprenons l'exemple du polyedre :

translate([-15,-15,-45]) polyhedron(points=[[0,0,20],[0,30,20],[30,30,20],[30,0,20], [-10,-10,0],[-10,40,0],[40,40,0],[40,-10,0]], triangles=[[0,1,2],[2,3,0], [1,0,4], [4,5,1], [5,6,1],[1,6,2],[2,6,7],[2,7,3],[3,7,4], [4,0,3], [4,6,5],[6,4,7]]);

Supposons que nous voulions construire un objet avec 2 de ces polyedres. En utilisant les informations apprises jusqu'a cette etape, nous devons taper le code suivant :

translate([-15,-15,-15]) polyhedron(points=[[0,0,20],[0,30,20],[30,30,20],[30,0,20], [-10,-10,0],[-10,40,0],[40,40,0],[40,-10,0]], triangles=[[0,1,2],[2,3,0], [1,0,4], [4,5,1], [5,6,1],[1,6,2],[2,6,7],[2,7,3],[3,7,4], [4,0,3], [4,6,5],[6,4,7]]);
translate([-15,-15,-45]) polyhedron(points=[[0,0,20],[0,30,20],[30,30,20],[30,0,20], [-10,-10,0],[-10,40,0],[40,40,0],[40,-10,0]], triangles=[[0,1,2],[2,3,0], [1,0,4], [4,5,1], [5,6,1],[1,6,2],[2,6,7],[2,7,3],[3,7,4], [4,0,3], [4,6,5],[6,4,7]]);

Ce qui donnera les 2 polyedres comme attendu :

Nous voyons que beaucoup de code est repete de facon inutile. Creons donc un module pour cet objet. Le module permettra egalement de nomer l'objet afin de mieux le reutiliser plus tard. Pour creer un module, openscad possede le mot clef module dont il faut faire suivre le nom du module, puis entre accolades, l'objet composant ce module :

module  tower_base()
{
      polyhedron(points=[[0,0,20],[0,30,20],[30,30,20],[30,0,20], [-10,-10,0],[-10,40,0],[40,40,0],[40,-10,0]], triangles=[[0,1,2],[2,3,0], [1,0,4], [4,5,1], [5,6,1],[1,6,2],[2,6,7],[2,7,3],[3,7,4], [4,0,3], [4,6,5],[6,4,7]]);
}

Si nous essayons de compiler ce code, il ne donnera aucun objet. En effet le module sert a definir l'objet et non a l'utiliser. Pour l'utiliser, il faut le specifier dans le code, comme tout objet de base :

tower_base();

Le code pour les 2 polyedres s'ecrira donc :

module  tower_base()
{
      polyhedron(points=[[0,0,20],[0,30,20],[30,30,20],[30,0,20], [-10,-10,0],[-10,40,0],[40,40,0],[40,-10,0]], triangles=[[0,1,2],[2,3,0], [1,0,4], [4,5,1], [5,6,1],[1,6,2],[2,6,7],[2,7,3],[3,7,4], [4,0,3], [4,6,5],[6,4,7]]);
}

translate([-15,-15,-15]) tower_base();
translate([-15,-15,-45]) tower_base();

Resultat de l'etape 5

Le code apres l'etape 5 est donc le suivant :

use <openscad_course_tower.scad>

$fn=60;


union()
{
	intersection()
	{
		translate([-10,-10,-10]) cube([20,20,20]);
		sphere(r=12);
	}

	cylinder(r=7.5, h=20);

	minkowski()
	{
		translate([-10,-10,-25]) cube([20,20,20]);
		cylinder(r=2,h=1);
	}

	translate([-15,-15,-45]) tower_base();
}

Un nouveau fichier appele openscad_course_tower.scad contient le code suivant :

module tower_base()
{
	polyhedron(points=[[0,0,20],[0,30,20],[30,30,20],[30,0,20], [-10,-10,0],[-10,40,0],[40,40,0],[40,-10,0]], triangles=[[0,1,2],[2,3,0], [1,0,4], [4,5,1], [5,6,1],[1,6,2],[2,6,7],[2,7,3],[3,7,4], [4,0,3], [4,6,5],[6,4,7]]);
}

tower_base();

Ce qui nous donne cet objet :

Retour a la presentation