{"id":4018,"date":"2025-08-04T16:50:57","date_gmt":"2025-08-04T14:50:57","guid":{"rendered":"http:\/\/www.boichat.ch\/wordpress\/?p=4018"},"modified":"2026-02-17T15:07:24","modified_gmt":"2026-02-17T14:07:24","slug":"imprimante-3d-blender-python","status":"publish","type":"post","link":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/","title":{"rendered":"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"4018\" class=\"elementor elementor-4018\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7b03da8 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"7b03da8\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-069e227\" data-id=\"069e227\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cc84cf6 elementor-widget elementor-widget-text-editor\" data-id=\"cc84cf6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 28px;\"><b>Imprimante 3D &#8211; Blender, Python, Visual Studio Code et\u00a0<a href=\"#a_gm_nodes\">Geometry Nodes<\/a><\/b><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-95f924f e-flex e-con-boxed e-con e-parent\" data-id=\"95f924f\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-ff24d5b e-con-full e-flex e-con e-child\" data-id=\"ff24d5b\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7b5e724 elementor-widget elementor-widget-text-editor\" data-id=\"7b5e724\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><em style=\"text-transform: var( --e-global-typography-text-text-transform ); letter-spacing: var( --e-global-typography-text-letter-spacing ); font-size: var( --e-global-typography-text-font-size ); color: var( --e-global-color-text );\"><span style=\"font-weight: bold;\">Date de la derni\u00e8re modification: 17 f\u00e9vrier 2026<\/span><\/em><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-228ff89 e-con-full e-flex e-con e-child\" data-id=\"228ff89\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6a9d4a7 elementor-widget elementor-widget-text-editor\" data-id=\"6a9d4a7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 16px;\"><strong><a href=\"#a_gm_nodes\">Geometry Nodes<\/a>\u00a0<br \/><\/strong>Commandes <b>T<\/b> et <b>N<\/b> apr\u00e8s <b>Scripting<\/b>!\u00a0<\/span><a href=\"#a_pythond\u00e9\" rel=\"noopener\" data-wplink-edit=\"true\">Un d\u00e9 \u00e0 jouer<\/a><span style=\"font-size: 16px;\">!<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d460b52 e-flex e-con-boxed e-con e-parent\" data-id=\"d460b52\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-893c4ed elementor-widget elementor-widget-text-editor\" data-id=\"893c4ed\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 17px; background-color: #eeeeee;\">A l&#8217;origine ce blog, datant du printemps 2021, sans<\/span><span style=\"font-size: 17px; background-color: #eeeeee;\">\u00a0<\/span><span style=\"font-size: 17px; background-color: #eeeeee; font-weight: bold;\">Visual Studio Code,<\/span><span style=\"font-size: 17px; background-color: #eeeeee;\">\u00a0<\/span><span style=\"font-size: 17px; background-color: #eeeeee;\">faisait partie de l&#8217;article<\/span><span style=\"font-size: 17px; background-color: #eeeeee;\">\u00a0<\/span><a style=\"font-size: 17px; background-color: #e9cdcd;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/01\/23\/imprimante-3d-creality-ender-3-v2\/\" target=\"_blank\" rel=\"noopener\">Imprimante 3D &#8211; Creality Ender 3 V2<\/a><span style=\"font-size: 17px; background-color: #eeeeee;\">\u00a0qui reste encore ma r\u00e9f\u00e9rence aujourd&#8217;hui.\u00a0J&#8217;y ai cependant laiss\u00e9 une introduction dans la partie\u00a0<\/span><a style=\"font-size: 17px; background-color: #e9cdcd;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\" target=\"_blank\" rel=\"noopener\">Blender et Python: cr\u00e9er des objets<\/a><span style=\"font-size: 17px; background-color: #eeeeee;\">!<\/span><\/p>\n<p style=\"background-color: #eeeeee;\"><span style=\"font-size: 17px;\">C&#8217;est fin octobre 2025 que j&#8217;ai d\u00e9but\u00e9 avec\u00a0<span style=\"font-weight: bold;\"><a href=\"#a_vscode\">Visual Studio Code<\/a><\/span>\u00a0(donc <b>Python<\/b>) et les <b><a href=\"#a_gm_nodes\" target=\"_blank\" rel=\"noopener\">Geometry Nodes<\/a> <\/b>(donc <b>Blender<\/b>)! Il y a encore pas mal de myst\u00e8res\u00a0<\/span><span style=\"font-size: 17px;\">pour moi, mais je m&#8217;y retrouve d\u00e9j\u00e0. Si des lecteurs ont des commentaires (erreurs, suggestions, &#8230;), je les accepte volontiers:<span style=\"font-weight: bold;\">\u00a0<\/span><a style=\"background-color: #dce9cd; transition-property: all;\" href=\"mailto:jean-bernard@boichat.ch\">jean-bernard@boichat.ch<\/a><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a10f2f4 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"a10f2f4\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2772f4d\" data-id=\"2772f4d\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a8f6c85 elementor-widget elementor-widget-text-editor\" data-id=\"a8f6c85\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 24px;\"><b>Blender, Python et Visual Studio Code &#8211; G\u00e9n\u00e9ralit\u00e9<\/b><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-18e20e9 e-flex e-con-boxed e-con e-parent\" data-id=\"18e20e9\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-10390b0 e-flex e-con-boxed e-con e-child\" data-id=\"10390b0\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ec3e31 elementor-widget elementor-widget-text-editor\" data-id=\"3ec3e31\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><strong><span style=\"font-size: 20px;\">Quels outils d&#8217;IA g\u00e9n\u00e9rative utiliser<\/span><\/strong><\/p>\n<p>Ces outils sont essentiels ici dans ce type de recherche et d&#8217;apprentissage!<\/p>\n<p>J&#8217;ai toujours appr\u00e9ci\u00e9\u00a0<span style=\"font-weight: bold; font-family: georgia, palatino;\"><a href=\"https:\/\/www.perplexity.ai\/\" target=\"_blank\" rel=\"noopener\">Perplexity<\/a><\/span><span style=\"font-family: 'Alpha (Chess)', sans-serif;\">, mais\u00a0<\/span><span style=\"font-family: 'Alpha (Chess)', sans-serif; font-weight: bold;\"><a href=\"https:\/\/gemini.google.com\/app?hl=fr\" target=\"_blank\" rel=\"noopener\">Google Gemini<\/a><\/span><span style=\"font-family: 'Alpha (Chess)', sans-serif;\">, voire\u00a0<\/span><span style=\"font-weight: bold; font-family: 'Alpha (Chess)', sans-serif;\">ChatGPT, <\/span><span style=\"font-family: 'Alpha (Chess)', sans-serif;\">sont aussi des choix puissants\u00a0<\/span><span style=\"font-family: georgia, palatino;\">et ludiques avec par exemple:\u00a0<\/span><span style=\"font-family: georgia, palatino;\"><span style=\"font-weight: bold;\">python blender d\u00e9placer un objet connu par son nom sur l&#8217;axe y<\/span>!<br \/>Nous verrons ci-dessous avec les <b>API <\/b>de <b>Python<\/b> et <b>Blender\u00a0<\/b>que les retours de questions comme<b>\u00a0<\/b><\/span><span style=\"font-family: georgia, palatino;\"><b>python blender diff\u00e9rence entre bpy.ops.mesh.primitive_cube_add et bmesh.ops.create_cube<\/b>\u00a0<\/span><span style=\"font-family: georgia, palatino;\">\u00a0 sont parfois plus compl\u00e8tes en compr\u00e9hension et exemple de code. Cette derni\u00e8re par exemple m&#8217;a donn\u00e9 quelque chose de plus avec <b>Gemini<\/b>!<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e94f13 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"9e94f13\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c7cd4e4\" data-id=\"c7cd4e4\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-edbaf56 elementor-widget elementor-widget-text-editor\" data-id=\"edbaf56\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Les personnes familiers \u00e0 la mod\u00e9lisation <b>3D <\/b>sous <b>Blender <\/b>seront impressionn\u00e9s par la documentation et les nombreuses r\u00e9f\u00e9rences du module <b>bpy <\/b>de l&#8217;<a style=\"background-color: #eeeeee;\" href=\"https:\/\/docs.blender.org\/api\/current\/\" target=\"_blank\" rel=\"noopener\">API de Blender pour Python<\/a>.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">On commencera par quelques liens utiles comme\u00a0<a style=\"transition-property: all;\" href=\"https:\/\/www.python.org\/\" target=\"_blank\" rel=\"noopener\">Le site Web de Python<\/a>, voire\u00a0<a style=\"transition-property: all;\" href=\"https:\/\/www.w3schools.com\/python\/python_intro.asp\" target=\"_blank\" rel=\"noopener\">Python Introduction<\/a>,\u00a0\u00a0<a style=\"transition-property: all;\" href=\"https:\/\/docs.blender.org\/api\/current\/info_quickstart.html\" target=\"_blank\" rel=\"noopener\">Blender Python Quickstart<\/a>,\u00a0<a style=\"transition-property: all;\" href=\"https:\/\/docs.blender.org\/api\/blender_python_api_2_76_0\/info_overview.html#\" target=\"_blank\" rel=\"noopener\">Python API Overview<\/a>\u00a0et mon\u00a0<span style=\"font-size: 18px;\"><b><a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/\" target=\"_blank\" rel=\"noopener\">Un Tuto Blender super rapide pour impression 3D<\/a><\/b><\/span>.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">En passant au mode\u00a0<span style=\"font-weight: bold;\">Scripting<\/span>\u00a0sous <b>Blender <\/b>(menu tout en haut), la\u00a0<span style=\"font-weight: bold;\">Console<\/span>\u00a0en bas \u00e0 gauche nous montre les commandes d&#8217;interface lors de cr\u00e9ation et de manipulations d&#8217;objets avec l&#8217;interface\u00a0<span style=\"font-weight: bold;\">Blender<\/span>\u00a0classique, par exemple pour un\u00a0<span style=\"font-weight: bold;\">Bevel<\/span>\u00a0en\u00a0<span style=\"font-weight: bold;\">Edit Mode<\/span>\u00a0:<br \/><span style=\"font-size: 18px;\"><span style=\"font-weight: bolder;\"><span style=\"font-family: 'courier new', courier;\">bpy.ops.mesh.bevel(offset=2.69618, offset_pct=0, release_confirm=True)<\/span><\/span><\/span>.<br \/>Magnifique! Mais le retour dans cette console offre parfois tellement de param\u00e8tres de l&#8217;<b>API bpy<\/b> qu&#8217;on a de la peine \u00e0 s&#8217;y retrouver.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\"><span style=\"background-color: #dbb59c;\">D\u00e8s qu&#8217;on a cliqu\u00e9 sur <b>Scripting <\/b>dans le menu en haut \u00e0 droite, on peut avoir le d\u00e9sagr\u00e9ment de ne plus avoir ni le panneaux de gauche, ni de droite pour le propri\u00e9t\u00e9s de l&#8217;objet, dans la fen\u00eatre principale qui s&#8217;est r\u00e9duite drastiquement! On appuiera donc respectivement sur les touches <b>T<\/b> et <b>N<\/b> pour les faire r\u00e9apparaitre. Il faudra aussi re-zoomer avec la molette!<\/span><\/p>\n<p style=\"font-family: Roboto, sans-serif;\">Le cas du <b>Bevel <\/b>en Python est un exemple classique de difficult\u00e9 \u00e0 d\u00e9finir les param\u00e8tres. On l&#8217;applique sur un cube cr\u00e9\u00e9 avec une certaine dimension. Si la valeur de l&#8217;<b>offset<\/b>\u00a0est en dehors du raisonnable, on ne va rien comprendre. Il faudra revenir en mode <b>Edit <\/b>et visionner le r\u00e9sultat en corrigeant ce param\u00e8tre voire le d\u00e9finir avec une variable <b>Python <\/b>fonction de la grandeur du cube.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">Dans cette m\u00eame\u00a0<span style=\"font-weight: bold;\">Console\u00a0<\/span>en bas \u00e0 gauche, il est aussi possible de copier\/coller des lignes de code voir des exemples, car c&#8217;est une console terminal\u00a0<span style=\"font-weight: bold;\">Python<\/span>. <br \/>Noter que dans cette console la fonction\u00a0<span style=\"font-weight: bold;\">print\u00a0<\/span>(souvent utilis\u00e9e lors du d\u00e9veloppement de code) fonctionnera, ce qui n&#8217;est pas possible avec du code <b>Python <\/b>dans la fen\u00eatre\u00a0<span style=\"font-weight: bold;\">Scripting<\/span>.\u00a0<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">On voit donc que l&#8217;utilisation de\u00a0<span style=\"font-weight: bold;\">Python\u00a0<\/span>peut permettre de cr\u00e9er des objets o\u00f9 on pourra plus tard corriger\u00a0<u>des dimensions avec pr\u00e9cision<\/u>, sans devoir retoucher toute la b\u00eate en travail. En fait c&#8217;est un peu comme <a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/01\/23\/imprimante-3d-creality-ender-3-v2\/#a_openscad\">OpenSCAD que j&#8217;ai autrefois utilis\u00e9s<\/a>!<\/p>\n<p>A partir d&#8217;objets cr\u00e9er de mani\u00e8re traditionnelle avec <b>Blender<\/b>, on peut aussi \u00e9videmment utiliser des scripts <b>Python <\/b>pour y ajouter des d\u00e9tails.<br \/>L&#8217;article\u00a0<a href=\"https:\/\/infoforall.fr\/blender\/blender-jeia-3.html\" target=\"_blank\" rel=\"noopener\">BLENDER JEIA &#8211; 03 &#8211; Utiliser Python pour cr\u00e9er des objets<\/a> est ancien (il semble vers 2016), mais donne de bonnes id\u00e9es.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">La composition et la cr\u00e9ation d&#8217;objets complexes en\u00a0<span style=\"font-weight: bold;\">Python\u00a0<\/span>d\u00e9passe de tr\u00e8s loin une simple introduction.\u00a0<br \/>Il faudra aussi y ajouter l&#8217;exportation automatique en fichier\u00a0<span style=\"font-weight: bold;\">.STL\u00a0<\/span>utilisable par les slicers des imprimantes <b>3D<\/b>!<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">Nous allons &#8220;essayer&#8221; d&#8217;expliquer comment utiliser\u00a0<span style=\"font-weight: bold;\"><a style=\"transition-property: all;\" href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener\">Visual Studio Code<\/a><\/span>\u00a0pour d\u00e9velopper du code\u00a0<span style=\"font-weight: bold;\">Python\u00a0<\/span>pour\u00a0<span style=\"font-weight: bold;\">Blender\u00a0<\/span>sous\u00a0<span style=\"font-weight: bold;\">Windows\u00a0<\/span>et en dehors de l&#8217;outil\u00a0<span style=\"font-weight: bold;\">Blender<\/span>\u00a0lui-m\u00eame. <span style=\"font-size: 18px;\">Pour faire ce travail, j&#8217;ai utilis\u00e9 la vid\u00e9o\u00a0<span style=\"font-weight: bolder;\"><a style=\"transition-property: all;\" href=\"https:\/\/www.youtube.com\/watch?v=YUytEtaVrrc\" target=\"_blank\" rel=\"noopener\">5 Steps to setup VSCode for Blender Python (on Windows)<\/a><\/span><\/span>, merci \u00e0\u00a0<b><a href=\"https:\/\/www.skool.com\/cgpython\" target=\"_blank\" rel=\"noopener\">Victor Stepanov<\/a>.<\/b><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-2881ac2 e-flex e-con-boxed e-con e-parent\" data-id=\"2881ac2\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-501b02f elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"501b02f\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c36e57f elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"c36e57f\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-18e5d7a\" data-id=\"18e5d7a\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f65434c elementor-widget elementor-widget-text-editor\" data-id=\"f65434c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 24px;\"><b>Blender et Python &#8211; Installation<\/b><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-73a8bf4 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"73a8bf4\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ed5331e\" data-id=\"ed5331e\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-70cf9b7 elementor-widget elementor-widget-text-editor\" data-id=\"70cf9b7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><u>On assume que\u00a0<span style=\"font-weight: bold;\">Blender\u00a0<\/span>est d\u00e9j\u00e0 install\u00e9<\/u> comme d\u00e9crit dans mon\u00a0<a style=\"background-color: #eeeeee;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/\" target=\"_blank\" rel=\"noopener\">Un Tuto Blender super rapide pour impression 3D<\/a>.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">Apr\u00e8s son d\u00e9marrage, sur la barre sup\u00e9rieure en haut \u00e0 gauche, on voit la version, par exemple <b>Blender 4.5.2 LTS<\/b>.<br \/>Dans\u00a0mon <a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\"><b>Blender e<\/b>t<\/a><b><a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\" target=\"_blank\" rel=\"noopener\"> Python: cr\u00e9er des objets<\/a><\/b>, j&#8217;avais d\u00e9j\u00e0 activ\u00e9 l&#8217;outil <b>Scripting <\/b>(bar de menu de <b>Blender<\/b>), et on y trouve la version de <b>Python <\/b>install\u00e9e par d\u00e9faut, <b>3.11.11<\/b> chez moi. C&#8217;est celle que j&#8217;utiliserai pour l&#8217;installation de <b>Python <\/b>sous <b>Windows<\/b>, n\u00e9cessaire pour l&#8217;application de d\u00e9veloppement en langage\u00a0<b>Python<\/b>, c&#8217;est \u00e0 dire\u00a0<b>Visual Studio Code<\/b>.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">Si le lecteur continue le visionnement de cet article, il est conseill\u00e9 de garder\u00a0<a style=\"background-color: #eeeeee;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\">Blender et<\/a><span style=\"font-weight: bold;\"><a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\" target=\"_blank\" rel=\"noopener\">\u00a0Python: cr\u00e9er des objets<\/a><\/span>\u00a0ouvert, car certains d\u00e9tails techniques\u00a0 n&#8217;ont pas encore \u00e9t\u00e9 transf\u00e9r\u00e9s ici!<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">Donc apr\u00e8s un clic sur <b>Scripting <\/b>dans le menu, nous aurons un console <b>Python <\/b>comme d\u00e9crit dans le manuel de <b>Blender <\/b><a href=\"https:\/\/docs.blender.org\/manual\/fr\/2.83\/editors\/python_console.html\">Console de Blender<\/a>. Il y a m\u00eame une compl\u00e9tion automatique: on essaiera volontiers un\u00a0<b>bpy.<\/b> suivi de <b>Tab<\/b>. On notera que cette compl\u00e9tion automatique est nettement plus professionnelle avec\u00a0<span style=\"font-weight: bold;\">Visual Studio Code<\/span>\u00a0d\u00e9crit ci-dessous.<\/p>\n<p style=\"font-family: Roboto, sans-serif;\">Dans cette derni\u00e8re r\u00e9f\u00e9rence (<a style=\"background-color: #eeeeee;\" href=\"https:\/\/docs.blender.org\/manual\/fr\/2.83\/editors\/python_console.html\">Console de Blender<\/a>), il y a quelques exemples int\u00e9ressants.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-75c1bd7 e-flex e-con-boxed e-con e-parent\" data-id=\"75c1bd7\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1c70fa1 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"1c70fa1\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a38aab0 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"a38aab0\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7e66e64\" data-id=\"7e66e64\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5568831 elementor-widget elementor-widget-text-editor\" data-id=\"5568831\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><b style=\"font-family: Roboto, sans-serif;\"><span style=\"font-size: 20px;\">Installation de Python sous Windows<\/span><\/b><\/p>\n<p>Sur le site Web officiel de <b>Python<\/b>, par exemple <a href=\"https:\/\/www.python.org\/downloads\/release\/python-3110\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.python.org\/downloads\/release\/python-3110\/<\/a>, on trouvera facilement un ex\u00e9cutable d&#8217;installation 64bits sous <b>Windows <\/b>comme <b>python-3.11.0-amd64.exe<\/b>.<br \/>A l&#8217;ex\u00e9cution de ce dernier, j&#8217;ai utilis\u00e9 <b>Install Now<\/b> avec<b>\u00a0<\/b>l&#8217;option <b>Add\u00a0Python PATH<\/b>.<br \/>J&#8217;ai laiss\u00e9 toutes les options et cliqu\u00e9 sur <b>Next <\/b>et gardant les choix.<br \/>Apr\u00e8s installation et avec une invite de commande <b>Windows CMD<\/b>, on entre <b>python dans la console\u00a0<\/b>qui nous indique que cela fonctionne avec la version <b>3.11.0<\/b> correcte. <b>quit()<\/b>\u00a0est possible pour sortir.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-db62a3a e-flex e-con-boxed e-con e-parent\" data-id=\"db62a3a\" data-element_type=\"container\" id=\"a_vscode\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-108c66e elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"108c66e\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2035551 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"2035551\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-01f504a\" data-id=\"01f504a\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-69ef089 elementor-widget elementor-widget-text-editor\" data-id=\"69ef089\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 24px;\"><b>Visual Studio Code\u00a0<\/b><\/span><b style=\"font-size: 24px;\">\u00a0&#8211; Installation<\/b><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-30be664 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"30be664\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8c64ea5\" data-id=\"8c64ea5\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6e2dafa elementor-widget elementor-widget-text-editor\" data-id=\"6e2dafa\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-family: Roboto, sans-serif;\">Sur le site Web de cet <b>IDE <\/b>(<b>I<\/b><\/span><span style=\"font-family: Roboto, sans-serif;\">ntegrated <b>D<\/b>evelopment <b>E<\/b>nvironment<\/span><span style=\"font-family: Roboto, sans-serif;\">) nous trouverons\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\"><strong><a href=\"https:\/\/code.visualstudio.com\/docs\/introvideos\/basics\" target=\"_blank\" rel=\"noopener\">Getting started with Visual Studio Code<\/a><\/strong>. Il n&#8217;est pas seulement d\u00e9di\u00e9 \u00e0 <b>Python <\/b>mais aussi \u00e0 d&#8217;autres langages. Comme il y a beaucoup de vid\u00e9os, c&#8217;est pr\u00e9f\u00e9rable de commencer avec la liste pr\u00e9sent\u00e9e \u00e0 gauche, par exemple <b>GET STARTED<\/b> et <b>VS Code Tutorial<\/b>.\u00a0<\/span><\/p>\n<p><span style=\"font-family: Roboto, sans-serif;\">On commencera donc par se rendre sur le site de <\/span><a style=\"font-family: Roboto, sans-serif; background-color: #eeeeee;\" href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener\">Visual Studio Code<\/a><span style=\"font-family: Roboto, sans-serif;\">\u00a0et cliquerons sur le bouton noir\u00a0<\/span><b style=\"font-family: Roboto, sans-serif;\">Download for Windows<\/b><span style=\"font-family: Roboto, sans-serif;\">.<\/span><\/p>\n<p><span style=\"font-family: Roboto, sans-serif;\">Avec le bouton suivant <b>Windows <\/b>(10-11) nous aurons un t\u00e9l\u00e9chargement automatique de <b>VSCodeUserSetup-x64-1.105.1.exe<\/b>. dans notre r\u00e9pertoire de t\u00e9l\u00e9chargement sur <b>Windows<\/b>,<br \/><\/span><span style=\"font-family: Roboto, sans-serif;\">Nous lancerons donc ce fichier d&#8217;installation. Nous laisserons la location de l&#8217;installation, son nom et les options d&#8217;installation pr\u00e9sent\u00e9es avec en plus les 2 options d&#8217;action d&#8217;ouverture, donc toute les cases coch\u00e9es avec la cr\u00e9ation de l&#8217;ic\u00f4ne sur le bureau.<br \/><\/span><span style=\"font-family: Roboto, sans-serif;\"><br \/>Apr\u00e8s le lancement de <b>Visual Studio Code<\/b> nous irons \u00e0 gauche avec l&#8217;ic\u00f4ne extension (ou <b>Ctrl-Shift-X<\/b>) pour installer celle de <b>Python<\/b>\u00a0avec le petit bouton bleu <b>Install<\/b>. On marquera le <b>Open a project Python folder<\/b> et cliquerons sur son bouton bleu. Un r\u00e9pertoire contenant d\u00e9j\u00e0 des exemples de code <b>Python <\/b>avec l&#8217;extension .<b>py<\/b> sera un plus! J&#8217;ai accept\u00e9 le\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\"><b>trust the authors of the files in this folder<\/b>. et le Copilot.<\/span><\/p>\n<p><span style=\"font-family: Roboto, sans-serif;\">Pour v\u00e9rifier <\/span><b style=\"font-family: Roboto, sans-serif;\">Visual Studio Code<\/b><span style=\"font-family: Roboto, sans-serif;\"> j&#8217;ai cr\u00e9\u00e9 un fichier <\/span><b style=\"font-family: Roboto, sans-serif;\">prime.py<\/b><span style=\"font-family: Roboto, sans-serif;\"> de code <\/span><b style=\"font-family: Roboto, sans-serif;\">Python<\/b><span style=\"font-family: Roboto, sans-serif;\">, tir\u00e9 du site Web\u00a0<b>Programiz<\/b>, pour identifier si un nombre est premier (<\/span><a style=\"font-family: Roboto, sans-serif;\" href=\"https:\/\/www.programiz.com\/python-programming\/examples\/prime-number\" target=\"_blank\" rel=\"noopener\">voir le code<\/a><span style=\"font-family: Roboto, sans-serif;\">\u00a0sur le site:\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\">Program to check if a number is prime or not, avec la valeur 29<\/span><span style=\"font-family: Roboto, sans-serif;\">). C&#8217;est du code <\/span><b style=\"font-family: Roboto, sans-serif;\">Python<\/b><span style=\"font-family: Roboto, sans-serif;\">, rien \u00e0 voir avec la mod\u00e9lisation\u00a0<\/span><b style=\"font-family: Roboto, sans-serif;\">3D<\/b><span style=\"font-family: Roboto, sans-serif;\">. J&#8217;ai sauv\u00e9 cet exemple dans mon r\u00e9pertoire <b>Python<\/b>.<\/span><\/p>\n<p><b><i>Notes<\/i><\/b><i>:<br \/><span style=\"font-family: Roboto, sans-serif;\">J&#8217;ai aussi install\u00e9\u00a0<b>Thonny<\/b> sur mon PC <b>Windows<\/b>, un <b>IDE <\/b>pour d\u00e9butant, pour jouer avec <b>Python<\/b>, mes <a href=\"https:\/\/www.boichat.ch\/wpjrsp\/\">Raspberry Pi avec mon livre<\/a> et utilis\u00e9 pour <a href=\"https:\/\/www.boichat.ch\/joomla\/index.php?option=com_content&amp;view=article&amp;id=129\">mes microcontr\u00f4leurs ESP avec MicroPython<\/a>.\u00a0<br \/><\/span><span style=\"font-family: Roboto, sans-serif;\">Je recommande en plus d&#8217;utiliser <\/span><a style=\"background-color: #eeeeee;\" href=\"https:\/\/notepad-plus-plus.org\/\" target=\"_blank\" rel=\"noopener\">Notepad++<\/a><span style=\"font-family: Roboto, sans-serif;\">\u00a0pour l&#8217;\u00e9dition. C&#8217;est mon \u00e9diteur texte par d\u00e9faut. Il poss\u00e8de une jolie syntaxe color\u00e9e pour ce langage!<\/span><span style=\"font-family: Roboto, sans-serif;\">\u00a0<\/span><\/i><\/p>\n<p><span style=\"font-family: Roboto, sans-serif;\">En cliquant sur le fichier <b>prime.py<\/b> dans l&#8217;explorateur de <b>Windows <\/b>on pourra l&#8217;associer\u00a0\u00e0 notre <b>Visual Studio Code<\/b> fra\u00eechement install\u00e9. Le code vient alors affich\u00e9 dans la fen\u00eatre centrale et le <b>triangle de Run dans la barre du haut<\/b>\u00a0ex\u00e9cutera le code en nous montrant le r\u00e9sultat en dessous.<\/span><\/p>\n<p><span style=\"font-family: Roboto, sans-serif; font-size: 18px;\"><b>Visual Studio Code<\/b> est un excellent choix pour l&#8217;apprentissage du langage <b>Python<\/b>. D\u00e8s que nous avons une erreur de syntaxe, une mauvaise instruction ou construction, voire une fausse fonction, c&#8217;est not\u00e9 dans l&#8217;\u00e9diteur. On se familiarisera rapidement avec l&#8217;\u00e9diteur et ensuite avec le d\u00e9bogueur pour ajouter des breakpoints (points d&#8217;arr\u00eat dans l&#8217;ex\u00e9cution) et avancer pas \u00e0 pas dans le code en visionnant des valeurs de variables.\u00a0<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-e0e2d89 e-flex e-con-boxed e-con e-parent\" data-id=\"e0e2d89\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-99b4e4d elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"99b4e4d\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-53117bd elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"53117bd\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c090315\" data-id=\"c090315\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-665141e elementor-widget elementor-widget-text-editor\" data-id=\"665141e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 24px;\"><b>Visual Studio Code\u00a0<\/b><\/span><b style=\"font-size: 24px;\">\u00a0&#8211; Python pour Blender<\/b><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-34e4bc5 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"34e4bc5\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1c46a5b\" data-id=\"1c46a5b\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e59a50f elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"e59a50f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\">Pour pouvoir cr\u00e9er des objets <b>Blender<\/b> avec le langage <b>Python\u00a0<\/b>depuis\u00a0<\/span><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\">\u00a0<b>Visual Studio Code<\/b><\/span><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\">, il\u00a0<\/span><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\">faudra installer\u00a0<\/span><a style=\"background-color: #ccffcc; font-size: 18px; font-family: Roboto, sans-serif; color: #000000;\" href=\"https:\/\/github.com\/nutti\/fake-bpy-module\" target=\"_blank\" rel=\"noopener\">fake-bpy-module<\/a><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\">\u00a0avec\u00a0<\/span><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\"><b>pip install fake-bpy-module-latest<\/b>\u00a0(\u00e0 ex\u00e9cuter dans la fen\u00eatre TERMINAL en bas au milieu) et aussi l&#8217;extension\u00a0<\/span><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\"><b>Blender Development<\/b> de\u00a0<\/span><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\"><b>Jacques Lucke\u00a0<\/b>(recherche de\u00a0<\/span><span style=\"font-size: 18px; font-family: Roboto, sans-serif;\"><b>Blender Development<\/b> sous Extension (<b>Ctrl-Shift-X<\/b>) et ensuite <b>Install <\/b>(bouton bleu et on trust!)).<\/span><\/p>\n<p style=\"font-family: Roboto, sans-serif;\">J&#8217;ai aussi ajout\u00e9 l&#8217;extension <b>Extra Mesh Objects <\/b>dans <b>Blender<\/b>\u00a0avec le menu <b>Edit <\/b>\/ <b>Preferences <\/b>\/ <b>Get Extensions<\/b> et en cherchant <b>Extra Mesh Objects<\/b>.<\/p>\n<p><span style=\"font-family: Roboto, sans-serif;\">Finalement on va reprendre l&#8217;exemple des cubes entass\u00e9s de\u00a0<\/span><a style=\"font-family: Roboto, sans-serif; background-color: #eeeeee;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\" target=\"_blank\" rel=\"noopener\">Blender et<\/a><a style=\"font-family: Roboto, sans-serif; font-weight: bold;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\">\u00a0Python: cr\u00e9er des objets<\/a><span style=\"font-family: Roboto, sans-serif;\">\u00a0dont nous avons sauvegard\u00e9 son fichier avec le nom\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\"><b>blenderPy1.py<\/b>\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\">et:<\/span><\/p>\n<p><span style=\"font-family: Roboto, sans-serif;\">&#8211; Lancer <\/span><b style=\"font-family: Roboto, sans-serif;\">Blender <\/b><span style=\"font-family: Roboto, sans-serif;\">depuis\u00a0\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\"><b>Visual Studio Code\u00a0<\/b>avec le menu <\/span><b style=\"font-family: Roboto, sans-serif;\">View<\/b><span style=\"font-family: Roboto, sans-serif;\">, <\/span><b style=\"font-family: Roboto, sans-serif;\">Commande Palette<\/b><span style=\"font-family: Roboto, sans-serif;\"> (ou <\/span><b style=\"font-family: Roboto, sans-serif;\">Ctrl-Shift-P<\/b><span style=\"font-family: Roboto, sans-serif;\">) et <\/span><b style=\"font-family: Roboto, sans-serif;\">Blender: Start<\/b><span style=\"font-family: Roboto, sans-serif;\">;<br \/><\/span><span style=\"font-family: Roboto, sans-serif;\">&#8211; Choisir mon dernier <\/span><b style=\"font-family: Roboto, sans-serif;\">blender.exe\u00a0<\/b><span style=\"font-family: Roboto, sans-serif;\">et continuer (<b>Blender <\/b>s&#8217;ouvre avec notre cube original);<br \/>&#8211; On retire le cube en <b>Objet Mode<\/b> avec <b>Select <\/b>et <b>Delete;<\/b><br \/>&#8211; Avec le menu File et Open File, nous irons r\u00e9cup\u00e9rer notre fichier\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\"><b>blenderPy1.py<\/b> qui viendra pr\u00e9sent\u00e9 \u00e0 l&#8217;\u00e9cran;<br \/>&#8211; A<\/span><span style=\"font-family: Roboto, sans-serif;\">vec le menu\u00a0<\/span><span style=\"font-weight: bold; font-family: Roboto, sans-serif;\">View<\/span><span style=\"font-family: Roboto, sans-serif;\">,\u00a0<\/span><span style=\"font-weight: bold; font-family: Roboto, sans-serif;\">Commande Palette<\/span><span style=\"font-family: Roboto, sans-serif;\">\u00a0(ou\u00a0<\/span><span style=\"font-weight: bold; font-family: Roboto, sans-serif;\">Ctrl-Shift-P<\/span><span style=\"font-family: Roboto, sans-serif;\">) et <b>Blender: Run Script<\/b>.<\/span><\/p>\n<p><span style=\"font-family: Roboto, sans-serif;\">Il faudra ouvrir l&#8217;instance d\u00e9marr\u00e9e avec Start et nous verrons la m\u00eame figure de cubes entass\u00e9s que nous avions g\u00e9n\u00e9r\u00e9 \u00e0 partir de <b>Scripting <\/b>dans <b>Blender<\/b>!\u00a0<\/span><\/p>\n<p>L&#8217;explorateur de\u00a0<span style=\"font-family: Roboto, sans-serif; font-weight: bold;\">Visual Studio Code<\/span><span style=\"font-family: Roboto, sans-serif;\">\u00a0(<b>Ctrl-Shift-E<\/b>) permet l&#8217;acc\u00e8s \u00e0 un r\u00e9pertoire de <b>Windows <\/b>conservant nos scripts <b>Python<\/b>. On pourra reprendre par exemple notre script <b>prime.py<\/b> pour continuer notre formation <b>Python <\/b>hors de l&#8217;API de <b>Blender<\/b>.<\/span><\/p>\n<p>J&#8217;ai un souci dans l&#8217;\u00e9diteur avec la touche <b>Backspace <\/b>de mon clavier et je dois utiliser <b>Shit-Backspace<\/b> pour effacer un charact\u00e8re \u00e0 gauche.<\/p>\n<p>Lorsque qu&#8217;on tape son code, par exemple\u00a0<span style=\"font-family: 'courier new', courier;\"><b>bpy.ops.m<\/b><\/span>\u00a0nous aurons d\u00e9j\u00e0 une suggestion de code pour <span style=\"font-family: 'courier new', courier;\"><b>mesh<\/b><\/span>, que nous accepterons. En entrant un point (<span style=\"font-size: 18px;\"><b>.<\/b><\/span>) nous aurons une autre s\u00e9rie de choix &#8230; ph\u00e9nom\u00e9nales. En entrant\u00a0<span style=\"font-family: 'courier new', courier;\"><strong>primitive_cube_add<\/strong><\/span>, il faudra attendre le dernier <strong>d<\/strong> pour obtenir toute l&#8217;information sur la fonction et la description des param\u00e8tres! Dans ce cas pr\u00e9cis j&#8217;utilise syst\u00e9matiquement <b><a href=\"https:\/\/gemini.google.com\/app?hl=fr\" target=\"_blank\" rel=\"noopener\">Google Gemini<\/a><\/b>, voire\u00a0<span style=\"font-weight: bold;\">ChatGPT<\/span><span style=\"font-weight: bold;\">\u00a0<\/span><b>ou\u00a0<\/b><span style=\"font-weight: bold; font-family: georgia, palatino;\"><a href=\"https:\/\/www.perplexity.ai\/\" target=\"_blank\" rel=\"noopener\">Perplexity<\/a><\/span>, avec\u00a0<span style=\"white-space-collapse: preserve;\"><b>Blender Python primitive_cube_add<\/b>.<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a5bcc7d elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"a5bcc7d\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f199de5\" data-id=\"f199de5\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-129d508 elementor-widget elementor-widget-text-editor\" data-id=\"129d508\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><strong style=\"font-family: Roboto, sans-serif;\"><span style=\"font-size: 18px;\">A suivre &#8230; c&#8217;est un bon d\u00e9but, mais je devrais pouvoir montrer des exemples simples et \u00e9volutifs, \u00e0 partir de mon<\/span><\/strong><span style=\"font-size: 18px;\"><span style=\"font-family: Roboto, sans-serif;\">&nbsp;<\/span><a style=\"background-color: #eeeeee; font-family: Roboto, sans-serif;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\" target=\"_blank\" rel=\"noopener\">Blender et<\/a><a style=\"background-color: #eeeeee; font-family: Roboto, sans-serif;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_python\">&nbsp;Python: cr\u00e9er des objets<\/a><span style=\"font-family: Roboto, sans-serif;\">&nbsp;et du code ci-dessous comme l&#8217;<\/span><\/span><span style=\"font-family: Roboto, sans-serif;\"><span style=\"font-size: 18px;\"><b>attache_vis.py<\/b><\/span><\/span><span style=\"font-family: Roboto, sans-serif; font-size: 18px;\">.<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-6d36a1d e-flex e-con-boxed e-con e-parent\" data-id=\"6d36a1d\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4cb0590 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"4cb0590\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f8c7000 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"f8c7000\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-09380d4\" data-id=\"09380d4\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f419e20 elementor-widget elementor-widget-text-editor\" data-id=\"f419e20\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 24px;\"><b>Le module bpy de Blender<\/b><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cef2f6b elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"cef2f6b\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3ccd57d\" data-id=\"3ccd57d\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-32b8278 elementor-widget elementor-widget-text-editor\" data-id=\"32b8278\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Sur le site Web officiel de <b>Python<\/b>, par exemple <a style=\"background-color: #eeeeee;\" href=\"https:\/\/www.python.org\/downloads\/release\/python-3110\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.python.org\/downloads\/release\/python-3110\/<\/a>, on trouvera facilement un ex\u00e9cutable d&#8217;installation 64bits sous <b>Windows <\/b>comme <b>python-3.11.0-amd64.exe<\/b>.<\/p>\n<p>A l&#8217;ex\u00e9cution de ce dernier, j&#8217;ai utilis\u00e9 <b>Install Now<\/b> avec<b>\u00a0<\/b>l&#8217;option <b>Add\u00a0Python PATH<\/b>.<br \/>J&#8217;ai laiss\u00e9 toutes les options et cliqu\u00e9 sur <b>Next <\/b>et gardant les choix.<br \/>Apr\u00e8s installation et avec une invite de commande <b>Windows CMD<\/b>, on entre <b>python dans la console\u00a0<\/b>qui nous indique que cela fonctionne avec la version <b>3.11.0<\/b> correcte. <b>quit()<\/b>\u00a0est possible pour sortir.<\/p>\n<p><span style=\"font-family: georgia, palatino;\">Le code pr\u00e9sent\u00e9 ici \u00e0 plus de 4 ans d&#8217;\u00e2ge, mais reste en fait vraiment simple et une bonne introduction. Il n&#8217;y a que 5 objets, dont 2 cylindres pour une op\u00e9ration de diff\u00e9rence!<\/span><\/p>\n<p><span style=\"font-family: georgia, palatino;\">En retravaillant ce code, j&#8217;avais not\u00e9 que les deux cylindres int\u00e9rieurs, utilis\u00e9s pour creuser l&#8217;espace des vis, restaient pr\u00e9sents en r\u00e9p\u00e9tant l&#8217;ex\u00e9cution du scripts. Apr\u00e8s l&#8217;op\u00e9ration de\u00a0<span style=\"font-weight: bold;\">DIFFERENCE\u00a0<\/span>on cache avec\u00a0<span style=\"font-weight: bolder;\"><span style=\"font-family: 'courier new', courier;\">hide_set(TRUE)<\/span><\/span>\u00a0ces deux objets.<br \/>Avant r\u00e9p\u00e9tition, il faut non seulement effacer tous les composants, mais aussi s&#8217;assurer qu&#8217;aucun cylindre cach\u00e9 reste dans la\u00a0<span style=\"font-weight: bold;\">Collection\u00a0<\/span>(en haut \u00e0 droite dans\u00a0<span style=\"font-weight: bold;\">Scene Collection<\/span>)!<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-26623c6 e-flex e-con-boxed e-con e-parent\" data-id=\"26623c6\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-018b80f elementor-widget elementor-widget-html\" data-id=\"018b80f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<pre style=\"padding: 8.5px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; border-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 18px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: #99ffff; border: 1px solid rgba(0, 0, 0, 0.15);\"><span style=\"font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\"><span style=\"font-size: 14px; white-space: pre-wrap;\"># attache_vis.py\r\nimport bpy\r\n\r\ncube = bpy.ops.mesh.primitive_cube_add(size=1, location=(0, 0, 0), scale=(1,1,1))\r\ntheCube = bpy.context.object\r\ntheCube.name = 'BaseCube'\r\nbpy.ops.transform.resize(value=(20, 36, 1))\r\n\r\nbpy.ops.mesh.primitive_cylinder_add(radius=4, depth=10, location=(-10, 10, 3.5), scale=(1,1,1))\r\nbpy.ops.transform.rotate(value=1.57, orient_axis='X')\r\ntheCylA = bpy.context.object\r\ntheCylA.name = 'CylinderA'\r\n\r\nbpy.ops.mesh.primitive_cylinder_add(radius=2.1, depth=10, location=(-10, 10, 3.5), scale=(1,1,1))\r\nbpy.ops.transform.rotate(value=1.57, orient_axis='X')\r\ntheCylAint = bpy.context.object\r\ntheCylAint.name = 'CylinderAint'\r\n\r\nbool_modifier1 = theCylA.modifiers.new(type=\"BOOLEAN\", name=\"boolc1\")\r\nbool_modifier1.object = theCylAint\r\nbool_modifier1.operation = 'DIFFERENCE'\r\ntheCylAint.hide_set(False)\r\nbpy.ops.object.modifier_apply()\r\n\r\nbpy.ops.mesh.primitive_cylinder_add(radius=4, depth=10, location=(-10, -10, 3.5), scale=(1,1,1))\r\nbpy.ops.transform.rotate(value=1.57, orient_axis='X')\r\ntheCylB = bpy.context.object\r\ntheCylB.name = 'CylinderB'\r\n\r\nbpy.ops.mesh.primitive_cylinder_add(radius=2.1, depth=10, location=(-10, -10, 3.5), scale=(1,1,1))\r\nbpy.ops.transform.rotate(value=1.57, orient_axis='X')\r\ntheCylBint = bpy.context.object\r\ntheCylBint.name = 'CylinderBint'\r\n\r\nbool_modifier2 = theCylB.modifiers.new(type=\"BOOLEAN\", name=\"boolc2\")\r\nbool_modifier2.object = theCylBint\r\nbool_modifier2.operation = 'DIFFERENCE'\r\ntheCylBint.hide_set(False)\r\nbpy.ops.object.modifier_apply()\r\n\r\nbpy.ops.object.select_all(action='SELECT')\r\nbpy.data.objects['CylinderAint'].hide_set(True)\r\nbpy.data.objects['CylinderBint'].hide_set(True)\r\n<\/span><\/span><\/pre>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3b76864 e-flex e-con-boxed e-con e-parent\" data-id=\"3b76864\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c75fa0f elementor-widget elementor-widget-image\" data-id=\"c75fa0f\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" loading=\"lazy\" width=\"843\" height=\"337\" src=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2021\/08\/attacheVis2-1024x409.jpg\" class=\"attachment-large size-large wp-image-13467\" alt=\"\" srcset=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2021\/08\/attacheVis2-1024x409.jpg 1024w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2021\/08\/attacheVis2-300x120.jpg 300w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2021\/08\/attacheVis2-768x307.jpg 768w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2021\/08\/attacheVis2.jpg 1200w\" sizes=\"(max-width: 843px) 100vw, 843px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-de7d444 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"de7d444\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e8ab732\" data-id=\"e8ab732\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6e6944b elementor-widget elementor-widget-text-editor\" data-id=\"6e6944b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-family: georgia, palatino;\">On peut aussi jouer avec une seule instruction pour comprendre et tester son code, voire adapter une propri\u00e9t\u00e9 de composant!&nbsp;<\/span><\/p>\n<p><span style=\"font-family: georgia, palatino;\">Dans la&nbsp;<span style=\"font-weight: bold;\">PYTHON INTERACTIVE CONSOLE<\/span>, tout en en bas \u00e0 gauche, on peut par exemple entrer&nbsp;<\/span><span style=\"font-family: georgia, palatino;\"><span style=\"font-weight: bolder;\"><span style=\"font-family: 'courier new', courier;\">bpy.data.objects[&#8216;CylinderAint&#8217;].hide_set(False)<\/span><\/span>&nbsp;pour re-remplir un des cylindres o\u00f9 devrait passer la vis.<\/span><\/p>\n<p><span style=\"font-family: georgia, palatino;\">On est en <b>Object Mode<\/b>. Donc, dans la <b>User Perspective<\/b>, on peut cliquer sur le cylindre gauche et le bouton menu <b>Move <\/b>et voir le d\u00e9placement, par exemple sur <b>Y<\/b> (vert) et le commande pr\u00e9sent\u00e9e&nbsp;&nbsp;<\/span><strong><span style=\"font-family: 'courier new', courier;\">bpy.ops.transform.translate(value=&#8230;<\/span><\/strong><span style=\"font-family: georgia, palatino;\">! <br>Mais que c&#8217;est bien compliqu\u00e9! C&#8217;est plus facile de modifier le code dans une des lignes de code&nbsp;<\/span><span style=\"font-family: georgia, palatino;\"><span style=\"font-family: 'courier new', courier;\"><b>bpy.ops.mesh.primitive_cylinder_add()<\/b><\/span> avec de nouvelles valeurs, d&#8217;effacer tout le bazar et de relancer le script pour examiner le r\u00e9sultat.<\/span><\/p>\n<p><span style=\"font-family: georgia, palatino;\">Ici nos cylindres en poss\u00e8dent d&#8217;autres \u00e0 l&#8217;int\u00e9rieur qu&#8217;on &#8216;DIFFERENCE&#8217; &#8230; donc vraiment compliqu\u00e9 de faire une modification en fin de script.<\/span><\/p>\n<p><span style=\"font-family: georgia, palatino;\">Si on est content, on peut aussi sauvegarder le projet <b>Blender<\/b> et adapter des d\u00e9tails plus tard apr\u00e8s un essai d&#8217;impression <b>3D<\/b>, sans revenir n\u00e9cessairement au code&nbsp;<b>Python<\/b>.<\/span><\/p>\n<p><span style=\"font-family: georgia, palatino;\">Bien s\u00fbr que le script pourrait \u00eatre adapter avec des variables <b>Python <\/b>pour la grandeur du plateau et la position relative des cylindres!<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ef92368 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"ef92368\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cd68bf2\" data-id=\"cd68bf2\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-09bbe05 elementor-widget elementor-widget-text-editor\" data-id=\"09bbe05\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 18px; font-family: Roboto, sans-serif; font-weight: bold;\">Plusieurs fen\u00eatres Scripting<\/span><\/p>\n<p>C&#8217;est pratique de charger deux scripts <b>Python <\/b>pour les tester ou copier(coller) du code.<br>On se d\u00e9place avec le pointeur (une croix) dans un des coins de la fen\u00eatre <b>Scripting <\/b>pour cr\u00e9er une nouvelle fen\u00eatre horizontale ou verticale en se d\u00e9pla\u00e7ant! Dans la barre inf\u00e9rieure, o\u00f9 se trouve le nom du fichier script, il y a un choix <b>Close Area<\/b> pour la fermer (bouton droit de la souris).<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-71f56f0 e-flex e-con-boxed e-con e-parent\" data-id=\"71f56f0\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-34778ed elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"34778ed\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3bc2735 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"3bc2735\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e41179c\" data-id=\"e41179c\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2416e1f elementor-widget elementor-widget-text-editor\" data-id=\"2416e1f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 20px; font-family: Roboto, sans-serif; font-weight: bold;\">Retour au Blender classique<\/span><\/p>\n<p><span style=\"font-size: 16px;\">Lorsqu&#8217;on cr\u00e9e un cylindre sous\u00a0<span style=\"font-weight: bold;\">Blender<\/span>, on lance l&#8217;application, on efface notre\u00a0<span style=\"font-weight: bold;\">Cube\u00a0<\/span>et avec le menu\u00a0<span style=\"font-weight: bold;\">Add<\/span>,\u00a0<span style=\"font-weight: bold;\">Mesh<\/span>,\u00a0<span style=\"font-weight: bold;\">Cylinder\u00a0<\/span>(voir\u00a0<span style=\"font-family: Roboto, sans-serif;\">mon\u00a0<\/span><span style=\"font-family: Roboto, sans-serif;\"><span style=\"font-weight: bold;\"><a style=\"transition-property: all;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/\" target=\"_blank\" rel=\"noopener\">Un Tuto Blender super rapide pour impression 3D<\/a><\/span><\/span><span style=\"font-family: Roboto, sans-serif;\">), on change le\u00a0<span style=\"font-weight: bold;\">radius\u00a0<\/span>\u00e0\u00a0<span style=\"font-weight: bold;\">10<\/span>\u00a0et le\u00a0<span style=\"font-weight: bold;\">depth\u00a0<\/span>\u00e0\u00a0<span style=\"font-weight: bold;\">20<\/span>. convenable pour des objets\u00a0<span style=\"font-weight: bold;\">3D<\/span>. Ce sont des\u00a0<span style=\"font-weight: bold;\">mm<\/span>\u00a0d\u00e9finis dans les pr\u00e9f\u00e9rences de\u00a0<span style=\"font-weight: bold;\">Blender\u00a0<\/span>et qui seront les unit\u00e9s par d\u00e9faut pour les fonctions du module\u00a0<span style=\"font-weight: bold;\">Python bpy<\/span>. Nous aurons donc un cylindre de dimension\u00a0<span style=\"font-weight: bold;\">20,20,20<\/span>,<\/span><\/span><\/p>\n<p><span style=\"font-size: 16px;\"><span style=\"font-family: Roboto, sans-serif;\">Si on regarde sous\u00a0<span style=\"font-weight: bold;\">Scene Collection<\/span>\u00a0en haut \u00e0 droite nous avons le\u00a0<span style=\"font-weight: bold;\">Cylinder<\/span>, qui est son nom, dans la\u00a0<span style=\"font-weight: bold;\">Collection<\/span>. En cliquant \u00e0 gauche sur le cylindre suivi d&#8217;un\u00a0<span style=\"font-weight: bold;\">Ctrl-C<\/span>\u00a0et\u00a0<span style=\"font-weight: bold;\">Ctrl-V<\/span>, un second (<\/span><\/span><span style=\"font-family: Roboto, sans-serif; font-size: 16px;\"><span style=\"font-weight: bold;\">Cylinder.001<\/span>) sera cr\u00e9\u00e9 dans la collection. Il est \u00e0 la m\u00eame place!<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-e32df0b e-flex e-con-boxed e-con e-parent\" data-id=\"e32df0b\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-7a63ce3 e-con-full e-flex e-con e-child\" data-id=\"7a63ce3\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-aa9e990 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"aa9e990\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 18px;\"><span style=\"font-weight: bold;\">Exercice 1 en Python<\/span><span style=\"background-color: #eeeeee;\">: <\/span><\/span><\/p>\n<p>Renomm\u00e9 deux cylindres existants, <br \/>agrandir un et d\u00e9placer l&#8217;autre<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4bc903a e-con-full e-flex e-con e-child\" data-id=\"4bc903a\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3ae6ae1 e-con-full e-flex e-con e-child\" data-id=\"3ae6ae1\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8143e10 elementor-widget elementor-widget-html\" data-id=\"8143e10\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<pre style=\"padding: 8.5px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; border-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 18px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: #99ffff; border: 1px solid rgba(0, 0, 0, 0.15);\"><span style=\"font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\"><span style=\"font-size: 14px; white-space: pre-wrap;\"># exercice1_2cylindres.py\r\nimport bpy\r\n\r\n#R\u00e9cup\u00e9rer les cylindres de la collection de la sc\u00e8ne\r\ncylindre1 = bpy.data.objects['Cylinder']\r\ncylindre2 = bpy.data.objects['Cylinder.001']\r\n\r\ncylindre1.name = \"Cylindre1\"\r\ncylindre2.name = \"Cylindre2\"\r\n\r\n#Nouvelle dimension pour le premier\r\nobj = bpy.data.objects[\"Cylindre1\"]\r\nobj.dimensions = (10, 20, 30)\r\n\r\n#Nouvelle position pour le second\r\nobj = bpy.data.objects[\"Cylindre2\"]\r\ncylindre2.location = (14, 16, 0)\r\n<\/span><\/span><\/pre>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-46da2e0 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"46da2e0\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-04820c4\" data-id=\"04820c4\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-180856b elementor-widget elementor-widget-text-editor\" data-id=\"180856b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 18px;\"><b>Exercice 2<\/b>:<\/span><br \/><br \/>Cr\u00e9er un cube (par exemple de 2 cm) centr\u00e9 \u00e0 l&#8217;origine. Sa dimension et son origine sont d\u00e9finis dans des variables <b>Python<\/b>.<br \/>Ajouter des cubes successifs coll\u00e9s et centr\u00e9s sans espace dans la direction <b>x<\/b> et de dimension divis\u00e9e par deux.<br \/>D\u00e9finir une variable pour stopper la boucle <b>while <\/b>de cr\u00e9ation successive si le cube devient inf\u00e9rieur \u00e0 une valeur d\u00e9termin\u00e9 (par exemple 2 mm).<br \/>Le nom des cubes est aussi d\u00e9fini dans une variable (par exemple <b>CubeN<\/b>).<br \/>On remarque tout de suite les erreurs de placement dans la vue <b>User Perspective<\/b>\u00a0de l&#8217;<b>Object Mode<\/b>!<br \/>Pour terminer: faire passer ce code dans une fonction <b>Python\u00a0<\/b><strong><span style=\"font-family: 'courier new', courier;\">serie_de_cubes(dim, dimMin, posx, posy, posz, cubeNum)<\/span><\/strong>!<br \/>Variantes: positionner les cubes diff\u00e9remment, voire m\u00eame en tournant, mais toujours correctement int\u00e9gr\u00e9s dans le pr\u00e9c\u00e9dent!\u00a0 \u00a0<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-816943e elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"816943e\" data-element_type=\"section\" id=\"a_pythond\u00e9\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-03b1fed\" data-id=\"03b1fed\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ffcac4f elementor-widget elementor-widget-text-editor\" data-id=\"ffcac4f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 18px;\"><b>Exercice 3<\/b>: <b>Cr\u00e9er, en programmation Python, un d\u00e9 \u00e0 jouer<\/b><\/span><\/p>\n<p>J&#8217;ai choisi ici d&#8217;utiliser un cylindre pour creuser le trou des num\u00e9ros de 1 \u00e0 6. <br \/>On ajoutera facilement dans ce script les autres chiffres sur les 5 autres faces (d&#8217;autres cylindres et locations). <br \/><br \/>C&#8217;est la suite, voire une extension, de mon <b><a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/#a_depipe\" target=\"_blank\" rel=\"noopener\">Un d\u00e9 \u00e0 jouer pip\u00e9 pour tricher<\/a><\/b> dans mon <b>Tuto Blender<\/b>.<br \/>Je pense aussi l&#8217;int\u00e9grer dans\u00a0<b><a href=\"https:\/\/www.boichat.ch\/wordpress\/2026\/02\/04\/imprimante-3d-pourquoi-orcaslicer\/\" target=\"_blank\" rel=\"noopener\">Imprimante 3D \u2013 Pourquoi OrcaSlicer<\/a><\/b> et\u00a0<a href=\"https:\/\/www.boichat.ch\/wordpress\/2023\/01\/30\/imprimante-3d-creality-ender-3-v2-neo\/#a_d%C3%A9pip%C3%A9\" target=\"_blank\" rel=\"noopener\">Modifier le remplissag<\/a>e sous <b>Ultimaker Cura<\/b>.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-14de98e e-flex e-con-boxed e-con e-parent\" data-id=\"14de98e\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-12b30c9 e-con-full e-flex e-con e-child\" data-id=\"12b30c9\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-84c759d elementor-widget elementor-widget-image\" data-id=\"84c759d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" loading=\"lazy\" width=\"600\" height=\"634\" src=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/de1.jpg\" class=\"attachment-large size-large wp-image-14394\" alt=\"\" srcset=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/de1.jpg 600w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/de1-284x300.jpg 284w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-81ceacf elementor-widget elementor-widget-text-editor\" data-id=\"81ceacf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><br \/>On commence par tout effacer, cela permettra aussi de relancer le script apr\u00e8s adaptation.<\/p>\n<p>Le cube est de 2cm (size=20 en mm) et le cylindre est de 1.4 de rayon, 4 de size et positionner en 11. On mettra un # devant les 3 derni\u00e8res instructions pour corriger la position et le profondeur du trou si n\u00e9cessaire.<\/p>\n<p>Pour les valeurs <b>2<\/b> et <b>8<\/b>, du <b>bevel_mod<\/b> on pourra jouer avec le Blender classique et piquer les valeurs.\u00a0<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-410ff64 e-con-full e-flex e-con e-child\" data-id=\"410ff64\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ef3d668 e-con-full e-flex e-con e-child\" data-id=\"ef3d668\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a451b50 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"a451b50\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e4ca2a elementor-widget elementor-widget-html\" data-id=\"7e4ca2a\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<pre style=\"padding: 8.5px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; border-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 18px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: #99ffff; border: 1px solid rgba(0, 0, 0, 0.15);\"><span style=\"font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\"><span style=\"font-size: 14px; white-space: pre-wrap;\">import bpy\r\n\r\n# Nettoyage de la sc\u00e8ne\r\nbpy.ops.object.select_all(action='SELECT')\r\nbpy.ops.object.delete()\r\n\r\n# Cr\u00e9ation du Cube\r\nbpy.ops.mesh.primitive_cube_add(size=20, location=(0, 0, 0))\r\ncube = bpy.context.active_object\r\ncube.name = \"Cube_Bevel_Trou\"\r\n\r\n# Modificateur BEVEL (Biseau)\r\nbevel_mod = cube.modifiers.new(name=\"MonBevel\", type='BEVEL')\r\nbevel_mod.width = 2\r\nbevel_mod.segments = 8\r\n\r\n# Cr\u00e9ation du Cylindre (pour le trou)\r\nbpy.ops.mesh.primitive_cylinder_add(radius=1.4, depth=4, location=(0, 0, 11))\r\ncylindre = bpy.context.active_object\r\ncylindre.name = \"Outil_Trou\"\r\n\r\n# Modificateur BOOLEAN sur le cube\r\nbool_mod = cube.modifiers.new(name=\"MonTrou\", type='BOOLEAN')\r\nbool_mod.operation = 'DIFFERENCE'\r\nbool_mod.object = cylindre\r\nbool_mod.solver = 'EXACT'\r\n\r\n# Appliquer le Bevel, et ensuite le Boolean\r\nbpy.context.view_layer.objects.active = cube\r\nbpy.ops.object.modifier_apply(modifier=bevel_mod.name)\r\nbpy.ops.object.modifier_apply(modifier=bool_mod.name)\r\n\r\n# Suppression du cylindre\r\nbpy.ops.object.select_all(action='DESELECT')\r\ncylindre.select_set(True)\r\nbpy.ops.object.delete()\r\n<\/span><\/span><\/pre>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-eec8c6e e-flex e-con-boxed e-con e-parent\" data-id=\"eec8c6e\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0dcc8ef elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"0dcc8ef\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2920394 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"2920394\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8fbec96\" data-id=\"8fbec96\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-271a210 elementor-widget elementor-widget-text-editor\" data-id=\"271a210\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 24px;\"><b>Le module bmesh de Blender &#8230; en travail<\/b><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2adbc7d elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"2adbc7d\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-81beb96\" data-id=\"81beb96\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-545d37f elementor-widget elementor-widget-text-editor\" data-id=\"545d37f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-weight: bold;\">bmesh<\/span> (<b>Blender <\/b>mesh)<span style=\"font-weight: bold;\">\u00a0<\/span>est une\u00a0<span style=\"font-weight: bold;\">API Python\u00a0<\/span>bas niveau. Il fonctionne directement sur la structure de donn\u00e9es de la g\u00e9om\u00e9trie (<span style=\"font-weight: bold;\">vertex<\/span>,\u00a0<span style=\"font-weight: bold;\">edge<\/span>,\u00a0<span style=\"font-weight: bold;\">face<\/span>).<\/p>\n<p>Cr\u00e9er un cube avec\u00a0<span style=\"font-weight: bold;\">bmesh\u00a0<\/span>signifie construire manuellement la g\u00e9om\u00e9trie dans un objet de type\u00a0<span style=\"font-weight: bold;\">BMesh<\/span>, plus proche du noyau de\u00a0<span style=\"font-weight: bold;\">Blender<\/span>\u00a0que\u00a0<span style=\"font-weight: bold;\">bpy<\/span>.<br \/>On peut cr\u00e9er des formes beaucoup plus pr\u00e9cis\u00e9ment. Le cube cr\u00e9\u00e9 ci-dessous n\u2019est pas un objet dans la sc\u00e8ne tant qu\u2019il n\u2019est pas converti vers un mesh et associ\u00e9 \u00e0 un objet.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-03ac54d e-flex e-con-boxed e-con e-parent\" data-id=\"03ac54d\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d278a16 e-con-full e-flex e-con e-child\" data-id=\"d278a16\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5ce8788 elementor-widget elementor-widget-text-editor\" data-id=\"5ce8788\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>\u00a0<\/p>\n<p>A compl\u00e9ter &#8230;.<\/p>\n<p>Cette partie me donne un peu des sueurs froides.<br \/>J&#8217;ai essay\u00e9 de cr\u00e9er plusieurs cubes et de leur g\u00e9n\u00e9rer un <b>Bevel <\/b>diff\u00e9rent \u00e0 chacun. Ce n&#8217;est pas facile et ce n&#8217;est pas trois lignes de code!<\/p>\n<p>Donc on verra!<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2900f1f e-con-full e-flex e-con e-child\" data-id=\"2900f1f\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-114e557 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"114e557\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<pre style=\"padding: 8.5px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; border-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 18px; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; background-color: #99ffff; border: 1px solid rgba(0, 0, 0, 0.15);\"><span style=\"font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\"><span style=\"font-size: 14px; white-space: pre-wrap;\"># exercice1_bmesh.py\r\nimport bpy\r\nimport bmesh\r\n\r\n# Cr\u00e9er un nouveau mesh\r\nmesh_data = bpy.data.meshes.new(\"MeshNeuf\")\r\nbm = bmesh.new()\r\n\r\n# Cr\u00e9er un cube dans BMesh\r\nbmesh.ops.create_cube(bm, size=24.0)\r\n\r\n# Transf\u00e9rer dans MeshNeuf\r\nbm.to_mesh(mesh_data)\r\nbm.free()\r\n\r\n# Cr\u00e9er un nouvel objet \u00e0 partir du mesh\r\nnew_obj = bpy.data.objects.new(\"LeCube\", mesh_data)\r\nbpy.context.collection.objects.link(new_obj)\r\n<\/span><\/span><\/pre>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4081143 e-flex e-con-boxed e-con e-parent\" data-id=\"4081143\" data-element_type=\"container\" id=\"a_gm_nodes\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-7c79309 e-flex e-con-boxed e-con e-child\" data-id=\"7c79309\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f6ac1bf elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"f6ac1bf\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-34896b6 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"34896b6\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d4fdb37\" data-id=\"d4fdb37\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a85ca09 elementor-widget elementor-widget-text-editor\" data-id=\"a85ca09\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 24px;\"><b>Blender et les Geometry Nodes &#8230; en travail<\/b><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d07eb9a elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"d07eb9a\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6bd39dd\" data-id=\"6bd39dd\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c5e478f elementor-widget elementor-widget-text-editor\" data-id=\"c5e478f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Les n\u0153uds g\u00e9om\u00e9triques (<b>Geometry Nodes<\/b>) sont accessibles dans <b>Blender <\/b>dans le menu en haut \u00e0 droite. Pour comprendre cette &#8220;b\u00eate&#8221; incroyable et bluffante, il faudra prendre son temps et s&#8217;accrocher!\u00a0<br \/>C&#8217;est un syst\u00e8me visuel qui permet de cr\u00e9er, g\u00e9n\u00e9rer, et transformer la g\u00e9om\u00e9trie <b>3D <\/b>via un r\u00e9seau de n\u0153uds interconnect\u00e9s, sans modifier manuellement les maillages avec les outils traditionnels de Blender.<\/p>\n<p>L\u2019utilisateur construit une sorte de \u201cprogramme\u201d graphique en reliant les n\u0153uds entre eux \u00e0 des buts de cr\u00e9ations de formes et de d\u00e9formation. Le but ici sera de pr\u00e9senter des exemples ludiques, (plus ou moins) simples et concrets!<\/p>\n<p>Moi-m\u00eame je viens du monde <strong>C++<\/strong> et <strong>Java<\/strong>, et j&#8217;ai eu de grosses difficult\u00e9s au d\u00e9part. Les <strong>Geometry Nodes<\/strong> de <strong>Blender<\/strong> ne sont pas orient\u00e9s objet (<strong>POO<\/strong>) mais bas\u00e9s sur un syst\u00e8me proc\u00e9dural via des graphes de n\u0153uds.<\/p>\n<p>Il y a pas mal de vid\u00e9os sur le sujet que je suis encore entrain de visionner et de trier avant d&#8217;en d\u00e9poser ici plus les r\u00e9f\u00e9rences et de commentaires. Il y a parfois des n\u0153uds\u00a0en relation avec des textures inutiles ici en principe pour l&#8217;impression <b>3D<\/b>.\u00a0<\/p>\n<p>Avant de visionner les quelques exemples donn\u00e9s ici, il faudrait consulter le manuel <b>Blender<\/b>, et <a href=\"https:\/\/docs.blender.org\/manual\/en\/latest\/modeling\/geometry_nodes\/fields.html\" target=\"_blank\" rel=\"noopener\">pourquoi pas se lancer avec les Fields<\/a> avant de revenir \u00e0 l&#8217;index principal sous <b>Geometry Nodes<\/b>:<\/p>\n<ul>\n<li><a style=\"font-size: 18px; background-color: #eeeeee;\" href=\"https:\/\/www.youtube.com\/watch?v=zqC1jg8y_NM\" target=\"_blank\" rel=\"noopener\">Introduction aux Geometry Nodes sur BLENDER<\/a><br \/>On peut commencer \u00e0 2:15 voire \u00e0 4:22. 5:50 <strong style=\"font-size: 15px;\">boolean<\/strong><span style=\"font-size: 15px;\"> et creuser un <\/span><strong style=\"font-size: 15px;\">Cube<\/strong><span style=\"font-size: 15px;\"> avec un <\/span><strong style=\"font-size: 15px;\">Cylindre<\/strong><span style=\"font-size: 15px;\">! 10:50 pour <\/span><strong style=\"font-size: 15px;\">Attribute Vector<\/strong><span style=\"font-size: 15px;\"> et 13:20 pour <\/span><strong style=\"font-size: 15px;\">Attribute Mix<\/strong><span style=\"font-size: 15px;\">.<\/span><\/li>\n<li><span style=\"font-size: 18px;\"><a href=\"https:\/\/www.youtube.com\/watch?v=tsEueplRRhg\" target=\"_blank\" rel=\"noopener\">La BASE du GEOMETRY-NODES dans BLENDER 4.0<\/a><br \/><span style=\"font-size: 15px;\">On peut commencer \u00e0 4:30! Il est un peu brouillon et acc\u00e9l\u00e8re quand on aimerait mieux saisir ce qu&#8217;il veut apporter! 7:00 <strong>Object Info<\/strong> et ralentir <strong>Youtube<\/strong>! A partir de 10:00, pas vraiment pour l&#8217;impression <strong>3D<\/strong>.<\/span><br \/><\/span><\/li>\n<li><span style=\"font-size: 18px;\"><a href=\"https:\/\/youtu.be\/szTYXk0t09A?list=PLzg4_2BrWAVzK4ORuEHz0RoE7Va3w6fBf\" target=\"_blank\" rel=\"noopener\">Getting Started &#8211; Geometry Nodes for Beginners<\/a>\u00a0&#8211; <span style=\"color: #800000;\"><strong>Ma pr\u00e9f\u00e9r\u00e9e pour l&#8217;instant<\/strong><\/span>! <b>Efficient!<\/b><br \/><span style=\"font-size: 15px;\">On peut commencer \u00e0 3:30! On apprendra beaucoup jusqu&#8217;\u00e0 15:00. <strong>Je le conseille vraiment<\/strong> (vitesse de .75 dans <strong>Youtube<\/strong> aidera)!<\/span><br \/><\/span><\/li>\n<li><a href=\"https:\/\/youtu.be\/oBtayXSLW44\" target=\"_blank\" rel=\"noopener\"><span style=\"font-size: 18px;\">Show INDEX as Objects in Blender 4.3 Geometry Nodes<\/span><\/a><br \/><span style=\"font-size: 15px;\">A 7:20 le Noeud For Each Element<\/span><\/li>\n<li><a href=\"https:\/\/youtu.be\/Kf74D-PYN_c\" target=\"_blank\" rel=\"noopener\"><span style=\"font-size: 18px;\">Structurer logiquement les Geometry Nodes de Blender<\/span><\/a><br \/><span style=\"font-size: 15px;\">On peut commencer \u00e0 2:44.<\/span><\/li>\n<li><span style=\"font-size: 18px;\"><a href=\"https:\/\/youtu.be\/tWvgHbZXCtA\" target=\"_blank\" rel=\"noopener\">Geometry Nodes for Complete Beginners &#8211; Part 1 (Blender Tutorial)<\/a><br \/><span style=\"font-size: 15px;\">On peut commencer \u00e0 3:00! Il prend son temps, c&#8217;est bien! 9:50 pour <strong>Subdivision Surface<\/strong>, cool. 11;30 pour <strong>Set Shade Smooth<\/strong>. 18:10 pour <strong>Transform Geometry<\/strong>.<\/span><br \/><\/span><\/li>\n<li><span style=\"font-size: 18px;\"><a href=\"https:\/\/www.youtube.com\/watch?v=vknQ9Kn89Q4\" target=\"_blank\" rel=\"noopener\">Scale Elements et Extrude Mesh sur Geometry Nodes<\/a><\/span><br \/><span style=\"font-size: 15px;\">On ira jusqu&#8217;\u00e0 8:00! Jolie intro expliquant la cr\u00e9ation de diff\u00e9rents n\u0153uds et comment les relier, d\u00e9finir des valeurs et contraintes.<\/span><\/li>\n<li><span style=\"font-size: 18px;\"><a href=\"https:\/\/youtu.be\/ZyW8Dmv97TU\" target=\"_blank\" rel=\"noopener\">Geometry Nodes for Complete Beginners &#8211; Part 2<\/a><br \/><span style=\"font-size: 15px;\">Nettement moins facile mais int\u00e9ressant. Pas forc\u00e9ment pour des objets 3d \u00e0 imprimer sans difficult\u00e9.<\/span><br \/><\/span><\/li>\n<li><span style=\"font-size: 18px;\"><a href=\"https:\/\/www.youtube.com\/watch?v=4yrsAiTdMj4&amp;t=125s\" target=\"_blank\" rel=\"noopener\">Beginner Geometry Nodes Blender Tutorial<\/a>\u00a0(g\u00e9n\u00e9ration de pi\u00e8ces <b>Lego<\/b>)<br \/><span style=\"font-size: 15px;\">Il parle vraiment vite (vitesse de .75 dans <strong>Youtube<\/strong> aidera) et il faudrait ma\u00eetriser l&#8217;anglais!\u00a0 Beaucoup d&#8217;aspects techniques.<\/span><\/span><\/li>\n<li><span style=\"font-size: 15px;\"><span style=\"font-size: 15px;\"><span style=\"font-size: 18px;\"><a href=\"https:\/\/www.youtube.com\/watch?v=oQQRIMPDZtU\" target=\"_blank\" rel=\"noopener\">BLENDER : ACCUMULATION FIELD &#8211; GEOMETRY NODES<\/a><br \/><span style=\"font-size: 15px;\">Comment additionner des valeurs pour pouvoir les utiliser au fur et \u00e0 mesure de la progression g\u00e9om\u00e9trique.<\/span><br \/><\/span><\/span><\/span><\/li>\n<\/ul>\n<p>Les deux suivantes, magnifiques, super bien fait et un moyen d&#8217;\u00e9couter un bon et vrai anglais, lentement avec musique d&#8217;ambiance! A pleasure!\u00a0<\/p>\n<ul>\n<li><span style=\"font-size: 15px;\"><a href=\"https:\/\/www.youtube.com\/watch?v=R8B7Cen8FTI\" target=\"_blank\" rel=\"noopener\"><span style=\"font-size: 19px;\">A guide to blender\u2019s geometry node editor<\/span><\/a><\/span><\/li>\n<li><span style=\"font-size: 18px;\"><a href=\"https:\/\/www.youtube.com\/watch?v=a-4oCHe-hDE\" target=\"_blank\" rel=\"noopener\">A guide to attributes &amp; fields &#8211; blender geometry nodes<\/a><\/span><\/li>\n<\/ul>\n<p>Ces vid\u00e9os <b>Youtube <\/b>sont souvent beaucoup trop rapides surtout si on fait le travail dans <b>Blender <\/b>en m\u00eame temps. Il faut souvent stopper, noter la position et reprendre. Pour certaine vid\u00e9o: la ralentir marche bien.<\/p>\n<p>Des questions me taraudent avec cette mani\u00e8re de travailler pour la cr\u00e9ation de petits objets <b>3D <\/b>dont il faut reprendre apr\u00e8s impression, avec de mini corrections de dimension ou position: faut-il rester en\u00a0<b>Blender <\/b>classique, utiliser des scripts <b>Python <\/b>avec des variables contenant les positions ou les dimensions, ou alors corriger les valeurs des bo\u00eetes de n\u0153uds des <b>Geometry Nodes<\/b>!? Je devrais pouvoir y r\u00e9pondre bient\u00f4t avec un &#8220;ce n&#8217;est pas forc\u00e9ment la meilleure option&#8221;!\u00a0<\/p>\n<p>J&#8217;ai souvent travaill\u00e9 avec un pied \u00e0 coulisse d&#8217;une pr\u00e9cision de <b>0.1<\/b> mm pour de petits objets domestiques cass\u00e9s. Apr\u00e8s un premier essai d&#8217;impression <b>3D<\/b>, nous comprenons rapidement que juste une valeur de notre pi\u00e8ce doit \u00eatre adapt\u00e9e! Cela n\u00e9cessite une grosse pr\u00e9paration (il y a des exemples dans les vid\u00e9os ci-dessus).<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-248b88d e-flex e-con-boxed e-con e-parent\" data-id=\"248b88d\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-95f6062 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"95f6062\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0ac4cbb elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"0ac4cbb\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9118721\" data-id=\"9118721\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d77f249 elementor-widget elementor-widget-text-editor\" data-id=\"d77f249\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 22px;\"><b>Comment bien d\u00e9buter avec le Geometry Nodes<\/b><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8f1942e elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"8f1942e\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-55af32c\" data-id=\"55af32c\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-763e735 elementor-widget elementor-widget-text-editor\" data-id=\"763e735\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>L&#8217;utilisation d&#8217;outil comme <b>Gemini <\/b>s&#8217;av\u00e8re\u00a0\u00eatre un support incroyable pour d\u00e9buter et rechercher, par exemple, des n\u0153uds sp\u00e9cialis\u00e9s dans la fen\u00eatre <b>Shift-A<\/b> des <b>Geometry Nodes<\/b> de <b>Blender<\/b>.<\/p>\n<p>Il n&#8217;est pas possible d&#8217;activer les\u00a0<span style=\"font-weight: bold;\">Geometry Nodes<\/span>\u00a0dans\u00a0<span style=\"font-weight: bold;\">Blender<\/span>\u00a0sans avoir au moins un objet dans la <b>Collection <\/b>de la <b>Scene<\/b>. Souvent on commence par utiliser notre <b>Cube <\/b>du d\u00e9marrage, qui poss\u00e8de 8 sommets (vertices). Les vertices, des points, sont la base de travail des\u00a0<span style=\"font-weight: bold;\">Geometry Nodes<\/span>. Donc il me semble moins &#8220;confusant&#8221; de d\u00e9buter avec un <b>Single Vert<\/b>\u00a0au lieu d&#8217;un <b>Cube<\/b>! Ce ou ces dernier(s) seront toujours visibles dans la collection de la sc\u00e8ne \u00e0 droite<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e8bf3ef elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"e8bf3ef\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-26b0619\" data-id=\"26b0619\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fa80446 elementor-widget elementor-widget-text-editor\" data-id=\"fa80446\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Donc, au d\u00e9marrage de <b>Blender<\/b>, on retire notre cube venant par d\u00e9faut (<b>Object Mode<\/b>, clic sur le cube et delete)! Si nous gardions ce <b>Cube<\/b> dans notre espace en<b> Edit Mode,\u00a0<\/b>nous pourrions lui appliquer un <b>Modifier Geometry Nodes<\/b> et se retrouver dans la m\u00eame configuration que d\u00e9crite ci-dessous.\u00a0<\/p>\n<p>Dans le menu d&#8217;<b>Object Mode<\/b> choisir <b>Add<\/b>, <b>Mesh <\/b>et <b>Single Vert<\/b>! Le mode passe automatiquement en <b>Edit Mode<\/b> et <b>Vert <\/b>appara\u00eet dans la <b>Collection <\/b>de la <b>Scene<\/b>. Pour l&#8217;instant on ne s&#8217;occupera plus de ce premier objet n\u00e9cessaire pour activer les <b>Geometry Nodes<\/b>.<\/p>\n<p>Dans le menu sup\u00e9rieur de <b>Blender<\/b>, tout en haut \u00e0 droite et juste \u00e0 gauche de <b>Scripting<\/b>, nous cliquons sur <b>Geometry Nodes<\/b>\u00a0pour ouvrir son espace de travail d\u00e9di\u00e9, et ensuite le bouton <b>New <\/b>en haut de sa fen\u00eatre.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-2484e8d e-flex e-con-boxed e-con e-parent\" data-id=\"2484e8d\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4c08b5d e-con-full e-flex e-con e-child\" data-id=\"4c08b5d\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-05eed4d e-con-full e-flex e-con e-child\" data-id=\"05eed4d\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0aa8faf elementor-widget elementor-widget-image\" data-id=\"0aa8faf\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" loading=\"lazy\" width=\"800\" height=\"154\" src=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/EntreeSortie.jpg\" class=\"attachment-large size-large wp-image-13839\" alt=\"\" srcset=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/EntreeSortie.jpg 800w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/EntreeSortie-300x58.jpg 300w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/EntreeSortie-768x148.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-97b915c e-con-full e-flex e-con e-child\" data-id=\"97b915c\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b46298e elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"b46298e\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-eb68f41\" data-id=\"eb68f41\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-07ee10b elementor-widget elementor-widget-text-editor\" data-id=\"07ee10b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>C&#8217;est l\u00e0 qu&#8217;apparaisse les deux <b>Group Input<\/b> et <strong>Group Output<\/strong>&nbsp;dans la fen\u00eatre de l&#8217;\u00e9diteur des <b>Geometry Nodes<\/b> dont on va parler.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-aff9c68 e-flex e-con-boxed e-con e-parent\" data-id=\"aff9c68\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-08dd423 e-con-full e-flex e-con e-child\" data-id=\"08dd423\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6c64480 elementor-widget elementor-widget-image\" data-id=\"6c64480\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" loading=\"lazy\" width=\"800\" height=\"776\" src=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/GN_cube1.jpg\" class=\"attachment-large size-large wp-image-13598\" alt=\"\" srcset=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/GN_cube1.jpg 800w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/GN_cube1-300x291.jpg 300w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/GN_cube1-768x745.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-215bed0 e-con-full e-flex e-con e-child\" data-id=\"215bed0\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8edcf54 e-con-full e-flex e-con e-child\" data-id=\"8edcf54\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-40f1736 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"40f1736\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-728233d elementor-widget elementor-widget-text-editor\" data-id=\"728233d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Avec la fl\u00e8che du curseur dans la fen\u00eatre inf\u00e9rieure de notre plan de travail des <b>Geometry Nodes<\/b> nous entrons la touche <u><b style=\"font-size: 17px;\">Shift-A essentielle \u00e0 la cr\u00e9ation de <\/b><span style=\"font-size: 17px;\"><b>n\u0153ud<\/b><\/span><b style=\"font-size: 17px;\">s<\/b><\/u>.<\/p>\n<p>On utilisera constamment le <b>Search <\/b>et commencerons par <b>Cube<\/b>, un n\u0153ud\u00a0<b>Cube<\/b>.<\/p>\n<p>Ce pas pas trop facile de jouer avec cette fen\u00eatre et ses bo\u00eetes de travail, et on s&#8217;\u00e9nervera au un peu d\u00e9but pour d\u00e9placer correctement les bo\u00eetes et le cube dont on a donn\u00e9 un 10mm plus adapt\u00e9 pour des objets <b>3D<\/b> \u00e0 imprimer!<\/p>\n<p>On va relier le bouton de relation de sortie\u00a0<b>Mesh <\/b>de <b>Cube <\/b>\u00e0 la bo\u00eete <b>Group Output<\/b>. J&#8217;ai effac\u00e9 le <b>Group Input<\/b> inutile ici.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-45ba471 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"45ba471\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-437de9c\" data-id=\"437de9c\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c650978 elementor-widget elementor-widget-text-editor\" data-id=\"c650978\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Voil\u00e0, on a cr\u00e9\u00e9 un premier cube qui appara\u00eet dans la fen\u00eatre <b>User Perspective<\/b>\u00a0de l&#8217;espace de travail traditionnel de l&#8217;<b>Edit Mode<\/b>. C&#8217;est le moment de sauver son premier projet <b>Blender <\/b>d\u00e9di\u00e9 au <b>Geometry Nodes<\/b> dans un r\u00e9pertoire tout neuf de pr\u00e9f\u00e9rence. Un export <b>STL <\/b>serait tout \u00e0 fait possible pour l&#8217;importer dans <a style=\"background-color: #eeeeee;\" href=\"https:\/\/www.boichat.ch\/wordpress\/2023\/01\/30\/imprimante-3d-creality-ender-3-v2-neo\/#a_cura\" target=\"_blank\" rel=\"noopener\"><b>Ultimaker<\/b>\u00a0<\/a><b><a href=\"https:\/\/www.boichat.ch\/wordpress\/2023\/01\/30\/imprimante-3d-creality-ender-3-v2-neo\/#a_cura\">Cura<\/a><\/b> (par exemple) avant impression <b>3D <\/b>&#8230; mais cela reste un simple cube!<\/p>\n<p>Non visible sur cette image, nous avons une fen\u00eatre &#8220;Speadsheet&#8221; o\u00f9 nous avons la liste de tous les points g\u00e9n\u00e9r\u00e9s. Elle est juste l\u00e0 pour analyser les valeurs des points du r\u00e9sultat.<\/p>\n<p>A tout moment on peut repasser dans un plan de travail <b>Blender <\/b>traditionnel en <b>Object Mode<\/b> avec le menu <b>Layout <\/b>et\u00a0<b>Geometry Nodes<\/b> pour revenir. Corriger notre cube dans ces deux pr\u00e9sentations pourraient entra\u00eener de la confusion si on ne comprend pas vraiment ces deux modes de conception! Cependant des composants de notre objet final peuvent tr\u00e8s bien \u00eatre d\u00e9finis dans l&#8217;un et\/ou l&#8217;autre des plans de travail. Dans l&#8217;\u00e9diteur <b>Geometry Nodes<\/b> on peut changer le <b>Z<\/b> en <b>20 <\/b>mm pour se convaincre que cela marche.<\/p>\n<p>Pour couper le lien vert entre <b>Mesh <\/b>et <b>Geometry <\/b>j&#8217;aime bien le ciseau <b>Ctrl <\/b>en tenant le bouton droit de la souris: le cube dispara\u00eetra! Plus rien ne rentre dans le n\u0153ud <b>Group Output<\/b>, la sortie!<\/p>\n<p>Un\u00a0<span style=\"font-weight: bold;\">Modifier Geometry Nodes<\/span>\u00a0a aussi \u00e9t\u00e9 cr\u00e9\u00e9 dans l&#8217;objet\u00a0<span style=\"font-weight: bold;\">Vert\u00a0<\/span>cr\u00e9\u00e9 initialement.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-16ba573 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"16ba573\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1001ffa\" data-id=\"1001ffa\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2abf9c5 elementor-widget elementor-widget-text-editor\" data-id=\"2abf9c5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Lorsque on ajoute un modificateur <b>Geometry Nodes<\/b> \u00e0 un objet primitif existant comme un <b>Cube <\/b>(<b>add Modifier<\/b>, <b>Geometry Nodes<\/b>, et <b>New <\/b>dans la fen\u00eatre <b>Geometry Nodes<\/b>) nous obtenons deux n\u0153uds reli\u00e9s entre eux : <b>Group Input<\/b> (r\u00e9cup\u00e9rant la g\u00e9om\u00e9trie de l&#8217;objet cr\u00e9\u00e9 avec le <b>Blender &#8220;<\/b>classique&#8221;, notre cube) sur lequel on a mis le modificateur, et avec <b>Group Output<\/b> (ce qui sort). Le r\u00e9sultat est pr\u00e9sent\u00e9: le maillage par d\u00e9faut est donc la g\u00e9om\u00e9trie de l&#8217;objet d&#8217;origine avec 8 points (sommets ici).<\/p>\n<p>Si maintenant on coupe le lien de <b>Group Input<\/b>, il n&#8217;y a plus de cube \u00e0 la sortie. Si on voulait voir un nouveau cube, il faudrait le cr\u00e9er avec un n\u0153ud cube ou alors une g\u00e9om\u00e9trie enti\u00e8rement nouvelle voire complexe cr\u00e9\u00e9 dans l&#8217;\u00e9diteur des\u00a0<b>Geometry Nodes<\/b>. On y viendra! Positionner un cube et le redimensionner avec les <b>Geometry Nodes<\/b> de Blender, c&#8217;est une excellente d\u00e9marche, pour les bases de flux de travail proc\u00e9dural.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-ea7b578 e-flex e-con-boxed e-con e-parent\" data-id=\"ea7b578\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-5e5ac92 e-con-full e-flex e-con e-child\" data-id=\"5e5ac92\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d5ad18c elementor-widget elementor-widget-image\" data-id=\"d5ad18c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" loading=\"lazy\" width=\"744\" height=\"1024\" src=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/ConeCube-744x1024.jpg\" class=\"attachment-large size-large wp-image-13841\" alt=\"\" srcset=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/ConeCube-744x1024.jpg 744w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/ConeCube-218x300.jpg 218w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/ConeCube-768x1057.jpg 768w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/ConeCube.jpg 800w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e58e0cd e-con-full e-flex e-con e-child\" data-id=\"e58e0cd\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4a5044f e-con-full e-flex e-con e-child\" data-id=\"4a5044f\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a045f21 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"a045f21\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8fe42ac elementor-widget elementor-widget-text-editor\" data-id=\"8fe42ac\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Un de mes premiers &#8220;exercice&#8221; de compr\u00e9hension!\u00a0<\/p>\n<p>Le <b>Cube <\/b>vient du cube d&#8217;origine cr\u00e9\u00e9 dans <b>Blender <\/b>et conserv\u00e9. Le c\u00f4ne, lui, est cr\u00e9\u00e9 dans l&#8217;espace de travail des <b>Geometric Nodes<\/b> avec <b>Shift-A cone<\/b>.\u00a0 J&#8217;ai adapt\u00e9 <b>Radius <\/b>\u00e0 <b>10 <\/b>et <b>Depth <\/b>\u00e0 <b>25 <\/b>pour qu&#8217;il sorte du cube (sinon invisible, sauf si on passe en Viewport <b>X-Ray<\/b>).<\/p>\n<p>Le\u00a0<span style=\"font-weight: bold;\">Group Input<\/span>\u00a0c&#8217;est l&#8217;entr\u00e9e, ce qui vient de l'&#8221;ext\u00e9rieur&#8221;, notre cube. Le noeud <b>Join Geometry<\/b> (<b>Shift-A<\/b>) permet de joindre notre cube avec les maillages cr\u00e9\u00e9s dans l&#8217;espace des\u00a0<span style=\"font-weight: bold;\">Geometric Nodes.<\/span><\/p>\n<p>Il n&#8217;y a pas ici de positionnement d\u00e9fini, mais on pourra jouer avec le bouton gauche de la souris et les &lt; &gt; de <b>Depth,\u00a0<\/b>dans le n\u0153ud\u00a0<b>Cone,\u00a0<\/b>pour voir le c\u00f4ne se d\u00e9placer et\/ou s&#8217;agrandir dans la fen\u00eatre sup\u00e9rieure!<\/p>\n<p>Un noeud <b>Set Position<\/b> \u00e0 la sortie de <b>Group Input<\/b>\u00a0(utiliser <b>Y<\/b> et <b>Z<\/b>) et un autre \u00e0 celui du <b>Cone <\/b>(utiliser <b>Y<\/b>) permettrait de poser le c\u00f4ne sur le cube. On utilisera l&#8217;entr\u00e9e (<strong>socket<\/strong>: prise sur les noeuds) <b>Geometry <\/b>des deux\u00a0<span style=\"font-weight: bold;\">Set Position<\/span>.<\/p>\n<p>Des noeuds comme <b>Cone<\/b>, <b>Cube<\/b>, ou encore <b>Cylinder<\/b>, et aussi\u00a0<b>Set Position<\/b> ou <b>Transform Geometry<\/b>, poss\u00e8dent des prises d&#8217;entr\u00e9es pour d&#8217;autres noeuds comme\u00a0<b>Vector <\/b>ou <b>Add <\/b>o\u00f9 il est possible de sp\u00e9cifier autrement des valeurs et op\u00e9rations arithm\u00e9tiques. Je devrais montrer quelques exemples.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1215f01 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"1215f01\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bb7874f\" data-id=\"bb7874f\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-40beffd elementor-widget elementor-widget-text-editor\" data-id=\"40beffd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Dans mon article\u00a0<a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/01\/23\/imprimante-3d-creality-ender-3-v2\/#a_pied_coulisse\" target=\"_blank\" rel=\"noopener\">Imprimante 3D &#8211; Creality Ender 3 V2 j&#8217;explique l&#8217;utilisation d&#8217;un pied \u00e0 coulisse<\/a>. Cela me permet de d\u00e9finir avec pr\u00e9cision les diff\u00e9rentes dimensions de mes objets <strong>3D<\/strong>. Dans l&#8217;exemple ci-dessus le cube est d\u00e9fini hors des <strong>Geometry Nodes<\/strong>. En cas de soucis, il faudrait donc retourner en <strong>Objet<\/strong> ou <strong>Edit Mode<\/strong>, ou alors int\u00e9grer le noeud <strong>Transform Geometry<\/strong> \u00e0 la sortie de <strong>Group Input<\/strong> et jouer avec le <strong>Scale<\/strong> (voire la <strong>Rotation<\/strong> dans d&#8217;autres situations). Ce sera sans doute tout un art d&#8217;y ajouter des noeuds comme\u00a0<span style=\"font-weight: bold;\">Vector\u00a0<\/span>ou\u00a0<span style=\"font-weight: bold;\">Add<\/span>, sans que la sauce tourne en spaghetti.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-2d56522 e-flex e-con-boxed e-con e-parent\" data-id=\"2d56522\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-785149d elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"785149d\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-957e072 elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"957e072\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-971df6c\" data-id=\"971df6c\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7e06c0f elementor-widget elementor-widget-text-editor\" data-id=\"7e06c0f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><b><i>En travail et \u00e0 suivre:<\/i><\/b><\/p>\n<p><i>\u00a0Une excellente mani\u00e8re de d\u00e9buter avec les <b>Geometry Nodes<\/b>, c&#8217;est d&#8217;instancier plusieurs cubes et de varier leurs positions et leurs dimensions (<b>Accumulation Field<\/b>\u00a0est un exemple).\u00a0\u00c9tant\u00a0moi-m\u00eame du monde <b>POO <\/b>(<\/i><span style=\"color: #202122; font-family: sans-serif; font-size: 16px; background-color: #ffffff;\">programmation orient\u00e9e objet<i>) c&#8217;est le bon moment de passer aux noeuds d&#8217;instances de points pour ajouter des maillages plusieurs fois sans les dupliquer!\u00a0<\/i><\/span><span style=\"color: #202122; font-family: sans-serif;\"><i>A<\/i><\/span><span style=\"color: #202122; font-family: sans-serif;\"><i>vec les <b>Geometry Nodes<\/b> i<\/i><\/span><i style=\"color: #202122; font-family: sans-serif; font-size: 16px;\">l n&#8217;y a pas de moyens de cr\u00e9er des boucles et d&#8217;utiliser des variables.<\/i><span style=\"color: #202122; font-family: sans-serif;\"><i>\u00a0C&#8217;est impossible d&#8217;ex\u00e9cuter un bloc de code plusieurs fois en modifiant des variables pour d\u00e9finir par exemple la position ou la dimension de cubes successifs encha\u00een\u00e9s!\u00a0<\/i><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-3fe4b80 e-flex e-con-boxed e-con e-parent\" data-id=\"3fe4b80\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-71e877c elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"71e877c\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-33efb9b elementor-section-boxed ang-section-padding-initial elementor-section-height-default elementor-section-height-default\" data-id=\"33efb9b\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ec4e25a\" data-id=\"ec4e25a\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-baaa08c elementor-widget elementor-widget-text-editor\" data-id=\"baaa08c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Dans mon article <b><a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/01\/23\/imprimante-3d-creality-ender-3-v2\/\" target=\"_blank\" rel=\"noopener\">Imprimante 3D &#8211; Creality Ender 3 V2<\/a><\/b> sous&nbsp;<strong><a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/01\/23\/imprimante-3d-creality-ender-3-v2\/#a_comparaison\" target=\"_blank\" rel=\"noopener\">Comparaison des logiciels CAD<\/a><\/strong> il y a un&nbsp;pi\u00e8ce de tenue de fen\u00eatre qui pourrait s&#8217;av\u00e9rer \u00eatre un excellent exercice! Cette pi\u00e8ce mesur\u00e9e avec un pied \u00e0 coulisse doit \u00eatre vraiment pr\u00e9cise et solide (densit\u00e9 dans le slicer)!<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-0faac04 e-flex e-con-boxed e-con e-parent\" data-id=\"0faac04\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-ea402a5 e-con-full e-flex e-con e-child\" data-id=\"ea402a5\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6dfcdd7 elementor-widget elementor-widget-image\" data-id=\"6dfcdd7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" loading=\"lazy\" width=\"800\" height=\"478\" src=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/AttacheFenetre1.jpg\" class=\"attachment-large size-large wp-image-13881\" alt=\"\" srcset=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/AttacheFenetre1.jpg 800w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/AttacheFenetre1-300x179.jpg 300w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/AttacheFenetre1-768x459.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-03f5ebc e-con-full e-flex e-con e-child\" data-id=\"03f5ebc\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-27e3359 e-con-full e-flex e-con e-child\" data-id=\"27e3359\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0141a30 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"0141a30\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a437cf5 elementor-widget elementor-widget-text-editor\" data-id=\"a437cf5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>En <b>Object Mode<\/b>, c&#8217;est facile!<\/p>\n<p>Nous avons 9 cubes, dont un avec rotation.<br>Les dimensions sont reprises de nos valeurs mesur\u00e9es avec un pied \u00e0 coulisse.<br>C&#8217;est facile de corriger avec les entr\u00e9es des valeurs \u00e0 droite en v\u00e9rifiant que les pi\u00e8ces collent bien. La position globale n&#8217;est pas importante: c&#8217;est le logiciel du slicer de l&#8217;imprimante 3D qui fera le travail!&nbsp;<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-634aa6d e-flex e-con-boxed e-con e-parent\" data-id=\"634aa6d\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-c7108a2 e-con-full e-flex e-con e-child\" data-id=\"c7108a2\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0fef62e elementor-widget elementor-widget-image\" data-id=\"0fef62e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" loading=\"lazy\" width=\"600\" height=\"837\" src=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/AttacheFenetre2.jpg\" class=\"attachment-large size-large wp-image-13882\" alt=\"\" srcset=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/AttacheFenetre2.jpg 600w, https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2025\/08\/AttacheFenetre2-215x300.jpg 215w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2091535 e-con-full e-flex e-con e-child\" data-id=\"2091535\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a602a79 e-con-full e-flex e-con e-child\" data-id=\"a602a79\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-21d4873 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"21d4873\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8dfc82f elementor-widget elementor-widget-text-editor\" data-id=\"8dfc82f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Pas trop facile avec les\u00a0<b>Geometry Nodes<\/b>.<\/p>\n<p>Il nous faut deux <b>Vector<\/b>s, c&#8217;est plus pratique, pour les valeurs de dimensions, un <b>Cube<\/b>\u00a0et un <b>Transform Geometry<\/b>.<\/p>\n<p>J&#8217;ai ensuite copi\u00e9 ces 4 noeuds et je n&#8217;ai seulement que deux morceaux sur les 9. C&#8217;est relativement facile d&#8217;adapter les valeurs!<\/p>\n<p>Conclusion pour ce cas pr\u00e9cis: c&#8217;est beaucoup plus facile en\u00a0<span style=\"font-weight: bold;\">Object Mode!<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7997d9b elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"7997d9b\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a9b0dcb elementor-widget elementor-widget-spacer\" data-id=\"a9b0dcb\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e540f59 elementor-widget elementor-widget-text-editor\" data-id=\"e540f59\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 19px;\">En mode <b>Blender Edit Object<\/b>, il y a des fonctions ultra-simples comme <b>Extrude<\/b>, <b>Inset<\/b>, <b>Bevel <\/b>et autres <b>Smooth <\/b>qui sont tr\u00e8s utiles pour des objets \u00e0 but d&#8217;impression. Donc il faut y r\u00e9fl\u00e9chir avant de construire ces choses, m\u00eame belles, avec les\u00a0<span style=\"font-weight: bold;\">Geometry Nodes<\/span>.<\/span><\/p>\n<p>Donc peut-\u00eatre retour \u00e0 mon<br \/><span style=\"font-size: 18px;\"><b><a href=\"https:\/\/www.boichat.ch\/wordpress\/2021\/05\/05\/un-tuto-blender-super-rapide-pour-impression-3d\/\" target=\"_blank\" rel=\"noopener\">Un Tuto Blender super rapide pour impression 3D<\/a><\/b><\/span>.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e673a43 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"e673a43\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Imprimante 3D &#8211; Blender, Python, Visual Studio Code et\u00a0Geometry Nodes Geometry Nodes\u00a0Commandes T et N apr\u00e8s Scripting!\u00a0Un d\u00e9 \u00e0 jouer! A l&#8217;origine ce blog, datant&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"om_disable_all_campaigns":false,"ngg_post_thumbnail":0,"footnotes":""},"categories":[24],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes - Jean-Bernard Boichat<\/title>\n<meta name=\"description\" content=\"Un des Blogs de Jean-Bernard Boichat consacr\u00e9 \u00e0 la mod\u00e9lisation 3D avec Blender, Python, Visual Studio Code et les Geometrics Nodes. Contient une description des modules bpy et bmesh.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes - Jean-Bernard Boichat\" \/>\n<meta property=\"og:description\" content=\"Un des Blogs de Jean-Bernard Boichat consacr\u00e9 \u00e0 la mod\u00e9lisation 3D avec Blender, Python, Visual Studio Code et les Geometrics Nodes. Contient une description des modules bpy et bmesh.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Jean-Bernard Boichat\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-04T14:50:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-17T14:07:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2021\/08\/attacheVis2-1024x409.jpg\" \/>\n<meta name=\"author\" content=\"Jean-Bernard Boichat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jean-Bernard Boichat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/\"},\"author\":{\"name\":\"Jean-Bernard Boichat\",\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751\"},\"headline\":\"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes\",\"datePublished\":\"2025-08-04T14:50:57+00:00\",\"dateModified\":\"2026-02-17T14:07:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/\"},\"wordCount\":5490,\"publisher\":{\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751\"},\"articleSection\":[\"Imprimante 3D\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/\",\"url\":\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/\",\"name\":\"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes - Jean-Bernard Boichat\",\"isPartOf\":{\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#website\"},\"datePublished\":\"2025-08-04T14:50:57+00:00\",\"dateModified\":\"2026-02-17T14:07:24+00:00\",\"description\":\"Un des Blogs de Jean-Bernard Boichat consacr\u00e9 \u00e0 la mod\u00e9lisation 3D avec Blender, Python, Visual Studio Code et les Geometrics Nodes. Contient une description des modules bpy et bmesh.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.boichat.ch\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#website\",\"url\":\"https:\/\/www.boichat.ch\/wordpress\/\",\"name\":\"Jean-Bernard Boichat\",\"description\":\"Mon site WordPress\",\"publisher\":{\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.boichat.ch\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751\",\"name\":\"Jean-Bernard Boichat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/862886ce35a52b9d13595e18ac3c3ea5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/862886ce35a52b9d13595e18ac3c3ea5?s=96&d=mm&r=g\",\"caption\":\"Jean-Bernard Boichat\"},\"logo\":{\"@id\":\"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes - Jean-Bernard Boichat","description":"Un des Blogs de Jean-Bernard Boichat consacr\u00e9 \u00e0 la mod\u00e9lisation 3D avec Blender, Python, Visual Studio Code et les Geometrics Nodes. Contient une description des modules bpy et bmesh.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes - Jean-Bernard Boichat","og_description":"Un des Blogs de Jean-Bernard Boichat consacr\u00e9 \u00e0 la mod\u00e9lisation 3D avec Blender, Python, Visual Studio Code et les Geometrics Nodes. Contient une description des modules bpy et bmesh.","og_url":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/","og_site_name":"Jean-Bernard Boichat","article_published_time":"2025-08-04T14:50:57+00:00","article_modified_time":"2026-02-17T14:07:24+00:00","og_image":[{"url":"https:\/\/www.boichat.ch\/wordpress\/wp-content\/uploads\/2021\/08\/attacheVis2-1024x409.jpg"}],"author":"Jean-Bernard Boichat","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Jean-Bernard Boichat","Dur\u00e9e de lecture estim\u00e9e":"27 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/#article","isPartOf":{"@id":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/"},"author":{"name":"Jean-Bernard Boichat","@id":"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751"},"headline":"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes","datePublished":"2025-08-04T14:50:57+00:00","dateModified":"2026-02-17T14:07:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/"},"wordCount":5490,"publisher":{"@id":"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751"},"articleSection":["Imprimante 3D"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/","url":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/","name":"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes - Jean-Bernard Boichat","isPartOf":{"@id":"https:\/\/www.boichat.ch\/wordpress\/#website"},"datePublished":"2025-08-04T14:50:57+00:00","dateModified":"2026-02-17T14:07:24+00:00","description":"Un des Blogs de Jean-Bernard Boichat consacr\u00e9 \u00e0 la mod\u00e9lisation 3D avec Blender, Python, Visual Studio Code et les Geometrics Nodes. Contient une description des modules bpy et bmesh.","breadcrumb":{"@id":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.boichat.ch\/wordpress\/2025\/08\/04\/imprimante-3d-blender-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.boichat.ch\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Imprimante 3D \u2013 Blender, Python, Visual Studio Code et Geometric Nodes"}]},{"@type":"WebSite","@id":"https:\/\/www.boichat.ch\/wordpress\/#website","url":"https:\/\/www.boichat.ch\/wordpress\/","name":"Jean-Bernard Boichat","description":"Mon site WordPress","publisher":{"@id":"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.boichat.ch\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/fe6328cc5b74b8a6e8d841285a928751","name":"Jean-Bernard Boichat","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/862886ce35a52b9d13595e18ac3c3ea5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/862886ce35a52b9d13595e18ac3c3ea5?s=96&d=mm&r=g","caption":"Jean-Bernard Boichat"},"logo":{"@id":"https:\/\/www.boichat.ch\/wordpress\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/posts\/4018"}],"collection":[{"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/comments?post=4018"}],"version-history":[{"count":0,"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/posts\/4018\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=4018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=4018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.boichat.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=4018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}