{"id":513,"date":"2017-09-12T20:43:41","date_gmt":"2017-09-12T18:43:41","guid":{"rendered":"http:\/\/www.joanillo.org\/?p=513"},"modified":"2020-09-24T20:44:42","modified_gmt":"2020-09-24T18:44:42","slug":"script-cncstroke-millorant-la-conversio-dxf-a-g-code-ii","status":"publish","type":"post","link":"https:\/\/www.joanillo.org\/?p=513","title":{"rendered":"script cncstroke: millorant la conversi\u00f3 DXF a G-Code, II"},"content":{"rendered":"<p><a href=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2017\/09\/einstein_cncstroke1.png\"><img loading=\"lazy\" src=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2017\/09\/einstein_cncstroke1-300x222.png\" alt=\"\" title=\"einstein_cncstroke\" width=\"300\" height=\"222\" class=\"alignright size-medium wp-image-1515\"><\/a>Creo un projecte amb LibreCAD, creo la capa &#8221;stroke&#8221;, i aqu\u00ed fiquem les polil\u00ednies, tal com s&#8217;ha explicat en l&#8217;anterior <a href=\"http:\/\/www.joanillo.org\/?p=1500\">article<\/a> [1], i tal com es mostra en la imatge. Amb llenguatge C++, el primer que fem \u00e9s llegir el fitxer <em>dxf<\/em> i detectar la capa <em>stroke<\/em>, amb tots els seus punts. En el LibreCAD totes les l\u00ednies s\u00f3n iguals, tenen un origen i un final. Per\u00f2 a mi m&#8217;interessa detectar les polil\u00ednies, que s\u00f3n les l\u00ednies enlla\u00e7ades de manera que el punt final d&#8217;una l\u00ednia \u00e9s el mateix que el punt  d&#8217;origen de la l\u00ednia seg\u00fcent. Recordem l&#8217;estructura de dades que es fa servr:<br \/>\n<code><br \/>\nstruct linia {<br \/>\n\\tint x0;<br \/>\n\\tint y0;<br \/>\n\\tint x1;<br \/>\n\\tint y1;<br \/>\n\\tdouble length;<br \/>\n};<\/code><\/p>\n<p><code>struct polilinia {<br \/>\n\\tstd::vector  \t<linia> vlinia;<br \/>\n\\tdouble length;<br \/>\n};<\/linia>\n<p><\/code><code>std::vector <polilinia> vpolilinia;\n<\/polilinia><\/code><br \/>\nRecorrem totes les l\u00ednies, i anem afegint elements al vector <strong>polil\u00ednia<\/strong>, i dins de cada polil\u00ednia anem afegint elements al vector <strong>l\u00ednia<\/strong>. Per cada l\u00ednia i per cada polil\u00ednia, tenim calculada la seva longitud. Un cop tenim omplert el vector de polil\u00ednies amb les seves l\u00ednies, ja podem rec\u00f3rrer totes les polil\u00ednies i generar la sortida G-Code, de manera que l&#8217;inici d&#8217;una polil\u00ednia est\u00e0 a profunditat -2mm, i el final de la polil\u00ednia est\u00e0 a profunditat 0mm, tal com s&#8217;aprecia en aquest tros del G-Code resultant, i en la imatge:<br \/>\n<code><br \/>\n(* POLILINE #2 *)<br \/>\nG0 X 30 Y 30<br \/>\nG0 Z 3.000<br \/>\nF150<br \/>\nG1 Z -2.0<br \/>\nF400<br \/>\nG1 X 50 Y 40 Z -1.11<br \/>\nG1 X 60 Y 30 Z -0.55<br \/>\nG1 X 70 Y 40 Z 0<br \/>\nF150<br \/>\nG0 Z 5.000<br \/>\n<\/code><br \/>\nCom s&#8217;aprecia en el G-Code, posicionem la broca al punt (30,30), foradem fins a -2.0mm, i anem passant per tres punts successius tot aixecant de forma proporcional la broca fins arribar al punt (70,40), en qu\u00e8 la broca deixa d&#8217;atacar la superf\u00edcie. Aix\u00ed s&#8217;aconsegueix un tra\u00e7 variable, tal com s&#8217;aprecia en la imatge. Amb aquesta t\u00e8cnica podr\u00e9 perfilar detalls en els treballs CNC, com ara els cabells d&#8217;un retrat, o el tra\u00e7 en una caligrafia.<\/p>\n<p>Com s&#8217;aprecia en la imatge (extrecta del projecte de fresar el retrat d&#8217;Albert Einstein en blanc i negre, en una altra entrada mostrarem el resultat final), es veu el resultat d&#8217;aplicar el script <em>cncstroke<\/em> per a les polil\u00ednies agrupades en la capa <em>stroke<\/em> del projecte LibreCAD. Veiem dos tra\u00e7os que acaben en punxa (a la part esquerra de la imatge, sobre fusta), i un altre tra\u00e7, on no s&#8217;ha aplicat el script, que no acaba en punxa. A la part dreta de la imatge veiem un tros del projecte LibreCAD on s&#8217;han definit aquestes l\u00ednies (dues que pertanyen a la capa <em>cncstroke<\/em>, i una altra que es fresa normal). Aix\u00ed doncs, amb un \u00fas correcte del projecte LibreCAD, podem augmentar la resoluci\u00f3 del fresat CNC, aconseguint un efecte m\u00e9s real i detallat.<\/p>\n<p>Pots descarregar i estudiar el codi del script <strong>cncstroke<\/strong> des del seg\u00fcent <a href=\"http:\/\/wiki.joanillo.org\/index.php\/Script_CNC_stroke\" title=\"cncstroke\">enlla\u00e7<\/a> [2] .<br \/>\nRefer\u00e8ncies:<\/p>\n<ul>\n\\t<\/p>\n<li>[1]. <a href=\"http:\/\/www.joanillo.org\/?p=1500\">Millorant la conversi\u00f3 DXF a G-Code, I<\/a><\/li>\n<p>\\t<\/p>\n<li>[2]. <a href=\"http:\/\/wiki.joanillo.org\/index.php\/Script_CNC_stroke\" title=\"cncstroke a wik.joanillo.org\">cncstroke a wiki.joanillo.org<\/a><\/li>\n<\/ul>\n<p><strong>Nota aclarativa<\/strong>:  En el projecte <strong>cncstroke<\/strong> utilitzem el terme <em>polil\u00ednia<\/em> com a successi\u00f3 de l\u00ednies enlla\u00e7ades. Ara b\u00e9, per generar aquestes l\u00ednies enlla\u00e7ades, a LibreCAD, utilitzem l&#8217;eina <em>l\u00ednia<\/em> (i no pas l&#8217;eina <em>polil\u00ednia<\/em>) (En una futura versi\u00f3 s&#8217;estudiar\u00e0 la possibilitat d&#8217;utilitzar l&#8217;eina <em>polil\u00ednia<\/em>, o ambdues).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creo un projecte amb LibreCAD, creo la capa &#8221;stroke&#8221;, i aqu\u00ed fiquem les polil\u00ednies, tal com s&#8217;ha explicat en l&#8217;anterior article [1], i tal com es mostra en la imatge. Amb llenguatge C++, el primer que fem \u00e9s llegir el fitxer dxf i detectar la capa stroke, amb tots els seus punts. En el LibreCAD [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[33,18,16,36],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/513"}],"collection":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=513"}],"version-history":[{"count":1,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/513\/revisions"}],"predecessor-version":[{"id":514,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/513\/revisions\/514"}],"wp:attachment":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}