GIMP: trazo de ruta a lo largo de puntos individuales

Lo que necesito: dibujar diferentes conjuntos de iconos en los mismos puntos de la imagen (con el fin de dibujar diferentes esquemas de red con la misma estructura). Hay MUCHOS puntos. Por lo tanto, quiero poder separar la producción del ícono y las posiciones de los mismos en la imagen final, es decir, no quiero dibujar el ícono y luego copiarlo y pegarlo en diferentes puntos, ya que no podría cambiar los conjuntos de iconos sin tener que volver a dibujar todo.

Intento de solución: pensé en i) dibujar el ícono y guardarlo como un pincel, ii) dibujar puntos únicos con la herramienta de ruta en las posiciones adecuadas, iii) trazar la ruta con el pincel de ícono. Iterar el paso iii) con diferentes pinceles.

Problema: Stroke Path... no funciona con puntos individuales. Sin embargo, si uso rutas cortas en lugar de puntos únicos, hay un problema con el espaciado: en la ruta, a veces tengo 2 íconos, a veces 1 y a veces 0.

¿Estoy abordando el problema de manera incorrecta? ¿Hay una solución?

Si agrega "cambiar el código fuente de GIMP" al conjunto de posibles soluciones, entonces la respuesta podría ser hacer que el trazo funcione para rutas hechas de puntos únicos. Sin embargo, eso movería esta pregunta a StackOverflow.

Respuestas (1)

Entonces, de hecho, esto puede considerarse un error de trazado de ruta, o al menos una característica faltante. Incluso si los desarrolladores de GIMP pueden solucionarlo, una nueva versión con la función implementada podría llevar meses.

Por otro lado, este tipo de cosas son más o menos fáciles de hacer usando los motores de secuencias de comandos que vienen con GIMP. Las siguientes 6 líneas de código se pueden pegar tal como están en la consola Python de GIMP ( Filters->Python->Console): crearán un solo "trazo de 1 clic" para cada nodo (no cada componente de un solo nodo) en una ruta, en la capa superior de la última imagen abierta (pestaña más a la derecha). (Cambie el 0 en la primera línea para acceder a otras imágenes abiertas, en orden, de derecha a izquierda)

img = gimp.image_list()[0]
for vector in img.vectors:
    for stroke in vector.strokes:
        for i in range(2, len(stroke.points[0]), 6):
            x, y = stroke.points[0][i: i + 2]
            pdb.gimp_paintbrush_default(img.layers[0], 2, [int(x), int(y)])

Por supuesto, pegar esto cada vez que necesita realizar la tarea es engorroso. Para crear un complemento a partir de esto, siga el ejemplo y las instrucciones en http://www.gimp.org/docs/python/ (estas líneas se convertirán en el cuerpo de la función, y debe registrar tres parámetros: PF_IMAGE, PF_DRAWABLE y PF_VECTORS donde ese ejemplo solo tiene "PF_INT"). Guarde el archivo con una extensión ".py" en la carpeta del complemento y, para plataformas que no sean de Windows, márquelo como ejecutable (usando las propiedades del archivo).