{"id":2962,"date":"2008-12-11T16:15:14","date_gmt":"2008-12-11T15:15:14","guid":{"rendered":"http:\/\/www.hyperbate.com\/dernier\/?p=2962"},"modified":"2013-05-07T22:57:00","modified_gmt":"2013-05-07T20:57:00","slug":"processing-quinzieme-cours","status":"publish","type":"post","link":"https:\/\/hyperbate.fr\/dernier\/?p=2962","title":{"rendered":"Processing, quinzi\u00e8me cours"},"content":{"rendered":"<p>Avant-derni\u00e8re le\u00e7on de cette initiation progressive, parlons \u00e0 pr\u00e9sent de la manipulation des textes. Ce que Processing propose en la mati\u00e8re est plut\u00f4t sommaire et nous en feront vite le tour.<br \/>\nPour \u00e9crire du texte dans Processing, il faut commencer par choisir dans quelle police de caract\u00e8re et dans quel corps on souhaite l&rsquo;\u00e9crire, car notre logiciel ne sait pas manipuler le texte autrement.<br \/>\nLa premi\u00e8re \u00e9tape est de \u00ab\u00a0rast\u00e9riser\u00a0\u00bb<sup><a href=\"#footnote_1_2962\" id=\"identifier_1_2962\" class=\"footnote-link footnote-identifier-link\" title=\"rast&eacute;riser signifier &laquo;&nbsp;transformer en bitmap&nbsp;&raquo;. C&rsquo;est le contraire de la vectorisation.\">1<\/a><\/sup> la typographie que l&rsquo;on veut utiliser, et pour \u00e7a, un peu comme avec les images que nous devions importer, nous devons demander \u00e0 Processing de \u00ab\u00a0cr\u00e9er\u00a0\u00bb la typo, depuis le menu \u00ab\u00a0tools\u00a0\u00bb.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2964\" alt=\"\" src=\"\/dernier\/files\/2008\/12\/create_font.png\" width=\"530\" height=\"149\" srcset=\"https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/create_font.png 530w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/create_font-300x84.png 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><\/p>\n<p>Le mot \u00ab\u00a0cr\u00e9er\u00a0\u00bb n&rsquo;est pas un abus car Processing va fabriquer une police de caract\u00e8res \u00e0 son propre format (le format vlw) \u00e0 partir de celle qui est charg\u00e9e dans le syst\u00e8me. Cette police sera une police \u00ab\u00a0bitmap\u00a0\u00bb, c&rsquo;est \u00e0 dire non vectorielle, inadapt\u00e9e aux changements d&rsquo;\u00e9chelle et aux d\u00e9formations.<br \/>\nLorsque l&rsquo;on demande \u00e0 \u00ab\u00a0cr\u00e9er la police\u00a0\u00bb, une fen\u00eatre appara\u00eet et nous montre les typographies actuellement utilis\u00e9es par le syst\u00e8me. Il faut en s\u00e9lectionner une et r\u00e9gler quelques options : le corps d&rsquo;affichage, le lissage, l&rsquo;\u00e9tendue du nombre de caract\u00e8res. Cette derni\u00e8re option (<em>all characters<\/em>) doit toujours \u00eatre coch\u00e9e pour les syst\u00e8mes non-anglophones. En effet, \u00e0 d\u00e9faut, des caract\u00e8res aussi familiers que \u00e9, \u00e7, \u00e0, \u00e8 ou \u00f9 ne pourront \u00eatre utilis\u00e9s.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2965\" alt=\"\" src=\"\/dernier\/files\/2008\/12\/choix_typo.png\" width=\"530\" height=\"460\" srcset=\"https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/choix_typo.png 530w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/choix_typo-300x260.png 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><\/p>\n<p>Lorsque la typographie a \u00e9t\u00e9 \u00ab\u00a0cr\u00e9\u00e9e\u00a0\u00bb par Processing, elle est enregistr\u00e9e dans le sous-dossier \u00ab\u00a0data\u00a0\u00bb du dossier de l&rsquo;animation (sous-dossier dont on peut v\u00e9rifier le contenu avec la commande <em>Sketch&gt;Show sketch folder<\/em>). Il faut \u00ab\u00a0cr\u00e9er\u00a0\u00bb autant de typographies que l&rsquo;on en aura beson.<br \/>\nUne fois les typographies \u00ab\u00a0cr\u00e9\u00e9es\u00a0\u00bb, on les manipule de cette mani\u00e8re :<\/p>\n<div class=\"code\">\n<pre>size(530,80); <span class=\"rem\">\/\/ r\u00e9glage de la taille de la fen\u00eatre<\/span>\r\nfill(255); <span class=\"rem\">\/\/ La couleur de remplissage (et des textes) est le blanc<\/span>\r\nbackground(0); \u00a0<span class=\"rem\">\/\/ la fen\u00eatre est \"peinte\" en noir<\/span>\r\nPFont maTypo = loadFont(\"DejaVuSerif-64.vlw\"); <span class=\"rem\">\/\/ choix de la typo<\/span>\r\ntextFont(maTypo, 64); \u00a0<span class=\"rem\">\/\/ D\u00e9finition de la taille de la typo<\/span>\r\ntext(\"Le dernier blog\",12,58); <span class=\"rem\">\/\/ \u00e9criture d'un texte<\/span><\/pre>\n<\/div>\n<p>Les trois premi\u00e8res commandes vous seront famili\u00e8res. On notera juste au passage que la commande <code>fill()<\/code>, qui sert \u00e0 d\u00e9finir la couleur des remplissages de formes, est aussi la couleur qui sert \u00e0 d\u00e9finir le remplissage des textes dessin\u00e9s.<br \/>\nLa ligne <code>PFont maTypo = loadFont(\"DejaVuSerif-64.vlw\");<\/code> sert \u00e0 cr\u00e9er une variable de type <code>PFont<\/code> (Processing font) nomm\u00e9 <code>maTypo<\/code> (nom arbitraire, nous aurions aussi bien pu l&rsquo;appeler \u00ab\u00a0<em>dejaVuTypo<\/em>\u00a0\u00bb ou \u00ab\u00a0<em>rhododendron<\/em>\u00ab\u00a0. Cette variable sert \u00e0 charger la typographie cr\u00e9\u00e9e pr\u00e9c\u00e9demment, de cette mani\u00e8re : loadFont(<em>nom_de_la_typo<\/em>).<br \/>\nDans la ligne suivante, nous r\u00e9glons la taille d&rsquo;affichage (ici,64) qui doit \u00eatre affect\u00e9e \u00e0 la typo <code>maTypo<\/code>.<br \/>\nPour finir, nous \u00e9crivons une chaine de caract\u00e8res \u00e0 la position (12,58) avec la commande <code>text()<\/code>, qui se r\u00e9dige ainsi : <code>text(\"chaine de caract\u00e8res \u00e0 \u00e9crire\", x, y);<br \/>\n<\/code>Voici le r\u00e9sultat :<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2970\" alt=\"\" src=\"\/dernier\/files\/2008\/12\/first_pfont.png\" width=\"530\" height=\"80\" srcset=\"https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/first_pfont.png 530w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/first_pfont-300x45.png 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><\/p>\n<p>Si nous d\u00e9cidons de r\u00e9gler la taille des caract\u00e8res sur une autre valeur que celle qui correspond \u00e0 la police cr\u00e9ee, le r\u00e9sultat n&rsquo;est pas forc\u00e9ment bon. L&rsquo;exemple qui suit est bas\u00e9 sur le m\u00eame programme que le pr\u00e9c\u00e9dent, \u00e0 ceci pr\u00e8s que la taille de la police de caract\u00e8res est 200. On voit nettement que l&rsquo;agrandissement non-vectoriel de la typo ne flatte pas l&rsquo;effet de lissage.<br \/>\nLa commande\u00a0utilis\u00e9e \u00a0pour r\u00e9gler la taille des lettres est\u00a0<code>textFont(maTypo, 200);<\/code><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2972\" alt=\"\" src=\"\/dernier\/files\/2008\/12\/first_pfont2.png\" width=\"530\" height=\"80\" srcset=\"https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/first_pfont2.png 530w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/first_pfont2-300x45.png 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><\/p>\n<p>Notons qu&rsquo;il serait possible d&rsquo;utiliser une typo charg\u00e9e \u00e0 la vol\u00e9e, sans l&rsquo;enregistrer, avec la commande\u00a0createFont().<\/p>\n<div class=\"code\">\n<pre>size(530,80);fill(255);background(128,0,0);\r\nPFont maTypo = createFont(\"arial\",60);\r\ntextFont(maTypo, 60);\r\ntext(\"Le dernier blog\",0,54);\r\nsave(\"first_pfont3.png\");<\/pre>\n<\/div>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2976\" alt=\"\" src=\"\/dernier\/files\/2008\/12\/first_pfont3.png\" width=\"530\" height=\"80\" srcset=\"https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/first_pfont3.png 530w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/first_pfont3-300x45.png 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><\/p>\n<p>Ici j&rsquo;utilise donc la typo \u00ab\u00a0arial\u00a0\u00bb en corps 60. Le nom donn\u00e9 (\u00ab\u00a0arial\u00a0\u00bb) est le nom sous lequel le syst\u00e8me d\u00e9signe la typo. Cette typographie est extr\u00eamement r\u00e9pandue et je ne cours pas tellement le risque qu&rsquo;elle soit absente du syst\u00e8me. Pour conna\u00eetre la liste des typos pr\u00e9sentes sur le syst\u00e8me, on utilise la m\u00e9thode PFont.list(), qui renvoie une liste. En \u00e9crivant\u00a0println (PFont.list());, je vois appara\u00eetre la liste compl\u00e8te des fontes du syst\u00e8me dans la zone de texte de Processing.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2997\" alt=\"\" src=\"\/dernier\/files\/2008\/12\/font_list.png\" width=\"530\" height=\"208\" srcset=\"https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/font_list.png 530w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/font_list-300x117.png 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><br \/>\nJ&rsquo;ai r\u00e9dig\u00e9 un programme rapide qui parcourt toute la liste des typos disponibles et les utilises toutes.<br \/>\nPour commencer, il stocke la liste dans un tableau de type <code>String<\/code> (cha\u00eene de caract\u00e8res) nomm\u00e9\u00a0<code>listeDesTypos<\/code>. C&rsquo;est le sens de la premi\u00e8re commande :\u00a0<code>String[] listeDesTypos = PFont.list();<\/code>. Ensuite on r\u00e8gle la taille de la fen\u00eatre et sa couleur. Puis, \u00e0 l&rsquo;aide d&rsquo;une <a href=\"http:\/\/www.hyperbate.fr\/dernier\/?p=2557\">boucle it\u00e9rative<\/a>, nous parcourons la totalit\u00e9 des \u00e9l\u00e9ments de la liste. \u00c0 chaque cycle de la boucle, on d\u00e9finit une variable d\u00e9cimale nomm\u00e9e taille (au hasard entre 10 et 80), et une couleur (avec un hasard limit\u00e9). Puis, la typographie est cr\u00e9\u00e9e et s\u00e9lectionn\u00e9e. Enfin, on \u00e9crit une cha\u00eene de caract\u00e8res \u00e0 un endroit choisi au hasard sur l&rsquo;\u00e9cran. Cette cha\u00eene de caract\u00e8res est le nom de la typographie.<\/p>\n<div class=\"code\">\n<pre>String[] listeDesTypos = PFont.list();\r\nbackground(0);\r\nsize(530,530);\r\nfor(int a=0;a&lt;listeDesTypos.length;a++){\r\n  float taille=random(10,80);\r\n  fill(random(30, 255),random(20,200), random(160));\r\n  PFont matypo  = createFont(listeDesTypos[a], taille);\r\n  textFont(matypo);\r\n  text( listeDesTypos[a], random(-100,530),random(530));\r\n}<\/pre>\n<\/div>\n<p>Le r\u00e9sultat est le suivant :<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2999\" alt=\"\" src=\"\/dernier\/files\/2008\/12\/liste_typos_create.png\" width=\"530\" height=\"530\" srcset=\"https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/liste_typos_create.png 530w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/liste_typos_create-150x150.png 150w, https:\/\/hyperbate.fr\/dernier\/files\/2008\/12\/liste_typos_create-300x300.png 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><\/p>\n<p>Les commandes relatives \u00e0 l&rsquo;affichage des textes sont en assez petit nombre.<br \/>\nNous avons vu<\/p>\n<ul>\n<li><code>loadFont( <em>nom_typo<\/em> );<\/code> qui permet de charger une typo pr\u00e9c\u00e9demment enregistr\u00e9e<\/li>\n<li><code>createFont(\u00a0<em>nom_typo<\/em>, <em>taille <\/em>);<\/code> qui permet d&rsquo;utiliser \u00e0 la vol\u00e9e une typographie du syst\u00e8me<\/li>\n<li><code>textFont( <em>nom_PFont, [taille]<\/em> );<\/code> qui permet de s\u00e9lectionner la typo en cours et \u00e9ventuellement sa taille<\/li>\n<li><code>text ( <em>t, x, y<\/em> );<\/code> qui permet d&rsquo;afficher un texte <code>t<\/code> aux coordonn\u00e9es <code>(x,y)<\/code>. Le texte que l&rsquo;on \u00e9crit doit \u00eatre not\u00e9 entre guillemets.<\/li>\n<\/ul>\n<div>Il est par ailleurs possible de r\u00e9gler les attributs suivants<\/div>\n<div>\n<ul>\n<li><code>textMode( <em>ATTRIBUT <\/em>);<\/code> permet de d\u00e9cider du mode d&rsquo;affichage des textes. Il y a\u00a0<code>MODEL<\/code> (mode par d\u00e9faut), <code>SCREEN<\/code> (uniquement en 2D, d&rsquo;un affichage plus rapide) et <code>SHAPE<\/code> (adapt\u00e9 \u00e0 l&rsquo;exportation vectorielle en pdf ou en openGL).<\/li>\n<li><code>textAlign ( <em>ALIGNEMENT <\/em>);<\/code> permet de r\u00e9gler l&rsquo;alignement horizontal des textes.\u00a0Celui-ci peut \u00eatre <code>LEFT<\/code>, <code>CENTER<\/code> ou <code>RIGHT<\/code> (\u00e0 gauche, centr\u00e9, \u00e0 droite). On peut ajouter un second param\u00e8tre pour d\u00e9terminer l&rsquo;alignement vertical, qui peut \u00eatre <code>TOP<\/code>, <code>BOTTOM<\/code>, <code>CENTER<\/code>, <code>BASELINE<\/code> (haut, bas, centre, ligne de base). Par exemple : <code>textAlign(CENTER,CENTER);<\/code><\/li>\n<li><code>textSize( <em>taille <\/em>);<\/code> permet de changer la taille d&rsquo;affichage d&rsquo;un texte.<\/li>\n<li><code>textWidth( chaine_de_caract\u00e8res<em> <\/em>);<\/code> permet de conna\u00eetre la largeur qu&rsquo;une cha\u00eene de caract\u00e8res va occuper avant de la dessiner.<\/li>\n<li><code>textLeading(\u00a0<em>taille <\/em>);<\/code> permet de r\u00e9gler l&rsquo;espacement entre les lignes.<\/li>\n<\/ul>\n<div>Enfin, deux propri\u00e9t\u00e9s nous permettent de mesurer l&rsquo;encombrement du texte. Elles sont utiles pour effectuer certains calculs de mise en page.<\/div>\n<ul>\n<li><code>textAscent()<\/code> permet de conna\u00eetre la distance qui s\u00e9pare le haut du texte de sa ligne de base.<\/li>\n<li>la propri\u00e9t\u00e9 <code>textDescent()<\/code> permet de conna\u00eetre la distance qui s\u00e9pare la \u00ab\u00a0baseline\u00a0\u00bb du bas du texte.<\/li>\n<\/ul>\n<div>L&rsquo;affichage de textes n&rsquo;est pas le point fort de Processing (pas de champs de saisie, de fonctions hypertextuelles, etc.) mais il suffit pour de nombreux usages graphiques.<br \/>\nLe prochain et dernier cours (<em>\u00ab<\/em><span style=\"color: #ffffff;\"><em>.<\/em><\/span><em>quand est-ce que tu te remets \u00e0 parler de cin\u00e9ma<\/em><span style=\"color: #ffffff;\"><em>.<\/em><\/span><em>?<\/em><span style=\"color: #ffffff;\"><em>.<\/em><\/span><em>\u00bb<\/em> me demandait-on il n&rsquo;y a pas cinq minutes) sera consacr\u00e9 \u00e0 la seule question qui compte, \u00e0 savoir : que fait-on de tout \u00e7a ?<\/div>\n<\/div>\n<ol class=\"footnotes\"><li id=\"footnote_1_2962\" class=\"footnote\"> rast\u00e9riser signifier \u00ab\u00a0transformer en bitmap\u00a0\u00bb. C&rsquo;est le contraire de la vectorisation. <span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_1_2962\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>Avant-derni\u00e8re le\u00e7on de cette initiation progressive, parlons \u00e0 pr\u00e9sent de la manipulation des textes. Ce que Processing propose en la mati\u00e8re est plut\u00f4t sommaire et nous en feront vite le tour. Pour \u00e9crire du texte dans Processing, il faut commencer par choisir dans quelle police de caract\u00e8re et dans quel corps on souhaite l&rsquo;\u00e9crire, car [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[],"class_list":["post-2962","post","type-post","status-publish","format-standard","hentry","category-processing"],"_links":{"self":[{"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=\/wp\/v2\/posts\/2962","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2962"}],"version-history":[{"count":0,"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=\/wp\/v2\/posts\/2962\/revisions"}],"wp:attachment":[{"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2962"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2962"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hyperbate.fr\/dernier\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}