Presentation openscad : Etape 3

De Wiki du ThiLab

Etape 3 : la fonction de minkowski

Pour cette etape, nous allons ajouter l'element suivant aux elements deja crees (notez les arretes arrondies) :

Pour pouvoir realiser cet objet, nous allons utiliser la fonction minkowski() de openscad. Cette fonction correspond a une somme de minkowski entre 2 objets.

A quoi correspond une somme de minkowski ? Elle correspond a la trace d'un balayage du premier objet par le second.

Prenons un cas simple en deux dimensions pour illustrer visuellement cette somme. Supposons que le premier objet soit :

et que le second objet soit :

Le second objet va balayer la surface du premier objet :

ce qui va entrainer une surface de balayage pour chaque point, qui misent bout a bout, vont entrainer une surface de balayage globale :

C'est l'union de ces surfaces de balayage qui ca donner l'objet correspondant a la somme de minkowski des 2 objets de depart :

Revenons a la generalisation en 3D de la somme de minkowski qui nous interesse. Nous avons simplement besoin d'un cube et d'un cylindre qui ira balayer le volume du cube.

Telle l'union ou l'intersection, le code va comprendre la mention de la fonction minkowski() suivi d'accolades contenant les 2 objets utilises pour la somme :

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

Il conviendra de deplacer le l'objet creer pour qu'il soit a l'emplacement attendu (sous l'objet cree a l'etape 2). Notez que la hauteur du cube est de 20, mais la hauteur de l'objet obtenu est de 21, car le cylindre balayant le volume du cube est de hauteur 1. Pour ce deplacement, la fonction translate() peut etre placee a plusieurs endroits equivalents :

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

pour deplacer tout l'objet,

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

pour deplacer le cube generant l'objet ou meme :

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

pour deplacer la surface de balayage du cylindre par rapport au cube.

Resultat de l'etape 3

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

$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);
		}
}

Ce qui nous donne cet objet :