{"id":528,"date":"2014-11-14T00:26:05","date_gmt":"2014-11-13T23:26:05","guid":{"rendered":"http:\/\/www.blenderclick.it\/wordpress\/?p=528"},"modified":"2014-11-14T00:26:05","modified_gmt":"2014-11-13T23:26:05","slug":"python-appunti-di-studio-2","status":"publish","type":"post","link":"https:\/\/www.blenderclick.it\/wordpress\/python-appunti-di-studio-2\/","title":{"rendered":"Python &#8211; Appunti di studio 2"},"content":{"rendered":"<p>Python \u00e8 un linguaggio di programmazione in grado di aprirci le porte delle stanze pi\u00f9 segrete di Blender (e non solo: anche molte aziende internazionali ne fanno uso per la realizzazione di applicazioni scientifiche, giochi, applicazioni per il web ecc.)<br \/>\nIl mio obiettivo per cui scrivo questi appunti \u00e8 quello di imparare, e contemporaneamente condividere, il modo in cui Python pu\u00f2 essere utilizzato all\u2019interno di Blender.<br \/>\nNon so bene quale sar\u00e0 la meta definitiva, ma scrivere un addon gi\u00e0 non sarebbe male. Se poi fosse anche utile a qualcosa\u2026 chiss\u00e0!<\/p>\n<p>Sul sito ufficiale www.python.org potrete trovare (in inglese) una marea di informazioni. Vi consiglio di farci un giretto.<\/p>\n<p>Python \u00e8 un linguaggio di programmazione interpretato. Questo vuol dire che per poter essere eseguito \u00e8 necessario avere un interprete. All\u2019interno di Blender questo interprete si trova nell\u2019editor Python Console ed \u00e8 interattivo. Possiamo quindi\u00a0scrivere i comandi per farli eseguire istantaneamente. Naturalmente questo non \u00e8 il modo pi\u00f9 comodo per eseguire programmi complessi, ma vedremo pi\u00f9 avanti come fare per salvare i nostri programmi su un file a parte per farli poi eseguire a nostro piacimento.<\/p>\n<p><a href=\"http:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0002.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-530\" src=\"http:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0002-1024x273.jpg\" alt=\"141114-0002\" width=\"604\" height=\"161\" srcset=\"https:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0002-1024x273.jpg 1024w, https:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0002-300x80.jpg 300w, https:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0002.jpg 1720w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a><br \/>\nUn esempio di esecuzione istantanea di comandi l\u2019abbiamo visto nella prima puntata di questa serie di appunti. Ora vedremo come trovare spunti per muoverci da soli.<\/p>\n<p>Apriamo un nuovo file con il cubo di default selezionato e premiamo [X] per eliminarlo, ma anzich\u00e9 fare click su OK teniamo fermo il cursore del mouse finch\u00e9 non comparir\u00e0 il tooltip che ci indica il nome del comando che stiamo per eseguire e la relativa funzione richiamata in Python (se non vi compare potete abilitarla in User Prefereces-&gt;Interface-&gt;Python Tooltips).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-529\" src=\"http:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0001-1024x750.jpg\" alt=\"141114-0001\" width=\"604\" height=\"442\" srcset=\"https:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0001-1024x750.jpg 1024w, https:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0001-300x220.jpg 300w, https:\/\/www.blenderclick.it\/wordpress\/wp-content\/uploads\/2014\/11\/141114-0001.jpg 1200w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/p>\n<p>Vedrete che la funzione richiamata \u00e8 bpy.ops.object.delete(use_global=False)<\/p>\n<p>Ora fate una prova: anzich\u00e9 fare click su OK andate nella Python Console ed inserite il comando che avete appena letto.<\/p>\n<p>Fatto! Il cubo \u00e8 stato eliminato!<\/p>\n<p>Dovreste aver capito che \u00e8 possibile ricavare tantissimi comandi semplicemente leggendoli nelle tooltips, facile no?<\/p>\n<p>Bene, abbiamo imparato un po\u2019 di cose, ma ancora non sappiamo niente di questo linguaggio. Quali sono i suoi \u201cvocaboli\u201d? E soprattutto: quali sono le \u201cregole grammaticali\u201d?<\/p>\n<p>Da qui, e per le prossime puntate, parte ora un percorso un po\u2019 noioso, ma che varr\u00e0 la pena seguire. Soprattutto cercheremo di mettere in pratica ogni cosa che impareremo in modo da non addormentarci sulla tastiera.<\/p>\n<p><strong>I blocchi di codice nidificati.<\/strong><br \/>\nCosa sono i blocchi di codice nidificati? Senza volerlo ne avete gi\u00e0 fatto uso nella prima tappa del nostro viaggio (<a title=\"Python \u2013 Appunti di studio 1\" href=\"http:\/\/www.blenderclick.it\/wordpress\/?p=476\">Appunti di studio 1<\/a>) quando avete usato un ciclo <em>for<\/em>.<br \/>\nDetta in maniera un po\u2019 riduttiva, si tratta di una serie di istruzioni racchiuse all\u2019interno di un\u2019altra istruzione. Rivediamolo:<\/p>\n<p><em>for x in range(500): bpy.ops.mesh.primitive_uv_sphere_add(view_align=False, enter_editmode=False, location=((x\/10)*sin(x), (x\/10)\/cos(x), (x\/10)*cos(x)), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))<\/em><\/p>\n<p>Con questo lunghissimo comando abbiamo detto:<\/p>\n<p><em>per ogni x in un intervallo da 0 a 499 esegui questo comando: aggiungi una mesh di tipo UVsphere utilizzando le seguenti coordinate e le seguenti opzioni (elenco di opzioni)<\/em><\/p>\n<p>Quindi il comando <em>bpy.ops.mesh.primitive_uv_sphere_add<\/em> (indovinate ora come avevo fatto a trovarlo?) era nidificato all\u2019interno del comando <em>for<\/em>.<\/p>\n<p>Quando scriviamo codice contenente comandi nidificati dobbiamo usare l\u2019indentazione utilizzando 4 spazi (sempre 4 spazi, non chiediamoci il motivo, non ci interessa).<br \/>\nPer inserire delle note nel codice utilizziamo il #<\/p>\n<p>Esempio di codice nidificato:<\/p>\n<p><em># Questa \u00e8 una nota<\/em><br \/>\n<em> for n in range(10): # per ogni n compreso tra 0 e 9 eseguiamo:<\/em><br \/>\n<em>\u00a0 \u00a0 for m in range (10): # per ogni m compreso tra 0 e 9 eseguiamo:<\/em><br \/>\n<em>\u00a0 \u00a0 \u00a0 \u00a0 print (m * n) # stampiamo a video il prodotto tra m ed n<\/em><\/p>\n<p>Potete copiare e incollare il codice direttamente nella Python Console e premere INVIO due volte per eseguirlo.<\/p>\n<p>ESERCIZIO: provate a usare una volta 4 spazi e una volta 3 spazi, o la tabulazione per vedere cosa succede.<\/p>\n<p>Alla prossima!<\/p>\n<p><a title=\"Python \u2013 Appunti di studio 1\" href=\"http:\/\/www.blenderclick.it\/wordpress\/?p=476\">&lt; Appunti di studio 1<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python \u00e8 un linguaggio di programmazione in grado di aprirci le porte delle stanze pi\u00f9 segrete di Blender (e non solo: anche molte aziende internazionali ne fanno uso per la realizzazione di applicazioni scientifiche, giochi, applicazioni per il web ecc.) Il mio obiettivo per cui scrivo questi appunti \u00e8 quello di imparare, e contemporaneamente condividere, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[1],"tags":[157],"class_list":["post-528","post","type-post","status-publish","format-standard","hentry","category-bc","tag-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2KpAs-8w","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/posts\/528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/comments?post=528"}],"version-history":[{"count":3,"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/posts\/528\/revisions"}],"predecessor-version":[{"id":533,"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/posts\/528\/revisions\/533"}],"wp:attachment":[{"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/media?parent=528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/categories?post=528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blenderclick.it\/wordpress\/wp-json\/wp\/v2\/tags?post=528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}