Tuto OpenSCAD, coupleur paramétrable

Je m’essaie doucement à OpenSCAD. Si vous ne connaissez pas encore, c’est un logiciel de conception 3D paramétrique pour les gars qui ont au moins 25mm de barbe (ou les filles qui ont un minimum de 5mm de poils aux pattes).
Comparé à SolidWorks auquel je suis assez habitué, c’est… du roots!
Pour modéliser une pièce, il faut écrire un programme.

Il y a les formes de base, comme cube() ou cylinder(), des fonctions booléennes comme union() ou difference(), des fonctions de transformation, comme translate() ou rotate(). Et bien sûr beaucoup d’autres fonctionnalités que je n’ai pas testées, pour faire des révolutions, des extrusions en suivant un chemin et plein d’autres.

Vous vous souvenez de mon coupleur 5/8mm? Hé bien je l’ai refait dans OpenSCAD pour le rendre paramétrable à souhait et utilisable dans le module Customizer de Thingiverse (https://www.thingiverse.com/thing:299663).

Résultat fini

openscadcc_1

Classe, non ? Et concis, parce que le programme ne fait que 122 lignes (formaté et tout).

Après plusieurs expérimentations d’OpenSCAD, je me suis rendu compte qu’il était TRES important de travailler par modules. C’est l’équivalent des fonctions dans n’importe quel langage de programmation. Ca paermet de structurer le code, et d’éviter de se répéter (la règle fondamentale du DRY -> Don’t Repeat Yourself).

Nous allons écrire le premier module, qui va simplement dessiner le…

Cylindre principal

Facile. Dans ce module, nous appelons la fonction native cylinder(), en lui passant des paramètres nommés : h, r, center et $fn.

h est la hauteur du cylindre
r est son rayon
center indique si le cylindre doit être centré sur l’axe Z
$fn est la résolution, c’est à dire le nombre de segments qui composent le cylindre.

Pour appeler ce module, nous devrons fournir le diamètre. La hauteur et la résolution sont fixées dans des variables globales au début du programme (ils deviendront des paramètres dans le customizer de Thingiverse).

Si on appelle main_cylinder(24), nous obtenons le résultat suivant :

openscadcc_2

On peut voir que notre cylindre est automatiquement centré en X et Y, et que sa base est sur le plan Z=0.

Voici le programme complet. Comme je l’ai mis sur Thingiverse, j’ai fait les commentaires en anglais, et comme je suis une grosse feignasse, je ne les traduirai pas!

Un cylindre, c’est bien beau mais ça ne fait pas tout; il va falloir le percer.
Nous allons pour cela utiliser la fonction booléenne difference().

Perçage du cylindre principal

Créons un deuxième cylindre, de diamètre plus petit et de la même hauteur que notre cylindre principal :
[codesyntax lang= »php »]

[/codesyntax]

Si on appelle successivement

on verra toujours seulement notre cylindre principal. Le petit est « dedans ».
En revanche, si on écrit :

openscadcc_3

Voilà qui devient intéressant! Par contre on peut voir au niveau du trou que c’est assez bizarre:

openscadcc_4Ce zigouigoui est causé par une épaisseur nulle, et ça peut poser des problèmes par la suite, lors du tranchage de l’objet (facettes fantômes, normales inversées… que du bonheur…)
Alors pour éviter ça, on va juste rallonger le 2ème cylindre de 1mm en haut et en bas, et ça va aller tout de suite mieux. En plus, ça va nous permettre d’utiliser la fonction translate(), car doit rallonger la hauteur du cylindre de 2mm, et le décaler vers le bas de 1mm. Voici le programme complet:

J’appelle cette constante ozp (offset-zero-planes), et nous allons l’utiliser à plusieurs endroits par la suite.
C’est une bonne chose de prévoir ceci dès le début, comme ça on n’aura pas de surprises avec le STL par la suite.

Ce qui nous donne :

openscadcc_5

Cool! Propre et tout 🙂

Maintenant c’est pas le tout, mais nous voulons deux diamètres pour notre trou central. Nous allons écrire deux modules, qui prennent en paramètre les diamètres respectifs et qui vont percer le cylindre en haut et en bas.
On va aussi créer un module main() dans lequel les opérations de différence sont faites, ce qui nous donne le programme suivant:

Et voici le résultat (dans une vue fil de fer par en dessous, pour bien voir le décalage à l’intérieur)

openscadcc_6

Ouvertures latérales

Occupons nous maintenant de l’ouverture du côté des vis de serrage (avec dans l’idée que sa largeur devra être paramétrable dans le customizer thingiverse).

Nous allons pour cela définir un parallélépipède rectangle avec la fonction cube(), en lui donnant ses 3 dimensions.
Et nous allons décaler ce cube avec translate() pour qu’il vienne se positionner au bon endroit. On n’oublie pas le paramètre ozp pour éviter les facettes fantômes, et nous créons un nouveau paramètre opening_width (largeur de l’ouverture).

Nous allons dans la foulée réaliser la rainure en face, qui est composée d’un cylindre et d’un pavé.
Nous ajoutons le paramètre articulation_thickness, qui correspond à l’épaisseur de matière qui relie les deux parties du coupleur.

On ajoute ces deux modules dans le module main(), on sort encore quelques paramètres et voici le programme complet:

openscadcc_7

Bien! Maintenant, passons aux…

Emplacements des boulons de serrage

Pour les trous des boulons, nous allons écrire un module qui prend en paramètre la hauteur (z), et qui crée une empreinte de boulon. On calcule un offset Y pour que l’empreinte tombe au milieu de la partie pleine du coupleur. Puis on perce le trou principal (diamètre: bolt_diameter), l’empreinte de l’écrou (nut_diameter, avec une résolution de 6 segments… futé :), et enfin l’empreinte de la rondelle ou de la tête de la vis (washer_diameter).

Le module main() devient :

Résultat

openscadcc_1

Pour aller plus loin, jetez vous sur le tutoriel de RepRapide.fr!

Blender sous linux

Hey, j’ai testé hier soir Blender sous Linux, en suivant le Getting started.

Ca a l’air plutôt bien fait et utilisable, malgré le fait qu’il faille apprendre de nouveaux raccourcis clavier…

Je ne sais pas pourquoi, j’en avais le souvenir d’un logiciel hyper barbu, mais il me semble finalement accessible. A moins que ce soit ma barbe qui s’allonge…

Snapping, disions-nous

Le snapping, c’est cool. Mais c’est surtout capital pour pouvoir aligner un objet soit sur la grille, soit avec un autre objet.

On peut activer temporairement le snapping en gardant appuyées au choix la touche :

  • X (snap sur un croisement de la grille)
  • V (snap sur un sommet de poly)
  • C (snap sur une courbe de NURBS)

Le fonctionnement du snapping est intimement lié à la position du pivot de l’objet à déplacer. En effet, c’est le pivot de l’objet que l’on va coller à l’élément désiré.

Et comme le pivot, de base, se trouve au centre des objets, il faut pratiquement toujours le déplacer sur une face de l’objet, sur un de ses sommets, ou sur une arête.

Prenons un exemple : j’ai un plan tout bête et un cube complètement idiot; je veux plaquer le cube sur ce plan.

Pour faire ça, je dois d’abord descendre le pivot de mon cube sur sa face inférieure. C’est ce pivot qui sera ensuite collé au plan.

  • Je garde la touche D appuyée, pour passer en mode déplacement de pivot,
  • Je déplace un petit peu le pivot sur son axe vertical afin de contraindre le snapping sur cet axe,
  • J’appuie sur V pour dire que je veux snapper sur un sommet(vertex),
  • Je me positionne sur un vertex du bas de mon cube et je clique sur la molette de ma souris en bougeant un peu autour du vertex (c’est important)

Eeeeeet hop ! Mon pivot est descendu et il est calé pile poil sur la face inférieure du cube.

Maintenant, je veux aligner ce pivot sur le plan. Je dois snapper sur un des sommets du susdit plan…

  • Je sélectionne mon cube et passe en mode déplacement (W).
  • Je contrains le déplacement sur l’axe vertical en bougeant un petit peu le cube (l’axe devient jaune).
  • Je maintiens la touche V
  • Je clique avec la molette sur un vertex quelconque de mon plan (il faut encore une fois bouger un peu la souris pour que Maya chope le vertex)

Tac! Mon cube est maintenant parfaitement aligné avec le plan.

Bientôt des images pour illustrer ces manipulations 🙂

Chez soi…

Enfin chez soi !

Après avoir bien tripoté Solidworks et 3D studio Max il y a 8 ans, je me replonge dans les méandres de la modélisation de bâtiments. J’ai commencé ma future salle de bain sous Solidworks 2010, mais pour faire des rendus qui ressemblent à quelque chose, ben, il faut texturer. Alors j’ai réinstallé 3DS max, importé un STL généré par Solid, mais pfffff, franchement, 3DS, ça me gave. Interface vieillotte, snapping qui te fait comprendre que c’est lui qui décide, pas toi…

Alors maintenant que je suis de nouveau chaud en modélisation (non organique), je me suis dit « Ah mais tiens, et Maya, dans tout ça ? Ne serait-il pas plus simple (tout est relatif) à appréhender que 3DS Max ? »

Alors j’installe la bête (version de démo à 30 jours) et j’attaque.

L’interface, très riche mais visuellement compréhensible. Le système de snapping semble plus fiable que celui de 3DS. Par contre, pour le mapping de textures, a priori y’a du boulot.