Vamos a ver dos plantillas, la propuesta por Simon Budig y la que yo utilizo, que será la que explicaré con más detalle, ayudando a comprender la anterior, ya que fue en la que yo me basé.
8.1 La plantilla de Simon BudigSimon Buding es el autor del tutorial Script-Fu and plug-ins for The GIMP
Su plantilla, en la que yo me he basado como ya he apuntado, la encontraréis aquí, con completas explicaciones en inglés.
8.2 Mi plantilla
Iremos viendo el código, sentencia a sentencia, con pequeñas explicaciones cuando sea necesario, y pondré todo el código junto en un anexo:
Comenzamos con la función script-fu-register. Como ya comenté, cuando empiezo a escribir un nuevo script-fu prefiero que esta función esté al principio, seguida de la función define, y así me aseguro de que ambas sentencias tienen los mismos parámetros y que tipo es cada uno de ellos.
Esta función tiene, como ya hemos visto, contiene el nombre, texto del menú, etc. y los parametros de entrada y su tipo
(script-fu-register "script-fu-miPlantilla" ;nombre del script-fu "Rectangle..." ;texto que aparecerá en el menú "Pinta un circulo" ;explicacion de lo que hace "Mi nombre "
A continuación la sentencia que inicia verdaderamente el script-fu propiamente dicho
(define (script-fu-template inImg inDrawable color) Durante la ejecución de los script-fu a veces se cambian los colores de fondo, fuentes, etc, cambiando el contexto de trabajo, que si nos acordamos de restaurar antes de salir puede que nos lleve a alguna equivocación, a veces sin darnos cuenta de que esta ha ocurrido. Es conviente guardar antes de empezar todos los dtos del contexo de trabajo previo, para recuperarlo antes de salir . Esta sentencia y la siguiente prefiero ponerlas al principio para evitarme tener que analizar, caso de ponerlas más atrás, si me dejo alguna sentencia importante fuera. Esta sentencia tiene que ser cerrada al final. (1)
(gimp-context-push) Sin le decimos lo contrario, Gimp apunta cada una de las acciones que realiza el script-fu en la lista de acciones a deshacer. Si no indicáramos a Gimp que agrupe todo el script-fu en una sola anotación en la lista de deshacer, si después de ejecutar un script quisiérmos deshacerlo tendríamos que ir acción a acción, ya que no sabríamos donde empezo la anotación del script-fu, con el riesgo probable de dejar alguna del script-fu o borrar alguna de las anteriores.
Con la siguiene sentencia Gimp inicia el registro de las acciones que agrupará en una sola acción para deshacer. Durante la depuración del script viene muy bien desactivar, comentando, esta sentencia y su cierre.Esta sentencia tiene que ser cerrada al final. (2)
Con la siguiene sentencia Gimp inicia el registro de las acciones que agrupará en una sola acción para deshacer. Durante la depuración del script viene muy bien desactivar, comentando, esta sentencia y su cierre.Esta sentencia tiene que ser cerrada al final. (2)
(gimp-image-undo-group-start inImg) Habíamos dicho que los script-fu pueden declarar, para luego ser usadas, funciones locales. Aquí es donde coloco las funciones internas del script-fu
(define (funcionInterna1 param1 para2)
(let*
(
( )
)
)
)A continuación irían todas las demás funciones.
Vamos a comenzar el cuerpo principal de nuestro script-fu y lo haremos declarando las variables
Vamos a comenzar el cuerpo principal de nuestro script-fu y lo haremos declarando las variables
(let*
(
(variable1) ; sin inicializar
(variable2 ( car (gimp-drawable-height inDrawable)))
(variable3 ( car (gimp-drawable-offsets inDrawable)))
(variable2 ( cadr (gimp-drawable-offsets inDrawable)))
…........... ;también pueden ir sentencias
) ; cierra declaración de variables * ( A continuación pondríamos todas las sentencias necesarias para lleva a cabo las acciones de nuestro script-fu. Por ejemplo
(gimp-rect-select inImg
(+ x0 (* width 0.25))
(+ y0 (* height 0.25))
(* width 0.5)
(* height 0.5)
CHANNEL-OP-REPLACE
0 0
) :terminan los parámetros de la función
(gimp-context-set-foreground color)
(gimp-edit-fill inDrawable FOREGROUND-FILL)
(set!(variable1 125))
…...........
) ; Cierrra (let* El paréntesis que cierra la sentencia (let* cierra el espacio en que son válidas la variables locales definidas por esta. Quiere decir esto que fuera no pueden ir sentencias que utilicen las variables definidas por dicha sentencia. Si pueden ir sentencias que no las utilicen como vemos.
Finalizado ya el trabajo del script-fu, recuperamos el contexto de trabajo, cerrando la sentencia (1) anteriror.
Finalizado ya el trabajo del script-fu, recuperamos el contexto de trabajo, cerrando la sentencia (1) anteriror.
(gimp-context-pop) Igualmente, cerramos la lista de sentencias que vamos a incluir dentro de una sola acción deshacer, cerrando la sentencia (2) anterior.
(gimp-image-undo-group-end inImg)Así mismo, antes de finalizar el script-fu, vaciamos todos los procesos internos del script
(gimp-displays-flush)) ; Fin Define Por último, vamos a registrar nuestro script-fu en el menú de Gimp.
(script-fu-menu-register "script-fu-mi-plantilla"
"<Image>/Script-Fu/ACP")
No hay comentarios:
Publicar un comentario