Yo' Posté(e) Novembre 23, 2017 Posté(e) Novembre 23, 2017 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 ) 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 new 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 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: Il n'y a pas assez de dents ? modifiez la valeur nbDents. ici, 15 dents : littéralement parlant, ça a pris 12 secondes. Là, une figure à imprimer pour étalonner les axes: 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): 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 1
Trajectory Posté(e) Novembre 23, 2017 Posté(e) Novembre 23, 2017 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
Titimoby Posté(e) Novembre 27, 2017 Posté(e) Novembre 27, 2017 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.
Titimoby Posté(e) Novembre 27, 2017 Posté(e) Novembre 27, 2017 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.
Yo' Posté(e) Novembre 27, 2017 Auteur Posté(e) Novembre 27, 2017 (modifié) 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" 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) Novembre 27, 2017 par Yo'
Yo' Posté(e) Novembre 27, 2017 Auteur Posté(e) Novembre 27, 2017 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
Yo' Posté(e) Novembre 28, 2017 Auteur Posté(e) Novembre 28, 2017 (modifié) Salut, J'ai réussi à faire fonctionner la bibliothèque sous W7 (et je pense que sous W10 c'est la même chose). 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) Novembre 28, 2017 par Yo'
Titimoby Posté(e) Novembre 28, 2017 Posté(e) Novembre 28, 2017 si la version de python le permet, il est possible d'utiliser une chaine raw qui ne fait aucun escaping. sys.path.append(r"C:\Users\Salon\Desktop") 1
Yo' Posté(e) Novembre 28, 2017 Auteur Posté(e) Novembre 28, 2017 (modifié) @nono30: As tu ouvert un nouveau fichier en cliquant sur la croix ? 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. 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) Novembre 28, 2017 par Yo'
Yo' Posté(e) Novembre 29, 2017 Auteur Posté(e) Novembre 29, 2017 (modifié) 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 : puis de dupliquer, d'appliquer une fonction miroir, déplacer et faire une jonction pour avoir la moitié de la pièce. et de faire quasiment la même opération que précédemment pour avoir la pièce complète. Modifié (le) Novembre 29, 2017 par Yo'
Yo' Posté(e) Décembre 1, 2017 Auteur Posté(e) Décembre 1, 2017 (modifié) 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. 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) Décembre 1, 2017 par Yo'
Yo' Posté(e) Décembre 18, 2017 Auteur Posté(e) Décembre 18, 2017 (modifié) Hello, voici la nouvelle version (1.04) 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) Décembre 18, 2017 par Yo'
Yo' Posté(e) Décembre 26, 2017 Auteur Posté(e) Décembre 26, 2017 (modifié) Hello, V1.05 : fonctionsLocales.py 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. 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) Décembre 26, 2017 par Yo'
NP2I Posté(e) Janvier 10, 2018 Posté(e) Janvier 10, 2018 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 !
Yo' Posté(e) Janvier 12, 2018 Auteur Posté(e) Janvier 12, 2018 Salut, si tu as des questions, n’hésites pas
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant