root/programs/gimp/gimp-script_fu.txt
Math
(+ 1 3) = 4
(+ 4 4 (+ 3 1) 4) = 16
Vars
(let*
(
(var1 123)
(var2 321)
)
(+ var1 var2)
)
(let* ((var1 123)(var2 321))(+ var1 var2)) = 444
(let* ((x1 123))(set! x1 321)) = 321
(let* ((x1 123))(set! x1 (+ x1 x1))) = 246
(let* ((x1 123))(set! x1 321)(+ x1 x1)) = 642
Loops
(let* ((i 0)) (while (< i 5) (set! i (+ i 1))) i)
Funcs
(define
(
functionName
var1
var2
var3
)
(+ var1 var2 var3)
)
(define (functionName var1 var2 var3)(+ var1 var2 var3))
(functionName 1 2 3) = 6
Get list of layers
* image = number in title
* Image must have two layers; bottom heightmap, top skin
(let*
(
(image 5)
(layers (gimp-image-get-layers 5))
(width 800)
(height 600)
(height2 300)
(offset 300)
(heightmap 0)
(skin 0)
(heightmap2 0)
(skin2 0)
(target 0)
)
;Undo for the whole thing
(gimp-undo-push-group-start image)
;Get existing layers
(set! heightmap (aref (cadr layers) 1))
(set! skin (aref (cadr layers) 0))
;Copy layers
(set! heightmap2 (car (gimp-layer-copy heightmap image)))
(gimp-image-add-layer image heightmap2 -1)
(set! skin2 (car (gimp-layer-copy skin image)))
(gimp-image-add-layer image skin2 -1)
;Resize layers
(gimp-layer-scale heightmap2 width height2 0)
(gimp-layer-translate heightmap2 0 height2)
(gimp-layer-resize-to-image-size heightmap2)
(gimp-layer-scale skin2 width height2 0)
(gimp-layer-translate skin2 0 height2)
(gimp-layer-resize-to-image-size skin2)
;Create target layer
(set! target (car (gimp-layer-new image width height 1 "Result" 100 0)))
(gimp-image-add-layer image target -1)
;Init selection
(gimp-selection-all image)
;Loop through
(let*
(
(trans 0)
(col 255)
(pasted 0)
(color '())
)
(while (> col -1)
;Copy selected and paste to current height
(gimp-edit-copy skin2)
(set! pasted (car (gimp-edit-paste target 1)))
(gimp-floating-sel-to-layer pasted)
(gimp-layer-translate pasted 0 trans)
(set! target (car (gimp-image-merge-down image pasted 0)))
;Remove level from selected
(set! color (list col col col))
(gimp-by-color-select heightmap2 color 0 1 0 0 0 0)
;Next step
(set! trans (- trans 1))
(set! col (- col 1))
)
)
;Display finished image
(gimp-selection-clear image)
(gimp-edit-copy target)
(gimp-display-new (car (gimp-edit-paste-as-new)))
;Clean up
(gimp-image-remove-layer image heightmap2)
(gimp-image-remove-layer image skin2)
(gimp-image-remove-layer image target)
;Undo for the whole thing
(gimp-undo-push-group-end image)
)