Aller au contenu

GO Print

[TUTO] La 3D en ligne de commande


Yo'

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

 

:)

  • J'aime 1
Lien vers le commentaire
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.

Lien vers le commentaire
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'
Lien vers le commentaire
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 ;)

 

:)

Lien vers le commentaire
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'
Lien vers le commentaire
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'
Lien vers le commentaire
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'
Lien vers le commentaire
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'
Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

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'
Lien vers le commentaire
Partager sur d’autres sites

Hello,

V1.05 : fonctionsLocales.py

2017-12-26-115324_2560x1024_scrot.thumb.png.fc5e09a08c21d4f143b9b2c3e7f08d98.png

Ajout des fonctions:

rm() pour effacer des objets.

rm("nomObjet")
rm(["nomObjet"])
rm(["nomObjet", "nomObjet2"])

 

skip() pour ne pas exécuter le code qui se trouve à la suite de cette commande / qui se trouve entre 2 commandes skip()

inhibe le code:
skip("oui")
skip("o")
skip(1)
skip(True)
skip()

reactive le code:
skip("non")
skip("n")
skip(0)
skip(False)
skip() si la commande skip() a déjà été utilisée


exemple:

skip()
cube(1)
skip()
rond(1)

ne créera  pas le cube mais dessinera le rond.

 

unites() pour définir les unités utilisées.

unites("mm")

  ou 

unites("cm")

 

centrage() pour définir la position des pièces nouvellement crées.

centrage(True) : toutes les pièces seront centrées sur les 3 axes.

centrage(False) : les pièces seront 

                     à droite de l'axe X
                     a l'arrière de l'axe Y
                     au dessus de l'axe Z

centrage(-1,0,1) : correspond à la position de la pièce par rapport aux axes (X,Y,Z)
                   dans le cas présent : à gauche de l'axe X
                                         centré sur l'axe Y
                                         au dessus de l'axe Z

 

Les objets créés peuvent recevoir l'attribut (True) qui les centrera.

2017-12-26-121958_2560x1024_scrot.thumb.png.0ae4e6fb5e17e42bfecfca80000991a4.png

 

Le code de ma buse de soufflage:

import bpy
import sys

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

unites("mm")
centrage(0,0,1)

raz()

base(cube(25, 30, 4, "base"))
cube(23, 29, 2, "vide interieur")
move("z1")
move("y1")
retirer()

move("y2.75")

rond(16, 4)
join()
trou(14)

couleur("v")

for i in range(-12, 12, 4):
    for j in range(-12, 12, 4):
           rond(2)
           move(2 + i,2 + j,0)
           retirer()

move("x16.5")
dupliquer()

move("x-33")

join()

rotate("d-90","x")
move("y-0.75")
move("z13")

unites("cm")
centrage(0,0,-1)

a = cube(6, 1.2, 0.3)
b = rond(1.2, 0.3)
move("x3")
c = rond(1.2, 0.3)
move("x-3")

jonction([a,b,c])
couleur("r")

rond(0.5,2, "trou1")
move("x3")

rond(0.5,2, "trou2")
move("x-3")

retirer(a,["trou1", "trou2"])

move("y4.3")

a = rond(1.2, 0.3)
move(2.85, 6.6, 0)
b = rond(1.2, 0.3)
move(-2.85, 6.6, 0)

c = cube(2.7, 1.2, 0.3)
rotate("d60", "z")
move(2.2, 5.5, 0)

d = cube(2.7, 1.2, 0.3)
rotate("d-60", "z")
move(-2.2, 5.5, 0)

jonction([a, b, c, d])
couleur("m")

rond(0.5,2, "trou1")
move(2.85, 6.6, 0)

rond(0.5,2, "trou2")
move(-2.85, 6.6, 0)

retirer(a,["trou1", "trou2"])

move("y-0.2")

join()

base(cube(5.81, 3.8, 0.3))
couleur("b")
move("y1.9")

cube(2.3, 0.2, 1, "conduit d'air")
move("x-1.65")
move("y0.2")
retirer()

cube(2.3, 0.2, 1, "conduit d'air")
move("x1.649")
move("y0.2")
retirer()

join()


base(cube(5.8, 2.8, 1.6, "caisson"))
couleur("j")
move("y1.4")
move("z-0.3")

cube(5.6, 2.6, 1.4, "vide interieur")
move("y1.4") # 1.4 pour fermer, 1.3 pour voir l'interieur
move("z-0.4")
retirer()

cube(2.3, 0.2, 1, "conduit d'air")
move("x-1.65")
move("y0.2")
retirer()

cube(2.3, 0.2, 1, "conduit d'air")
move("x1.649")
move("y0.2")
retirer()

cube(2.6, 0.4, 1.3, "conduit d'air haut")
move(1.3, 2.7, -0.4)
couleur("m")
retirer()

cube(5.8, 0.2, 0.1, "charpente")
move("y1.3")
move("z-0.4")
couleur("r")

rond(0.2, 1.4, "pilier")
move("y1.3")
move("z-0.4")
couleur("r")

cube(1.3, 0.1, 1.4, "cloison")
move(2, 1.3, -0.4)
couleur("r")

base(triangle(3, 1.4, 1.6, "bouche"))
move(1.3, 3.4, -0.2)

triangle(3, 1.4, 1.4, "decoupe bouche")
move(1.3, 3.2, -0.3)
soustraire()

cube(2, 1.4, 1.4, "ouverture bouche")
move(0.3, 3.3, -0.4)
retirer()

join()

base(cube(7.6, 4.2, 1.5, "support impression"))
move(0, 4.9, -0.4)

triangle(3, 1.4, 1.6, "decoupe bouche")
move(1.3, 3.4, -0.2)
soustraire()

move("y0.2")

unites("mm")

for i in range(-38, 38, 4):
    for j in range(-21, 21, 4):
           rond(0.9, 1, "P")
           move(2 + i, 50 - j, -3)
           

rm(["P", "P1", "P2", "P3", "P4", "P5", "P8", "P9", "P10", "P20", "P21"])


join()

cube(23, 40, 20)
move("y70")

base("base")
retirer()

 

:)

Modifié (le) par Yo'
Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

Bonjour,

 

Très intéressent ! je débute dans l'impression j'ai reçu ma CR-10 il y a moins d'une semaine je suis encore sur les réglages de madame ^^

Mais bon vu que j'aime bien mettre la charrue avant les beus ^^ je cherche "le" logiciel qui me permettra de créer des pièces 3d et j'aime bien l'idée de pouvoir codé et aussi utilisé le mulot ^^

 

Donc je vais tester tout cela, je risque de venir te faire ***** très souvent ^^ mais bon ce sera pour la bonne cause

 

À la prochaine !

Lien vers le commentaire
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.
  • YouTube / Les Imprimantes 3D .fr

×
×
  • Créer...