{"id":515,"date":"2017-09-12T20:44:57","date_gmt":"2017-09-12T18:44:57","guid":{"rendered":"http:\/\/www.joanillo.org\/?p=515"},"modified":"2020-09-24T20:45:35","modified_gmt":"2020-09-24T18:45:35","slug":"script-cncstroke-mejorando-la-conversion-dxf-a-g-code-ii","status":"publish","type":"post","link":"https:\/\/www.joanillo.org\/?p=515&lang=es","title":{"rendered":"script cncstroke: mejorando la conversi\u00f3n 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 proyecto con LibreCAD, creo la capa &#8221;stroke&#8221;, y aqu\u00ed metemos las polil\u00edneas, tal como se ha explicado en el anterior <a href=\"http:\/\/www.joanillo.org\/?p=1500\">art\u00edculo<\/a> [1], y tal como se muestra en la imagen. Con lenguaje C++, lo primero que hacemos es leer el fichero <em>dxf<\/em> y detectar la capa <em>stroke<\/em>, con todos sus puntos. En el LibreCAD todas las l\u00edneas son iguales, tienen un origen y un final. Pero a mi me interesa detectar las polil\u00edneas, que son las l\u00edneas enlazadas de manera que el punt final de una l\u00ednea es el mismo que el punto de origen de la l\u00ednea siguiente. Recordemos la estructura de datos que se utiliza:<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 \/>\nRecorremos todas las l\u00edneas, y vamos a\u00f1adiendo elementos al vector <strong>polil\u00ednea<\/strong>, y dentro de cada polil\u00ednea vamos a\u00f1adiendo elementos al vector <strong>l\u00ednea<\/strong>. Para cada l\u00ednea y para cada polil\u00ednea, tenemos calculada su longitud. Una vez tenemos rellenado el vector de polil\u00edneas con sus l\u00edneas, ya podemos recorrer todas las polil\u00edneas y generar la salida G-Code, de manera que el inicio de una polil\u00ednea est\u00e1 a profundidad -2mm, y el final de la polil\u00ednea est\u00e1 a profundidad 0mm, tal como se aprecia en este trozo del G-Code resultante, y en la imagen:<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 \/>\nComo se aprecia en el G-Code, posicionamos la broca en el punto (30,30), agujereamos  hasta -2.0mm, y vamos pasando por tres puntos sucesivos mientras vamos levantando de forma proporcional la broca hasta llegar al punto (70,40), punto en que la broca deja de atacar la superficie. As\u00ed conseguimos un trazo variable, tal como se aprecia en la imagen. Con esta t\u00e9cnica podremos perfilar detalles en los trabajos CNC, como pueden ser los cabellos de un retrato, o el trazo en una caligraf\u00eda.<\/p>\n<p>Como se aprecia en la imagen (extra\u00edda del proyecto de fresar el retrato de Albert Einstein en blanco y negro, en otra entrada mostraremos el resultado final), se ve el resultado de aplicar el script <em>cncstroke<\/em> para las polil\u00edneas agrupadas en la capa <em>stroke<\/em> del proyecto LibreCAD. Vemos dos trazos que acaban en punta (en la part izquierda de la imagen, sobre madera), y otro trazo, donde no se ha aplicado el script, que no acaba en punta. En la parte derecha de la imagen vemos un trozo del proyecto LibreCAD donde se han definido estas l\u00edneas (dos que pertenecen a la capa <em>cncstroke<\/em>, y otra que se fresa normal). As\u00ed pues, con un uso correcto del proyecto LibreCAD, podemos aumentar la resoluci\u00f3n del fresado CNC, consiguiendo un efecto m\u00e1s real y detallado.<\/p>\n<p>Puedes descargar y estudiar el c\u00f3digo del script <strong>cncstroke<\/strong> desde el siguiente <a href=\"http:\/\/wiki.joanillo.org\/index.php\/Script_CNC_stroke\" title=\"cncstroke\">enlace<\/a> [2] .<br \/>\nRefer\u00e8ncies:<\/p>\n<ul>\n\\t<\/p>\n<li>[1]. <a href=\"http:\/\/www.joanillo.org\/?p=1500\">Mejorando la conversi\u00f3n 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 en wiki.joanillo.org<\/a><\/li>\n<\/ul>\n<p><strong>Nota aclarativa<\/strong>:  En el proyecto <strong>cncstroke<\/strong> utilizamos el t\u00e9rmino <em>polil\u00ednea<\/em> como sucesi\u00f3n de l\u00edneas enlazadas. Ahora bien, para generar estas l\u00edneas enlazadas, en LibreCAD, utilizamos la herramienta <em>l\u00ednea<\/em> (y no la herramienta <em>polil\u00ednea<\/em>) (En una futura versi\u00f3n se estudiar\u00e1 la posibilidad de utilizar la herramienta <em>polil\u00ednea<\/em>, o ambas).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creo un proyecto con LibreCAD, creo la capa &#8221;stroke&#8221;, y aqu\u00ed metemos las polil\u00edneas, tal como se ha explicado en el anterior art\u00edculo [1], y tal como se muestra en la imagen. Con lenguaje C++, lo primero que hacemos es leer el fichero dxf y detectar la capa stroke, con todos sus puntos. En el [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[302,310,324,192],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/515"}],"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=515"}],"version-history":[{"count":1,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/515\/revisions"}],"predecessor-version":[{"id":516,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/515\/revisions\/516"}],"wp:attachment":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}