Aller au contenu

Filament ABS

Yo'

blender [TUTO] La 3D en ligne de commande

Messages recommandés

Bonjour,

 

Étant plus agile avec un clavier qu'avec une souris, et ayant découvert la capacité de créer des figures avec des lignes de commande en python3 sous blender, j'ai décidé de créer une bibliothèque afin de me faciliter la tache et de rendre le code plus lisible.

 

Préambule : j'utilise Lubuntu 16.04 et je pense que ça devrait fonctionner sur tous les OS, sauf les parties spécifiques comme l'installation.

 

Premièrement : installer blender :

sudo apt-get install blender

 

Deuxièmement : lancer blender

Personnellement, j'ouvre une console et je lance la commande

blender

 

lancer blender de cette manière permet d'avoir un retour sur les commandes envoyées car dans blender, tous n'est pas retranscrit

 

Troisièmement : affichage du nécessaire pour faire du code. (du code :17_heart_eyes::17_heart_eyes: )

2017-11-23-210231_2560x1024_scrot.thumb.png.866f8213586c561218d1fdb686399dcc.png2017-11-23-210314_2560x1024_scrot.thumb.png.797ba3b1e2ee0623743c10d7a2fe3658.png2017-11-23-210350_2560x1024_scrot.thumb.png.6a4967f9a7c63d63a54e51d39621174a.png2017-11-23-210800_2560x1024_scrot.thumb.png.f4477c3975ffbe714e4f83e93376bc21.png

 

Une fois le poste de travail mis en place, il faut installer le fichier que j'ai crée. C'est du python3:

fonctionsLocales.py

 

A installer dans où vous voulez, du moment qu'il est accessible.

 

Voici un extrait:

def cylindre(bpy):
	bpy.ops.mesh.primitive_cylinder_add(location = (0, 0, 0))


def tore(bpy, diametre):
	bpy.ops.mesh.primitive_torus_add(location = (0,0,0), minor_radius = diametre)


def cone(bpy, diametre):
	bpy.ops.mesh.primitive_cone_add(radius2 = diametre, location = (0, 0, 0))


def sphere(bpy):
	bpy.ops.mesh.primitive_uv_sphere_add(location = (0, 0, 0))

 

Maintenant, passons à l'amusement:

Cliquez sur newnew.jpeg.a1d48fee56af3f69b4ac0116e1561f1f.jpeg

 

Puis recopier le texte qui suit, en indiquant à la ligne 3, le chemin pour accéder au dossier contenant le fichier  "fonctionsLocales.py"  (Y'a pas d'espace et c'est normal. Les espaces, c'est le mal >:( )

import bpy
import sys
sys.path.append("/home/lionel/blender/routines")

from bpy import context as C
import fonctionsLocales as f

f.RAZ(bpy)

f.cylindre(bpy)
base = C.object
C.object.name = "base"
f.resize(bpy, 4.6, 4.6, 1)

nbDents = 5

for i in range(nbDents):
    f.cube(bpy)
    C.object.name = "cube" + str(i)
    f.resize(bpy, 0.5, 0.5, 1)
    f.translate(bpy, 2.5, 0, 0)
    f.couleur(bpy, 0, 1, 0)

    f.jonction(bpy, ["base", "cube" + str(i)])

    f.rotate(bpy, 3.14 * 2 / nbDents, 0, 0, 1)

 

Ensuite, cliquez sur run.jpeg.c2a7b1505d80f8718afb66e197b1a5a9.jpeg

 

Si vous avez un message d'erreur, sauvegardez votre travail, (en haut à gauche), coupez blender et relancez le.

Je ne sais pour quelle raison, les modifications apportées au fichier fonctionsLocales.py ne sont prisent en compte qu'au lancement de blender.

 

Dézoomez et voici le résultat:

2017-11-23-212820_2560x1024_scrot.thumb.png.c53f81d5c72bdaebd0cfe5a55cf2d04a.png

 

Il n'y a pas assez de dents ? modifiez la valeur nbDents.

ici, 15 dents :

2017-11-23-213011_2560x1024_scrot.thumb.png.13e7d109258205514f0c5689177c0999.png

 

littéralement parlant, ça a pris 12 secondes.

 

Là, une figure à imprimer pour étalonner les axes:

2017-11-23-213503_2560x1024_scrot.thumb.png.c5cb8087f561b341085530fb68589574.png

Le code associé : figure etalonnage

 

Là, un support pour le ventilateur qui refroidit la carte de l'imprimante (qui d'origine est mal placé, et génère un boucan d'enfer):

2017-11-23-214309_2560x1024_scrot.thumb.png.98fd02bf0433d181f8f37a58029fb61c.png

le code associé : support ventilateur

On voit l'importance de la console en cas d'erreur.

 

A noter :

Il faut que la souris soit dans la zone de texte pour que les touchent écrivent du texte.

Si les appuis sur les touches n'affichent rien, regardez où est votre souris.

 

L'echelle est 1 pour 1 cm.

si vous écrivez ceci, vous aurez un cube de 1 cm sur 1 cm sur 1 cm

f.cube(bpy)
f.resize(bpy, 1, 1, 1)

 

Il faut toujours que le première variable soit bpy.

Les autres variables correspondent généralement aux axes.

 

Si vous voulez un mode d'emploi, faites moi signe.

 

Have fun

 

:)

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est juste trop stylé comme truc ! j'ai pas trop le temps de regarder ça de plus près maintenant, mais je vais définitivement m'y mettre sous peu ;) 

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est un peu la rencontre d'OpenScad et de Blender, je trouve ça super intéressant pour ceux qui sont plus à l'aise avec le code que la sculpture 3D.

j'aimerai bien me replonger dans Blender, j'aimais bien ce soft il  y a quelques années.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 28 minutes, Titimoby a dit :

c'est un peu la rencontre d'OpenScad et de Blender

bonjour, justement la question que je me posais, dans le cadre de l'impression 3D, qu'est que ça apporte de plus que Openscad ?

Partager ce message


Lien à poster
Partager sur d’autres sites

je dirais le fait de d'être dans Blender tout en utilisant des scripts.

Le meilleur des 2 mondes ?

Il faut demander à son auteur ce qu'il en pense.

Il y a sûrement encore pas mal d'écart en nombre de fonctions possibles j'imagine.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 3 minutes, Titimoby a dit :

je dirais le fait de d'être dans Blender tout en utilisant des scripts.

certes, mais même si je salue le travail de programmation de Yo',  il faudrait que les 2 mondes puissent communiquer car hormis fonction spécifique qui n'existerait pas sous Openscad si on ne peut pas reprendre la forme crée en ligne de commande sous le modeleur graphique.

un peu comme le module qui permet sous Freecad d'intégrer une partie codée sous Openscad et là ça serait très puissant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

En fait, un jour, je me suis dit : "j'ai envie de m'acheter une imprimante 3D", et je l'ai fait.

Ensuite, la chose logique etait de me trouver un logiciel 3D pour dessiner mes pièces.

Etant sous Lubuntu, j'ai pris celui qui était le plus recommandé sur des forums spécialisé linux.

 

J'ai commencé à dessiner en allant voir des tuto sur youtube, puis à un moment donné, j'ai vu un tuto avec de la ligne de commane et là, mon visage s'est illuminé : "fini le dessin 3D avec une souris" :banana:

 

Puis j'ai commencé à faire des lignes de codes sur la partie prévue à cet effet, avec les commandes d'origine de blender.

Comme certaines commandes revenaient souvent (et qu'elles sont complexes à retenir) , je me suis fait quelques routines,

Puis comme mon code devenais illisible avec toutes ces routines, qu'il fallait en plus recopier à chaque nouveau dessin, 

J'ai décidé de créer une bibliotheque.

 

Le gros avantage pour moi, c'est que c'est du python et je suis bien rodé à ce language.

 

Et ça donné ça, et l'envie de le partager.

 

Il y a quelques fonctions qu'il faut que je modifie car elle me me plaisent pas, comme le fait d'activer un objet avant d'utiliser la fonction soustraire.

 

De toutes façons, il est prevu qu'il évolu.

 

Merci pour votre interêt.

 

EDIT : l'idée n'est pas de copier, ou de concurrencer openscad.

Je n'ai connu ce logiciel que très récemment grace @nono30

 

Et maintenant que je suis parti sur ma lancée, j'y reste.

Il y a un avantage non négligeable, pour moi, c'est de pouvoir, de manière graphique (avec la souris) ajouter quelques modifications à mon dessin.

 

:)

Modifié (le) par Yo'

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 35 minutes, Yo' a dit :

Il y a un avantage non négligeable, pour moi, c'est de pouvoir, de manière graphique (avec la souris) ajouter quelques modifications à mon dessin.

re,

c'est sur mais justement , je n'ai pas pu regarder ça de plus prêt car (je suis sous W10 là)  et je ne peux même pas copier / coller ton code dans la console ! il y a quelque chose que j'ai du raté quelque part :S 

peux tu donner plus d'explication sur cet interfaçage entre code et modeleur graphique ?

Partager ce message


Lien à poster
Partager sur d’autres sites

je vais faire des essais avec W10 et dés que ça marche, je te tiens au jus.

 

Les lignes de commandes sont simplement des "raccourcis" plus simple à utiliser que les lignes de commande de blender.

Chaque fois que tu fais une modification de ton dessin, la ligne de commande correspondante est affichée tout en haut de blender.

 

Réponse demain pour W10 ;)

 

:)

Partager ce message


Lien à poster
Partager sur d’autres sites

ok je commence à comprendre la logique  ^_^ effectivement c'est le problème de Blender et de bien d'autres modeleurs, pour retrouver une fonction c'est parfois :S

alors à demain et merci pour le partage, ça va intéresser pas mal de monde et pas que dans le monde de l'impression 3D

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

 

J'ai réussi à faire fonctionner la bibliothèque sous W7 (et je pense que sous W10 c'est la même chose).

 

W7.thumb.JPG.1eeb6615b06ca93cf658f993ab18fb1d.JPG

 

Dans l'exemple, le fichier "fonctionsLocales.py" est sur le bureau.

Il faut renseigner ce chemin avec la variable

sys.path.append()

 

La différence entre Windows et Linux, c'est le format d'écriture du chemin.

Sous Windows, il faut écrire le chemin avec des doubles antislash.

"C:\\Users\\Salon\\Desktop"

 

Pour le reste, c'est la même chose que sous Linux.

 

:)

Modifié (le) par Yo'

Partager ce message


Lien à poster
Partager sur d’autres sites

merci Yo', alors sois je ne suis pas réveillé mais impossible d'écrire le moindre texte dans la console, (celle-ci est bien sélectionnée), il y a une option à déverrouiller :/ quelque part

Partager ce message


Lien à poster
Partager sur d’autres sites

@nono30: As tu ouvert un nouveau fichier en cliquant sur la croix ?

new.jpeg.a1d48fee56af3f69b4ac0116e1561f1f.jpeg.38087987b374c591cb455c824754ff4f.jpeg

 

Certains bouton peuvent être masqués si l'écran n'est pas assez large.

 

J'ai mis à jour le fichier : fonctionsLocales.py

Il n'y a plus besoin de spécifier bpy, et plus besoin d'activer les pièces pour faire une soustraction.

 

j'ai ajouté la commande suivante:

f.demo()

qui affiche les objets qui sont dans la bibliothèque.

 

2017-11-28-131903_2560x1024_scrot.thumb.png.17807936dfff04fef8e8f5e8fb28258d.png

 

Les fonctions:

f.nommer("nom") le nom s’incrémente automatique si il existe déjà
f.resize(x, y, z)
f.rotate(angle en radians, x, y, z) pour faire tourner une pièce de 90° autour de l'axe x, il faut marquer "f.rotate(1.57, 1, 0, 0)" 1.57 étant PI/2
f.translate(x, y , z)
f.color(r, v, b) je pense que 1 = 255, mais je n'ai jamais vérifié

f.jonction(liste) liste est optionnel
f.soustraction(objet qui va subir la soustraction, objet qui va enlever de la matière)
f.raz() efface le plan de travail

 

 

Have fun !

 

et merci @Titimoby pour l'astuce

 

:)

Modifié (le) par Yo'

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

Nouvelle version (1.02) : fonctionsLocales.py

Elle apporte certaines commandes comme "dupliquer" et "miroir" qui permettent de dessiner un boîtier, largement inspiré du tuto d' @Heliox : lien vers le tuto dans ce message

Il y a simplement besoin de dessiner un quart de la pièce :

2017-11-29-172449_2560x1024_scrot.thumb.png.55ea9c1c5b442eee9fb9dc2390b07948.png

puis de dupliquer, d'appliquer une fonction miroir,  déplacer et faire une jonction pour avoir la moitié de la pièce.

2017-11-29-172717_2560x1024_scrot.thumb.png.5079b08c6e1ef67e5eddbf2dd0bb85c5.png

et de faire quasiment la même opération que précédemment pour avoir la pièce complète.

2017-11-29-172844_2560x1024_scrot.thumb.png.fe6c46394351bcbad734c57483ccad3e.png

 

:)

Modifié (le) par Yo'

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

Version 1.03 :  fonctionsLocales.py

 

Ajout d'une règle.

Pour mesurer , c'est plus pratique (chaque graduation mesure 1mm)

Il est possible de choisir la longueur de la règle.

Par exemple f.regle(5) créera une règle de 5 cm.

La longueur par défaut est 10 cm.

2017-12-01-124123_2560x1024_scrot.thumb.png.ee7742539c0a5d866d42b29ebcd4cc78.png

 

Modification de la fonction couleur() :

f.couleur("r") #affichera du rouge
f.couleur("v") #affichera du vert
f.couleur("b") #affichera du bleu
f.couleur("j") #affichera du jaune
f.couleur("m") #affichera du mauve
f.couleur("n") #affichera du noir

 

Modification de la fonction rotate() :

f.rotate("d90", "x") #appliquera une rotation de 90°

 

 

NOTA : dans le message précédent, la fonction dupliquer() et la fonction mirroir() combinées ensemble posent problème et la pièce crée de cette manière ne sera pas tranchée correctement.

 

:)

Modifié (le) par Yo'

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

voici la nouvelle version (1.04)

 

2017-12-18-191054_2560x1024_scrot.thumb.png.ff63f4fc40f578966d7f83b0ec65f7a7.png

 

Le fichier : fonctionsLocales.py

Le pdf : fonctionsLocales.pdf

 

Dans blender, il est plus facile d'appeler la bibliothèque "fonctionsLocales" de cette manière:

from fonctionsLocales import *

ça permet de s'affranchir du f. avant chaque fonction
Le debut du fichier doit donc ressembler à

import bpy
import sys

sys.path.append(r"/home/lionel/blender/routines")
from fonctionsLocales import *

 

Il y a un bug récurrent dans blender.

Par moment, il est impossible de soustraire une pièce à une autre.

Il suffit de déplacer la pièce à extraire et ça devrait aller.

 

:)

Modifié (le) par Yo'

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • Sur cette page :   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×