(define (script-fu-kaleidoscope image layer playback)

	(let* (
		(layer-width (car (gimp-drawable-width layer)))
		(layer-height (car (gimp-drawable-height layer)))
		(half-width (/ (car (gimp-drawable-width layer)) 2))
		(half-height (/ (car (gimp-drawable-height layer)) 2))
		(radian 0.0174533)
		(frames 179)
		(frames-reset frames)
	         )

	        (gimp-context-push)
	        (gimp-image-undo-group-start image)


		(while (> frames 0)
			(gimp-image-add-layer image (car (gimp-layer-new-from-drawable layer image)) FALSE)
		(set! frames (- frames 1)))


	(set! frames frames-reset)


		(while (> frames 0)
			(gimp-drawable-transform-rotate-default (vector-ref (cadr (gimp-image-get-layers image)) frames) (- 0 (* radian frames)) TRUE 0 0 FALSE 1)
			(gimp-layer-flatten (vector-ref (cadr (gimp-image-get-layers image)) frames))
		(set! frames (- frames 1)))


	(set! frames frames-reset)


		(while (> frames 0)
			(gimp-rect-select image half-width 0 half-width half-height 2 FALSE 0)
			(gimp-edit-copy (vector-ref (cadr (gimp-image-get-layers image)) frames))

			(gimp-rect-select image 0 0 half-width half-height 2 FALSE 0)
			(gimp-edit-paste (vector-ref (cadr (gimp-image-get-layers image)) frames) TRUE)
			(gimp-floating-sel-anchor (car (gimp-image-get-floating-sel image)))
			(gimp-drawable-transform-flip-simple (vector-ref (cadr (gimp-image-get-layers image)) frames) 0 TRUE 0 FALSE)
			(gimp-floating-sel-anchor (car (gimp-image-get-floating-sel image)))

			(gimp-rect-select image 0 0 (* half-width 2) half-height 2 FALSE 0)
			(gimp-edit-copy (vector-ref (cadr (gimp-image-get-layers image)) frames))

			(gimp-rect-select image 0 half-height (* half-width 2) half-height 2 FALSE 0)
			(gimp-edit-paste (vector-ref (cadr (gimp-image-get-layers image)) frames) TRUE)
			(gimp-floating-sel-anchor (car (gimp-image-get-floating-sel image)))
			(gimp-drawable-transform-flip-simple (vector-ref (cadr (gimp-image-get-layers image)) frames) 1 TRUE 0 FALSE)
			(gimp-floating-sel-anchor (car (gimp-image-get-floating-sel image)))
		(set! frames (- frames 1)))


	(set! frames frames-reset)

		(gimp-context-set-foreground "black")
		(gimp-ellipse-select image 10 10 (- layer-width 20) (- layer-height 20) 2 TRUE FALSE 0)
		(gimp-selection-invert image)


			(while (> frames -1)
				(gimp-edit-fill (vector-ref (cadr (gimp-image-get-layers image)) frames) 0)
			(set! frames (- frames 1)))


		(gimp-selection-none image)

	        (gimp-image-undo-group-end image)
	        (gimp-context-pop)
	        (if (= playback TRUE) (begin (plug-in-animationplay FALSE image layer)))

	)

        (gimp-displays-flush)

)


(script-fu-register
	"script-fu-kaleidoscope"
	"<Image>/File/Create/Patterns/Kaleidoscope"
	"Mimics a Kaleidoscope"
	"SteveMi"
	"Unrestricted"
	"2015"
	"*"
	SF-IMAGE	"Image" 0
	SF-DRAWABLE	"Layer" 0
	SF-TOGGLE	"Open layers in gimp playback"	TRUE
)
