diego sevilla’s weblog
it is better to remain silent and be thought a fool,
than to open your mouth and remove all doubt -- groucho marx

5/10/2008

Compilando inkscape y usando spiro

Filed under: español, código/code, free software/software libre — Diego Sevilla @ 2:32 — In English

Hoy Emma se sentía algo malita y no hemos salido. He aprovechado para jugar un poco con la versión SVN de inkscape, porque quería probar la funcionalidad «spiro» (que había visto ya en el screencast de Heathernx). Me he descargado el código, lo he configurado y lo he compilado sin problemas.

Sin embargo, al ejecutarlo, daba un error muy extraño. Probando un rato he encontrado una manera de arreglarlo, aunque no sé si es perfecta. El programa funciona sin problemas lo que he probado. Aquí pongo el patch por si alguien quiere probar:

$ svn diff
Index: src/live_effects/lpe-knot.cpp
===================================================================
--- src/live_effects/lpe-knot.cpp	(revisión: 19971)
+++ src/live_effects/lpe-knot.cpp	(copia de trabajo)
@@ -47,7 +47,7 @@
 //remove an interval from an union of intervals.
 //TODO: is it worth moving it to 2Geom?
 static
-std::vector<Geom::Interval> complementOf(Geom::Interval I, std::vector<Geom::Interval> domain){
+std::vector<Geom::Interval> complementOf(Geom::Interval I, std::vector<Geom::Interval>& domain){
     std::vector<Geom::Interval> ret;
     double min = domain.front().min();
     double max = domain.back().max();
Index: src/sp-item.cpp
===================================================================
--- src/sp-item.cpp	(revisión: 19971)
+++ src/sp-item.cpp	(copia de trabajo)
@@ -1129,7 +1129,9 @@
         NR_ARENA_ITEM_SET_DATA(ai, item);
         NRRect item_bbox;
         sp_item_invoke_bbox(item, &item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
-        boost::optional<Geom::Rect> i_bbox = item_bbox;
+        Geom::Rect r(Geom::Point(item_bbox.x0,item_bbox.y0),
+                     Geom::Point( item_bbox.x1, item_bbox.y1));
+        boost::optional<Geom::Rect> i_bbox = r;
         nr_arena_item_set_item_bbox(ai, i_bbox);
     }

(como fichero patch).

El primer cambio ha sido una optimización rápida que he visto (paso por referencia en vez de por copia del vector), y el segundo es para hacer que funcione.

Con esta versión, es muy sencillo realizar filigranas como la que hice en 1 minuto:

Al contrario de la versión 0.46 o las de desarrollo que había probado hasta ahora, los efectos del trayecto (a la derecha) se pueden almacenar, con lo que puedo añadir los splines de spiro y un patrón a lo largo del trayecto. Gran programa Inkscape. Me ha solucionado las figuras de la tesis y tantas otras cosas…

Me he dado cuenta de que no he puesto más datos de cómo descargar y compilar. Ahí van:

$ svn co https://inkscape.svn.sourceforge.net/svnroot/inkscape/inkscape/trunk inkscape
$ cd inkscape
$ patch -p0 < patch
patching file src/live_effects/lpe-knot.cpp
patching file src/sp-item.cpp
$ ./autogen.sh
$ ./configure --prefix=XXX
$ make -jY
$ make install

donde XXX es el directorio donde queráis instalarlo (por defecto /usr/local), e Y el número de proecesadores (cores) que queráis utilizar para compilar. Hacen falta bastantes librerías, por lo que habrá que ir instalándolas conforme las pida el script configure.

Actualización 6/10: Parece que ya han arreglado el falllo. El patch no es necesario, salvo quizá la primera parte, que es una optimización. Lo propondré como posible parche.

2 Comments »

  1. Te falta un const en la primera parte, si no estarías cambiando el contrato del método complementOf.

    Comment by Ricardo — 6/10/2008 @ 10:13

  2. Razón tienes, Ricardo. Sin embargo, fue una modificación casi al azar, al ver ese código algo me chirrió, pero después lo dejé para probar porque pensé que alguien que conociera C++ no iba a pasar por valor cuando lo suyo es pasar por referencia…

    Haré otra batida y veré posibles optimizaciones de este tipo. A ver cómo son de receptivos los desarrolladores de inkscape…

    Un saludo y gracias por la puntualización,
    diego.

    Comment by diego sevilla — 6/10/2008 @ 11:04

RSS feed for comments on this post. TrackBack URI

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


Anti-Spam by WP-Morph 

Creative Commons License
This work is licensed under a Creative Commons License.
EWWV  AWStats  Site Meter 24 queries. 0.061 seconds. Powered by WordPress
406022 email messages processed in this box. 10858 were spam

0