; Script-Fu butterfly_twist.scm
; 
;
;	Copyright (C) 2013 samj ( http://aljacom.com/~gmic/ )
;
;	Licence GPL
;		Ce fichier est le Script-Fu "Butterfly..." pour Gimp. 
;		Ce Script-Fu "Butterfly..." est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes de la GNU General Public License
;		telle que publiée par la Free Software Foundation ; soit la version 3 de la licence, soit (à votre gré) toute version ultérieure.
;		Ce Script-Fu "Butterfly..." est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; 
;		pas même la garantie implicite de COMMERCIABILISABILITÉ ni d'ADÉQUATION à UN OBJECTIF PARTICULIER.
;		Consultez la GNU General Public License pour plus de détails.
;		Vous devez avoir reçu une copie de la GNU General Public License en même temps que GIMP ; si ce n'est pas le cas, consultez <http://www.gnu.org/licenses>
;
;	Ce fichier butterfly_twist.scm est édité avec Notepad++    http://notepad-plus-plus.org/
;
;	Version 20130317 (origine)
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
;	Ce script est un exemple employant le filtre "Twist" version 2.1 
;
;	Accès sur l'image par :
;
;	Filtres > Distorsions > Butterfly...
;	Filters > Distorts > Butterfly...
;
;
;	Pour commencer il est préférable de ne pas modifier les valeurs  "Parameter 1 a1 float"  à  "Parameter 8 a8 float".
;	Essayer les options "Effects".
;	La position "Standard Effects" donne les réglages d'origine du filtre Twist.
;	Les valeurs des paramètres sont affichées dans la console d'erreurs si l'option "TWIST Display Filter Settings" est validée.
;	Si les paramètres  "Parameter 1 a1 float"  à  "Parameter 8 a8 float"  sont à 0 les pré-réglages ne sont pas affectés.
;	Lire les valeurs vraies des paramètres sur la console d'erreurs.
;
;
;
;	To begin with this script-fu, do not to change the values of  "Parameter 1 a1 float"  to  "Parameter 8 a8 float".
;	Try the options "Effects".
;	Position "Standard Effects" gives the original settings of the filter Twist.
;	The parameter values are displayed in the "error console" if the option "TWIST Display Filter Settings" is enabled.
;	If the parameters  "Parameter 1 a1 float"  to  "Parameter 8 a8 float"  are set to 0 the presets are not affected.
;	Read the true values of parameters with the "error console".
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


		
(define	
	(
		script-fu-butterfly-twist-samj
		image
		drawable
		run_mode
		Parameter_1
		Parameter_2
		Parameter_3
		Parameter_4
		Parameter_5
		Parameter_6
		Parameter_7
		Parameter_8
		Use_cutoff
		r_The_cutoff_radius
		dr_The_falloff_radius
		The_current_function
		operating_mode
		Effects
		My_Settings
		Display_Filter_Settings
	)
	(let* 
		(

			(message (car (gimp-message-get-handler)))
			(Fonction_En_Texte)

		)

		(gimp-undo-push-group-start image)

;******************************************************************************************************


		
		(if (= Effects 0) ; butterfly , prépositionner les valeurs si les curseurs sont à 0 et choisir R(phi) - cosine
			(begin

						(set! The_current_function 1 ) ; "R(phi) - cosine"			1
						
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 0.1 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 4.0 )
								; (gimp-message (number->string Parameter_2))
							)
						)
						(if (= Parameter_3 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_3 0.1 )
								; (gimp-message (number->string Parameter_3))
							)
						)	


			)

		)





;******************************************************************************************************





		(if (= Effects 1) ; Abstract Figure
			(begin


					(plug-in-Twist 
						run_mode	;      GIMP_PDB_INT32, run_mode, Interactive, non-interactive
						image		;      GIMP_PDB_IMAGE, image, Input image
						drawable	;      GIMP_PDB_DRAWABLE, drawable, Input drawable
						2.75		;      GIMP_PDB_FLOAT, a1, float parameter #1
						-2.75		;      GIMP_PDB_FLOAT, a2, float parameter #2
						3			;      GIMP_PDB_FLOAT, a3, float parameter #3
						0			;      GIMP_PDB_FLOAT, a4, float parameter #4
						-3			;      GIMP_PDB_FLOAT, a5, float parameter #5
						0			;      GIMP_PDB_FLOAT, a6, float parameter #6
						0			;      GIMP_PDB_FLOAT, a7, float parameter #7
						0			;      GIMP_PDB_FLOAT, a8, float parameter #8
						"unused"	;      GIMP_PDB_STRING , lettering01, lettering #1
						"unused"	;      GIMP_PDB_STRING , lettering02, lettering #2
						"unused"	;      GIMP_PDB_STRING , lettering03, lettering #3
						"unused"	;      GIMP_PDB_STRING , lettering04, lettering #4
						"unused"	;      GIMP_PDB_STRING , lettering05, lettering #5
						"unused"	;      GIMP_PDB_STRING , lettering06, lettering #6
						"unused"	;      GIMP_PDB_STRING , lettering07, lettering #7
						"unused"	;      GIMP_PDB_STRING , lettering08, lettering #8
						0			;      GIMP_PDB_INT32, use_cutoff, Use cutoff or not
						0.5			;      GIMP_PDB_FLOAT, r, The cutoff radius
						0.2			;      GIMP_PDB_FLOAT, dr, The falloff radius
						6			;      GIMP_PDB_INT32, current_function, The current function
											; "R(r) - 4th order poly"	0
											; "R(phi) - cosine"			1
											; "Phi(r) - 4th order poly"	2
											; "Phi(phi) - cosine"		3
											; "R(r)Phi(phi)"			4
											; "R(r)R(phi)"				5
											; "Cosines"					6
											; "Gauss"					7
											; "XY 4th Order"			8
						0			;      GIMP_PDB_INT32, operating_mode ( 0=normal 1=mémorisation des valeurs )
					)



					; code de butterfly
					(set! The_current_function 1 ) ; "R(phi) - cosine"			1
					
					(if (= Parameter_1 0) ; utiliser la valeur par défaut
						(begin
							(set! Parameter_1 0.1 )
							; (gimp-message (number->string Parameter_1))
						)
					)
					(if (= Parameter_2 0) ; utiliser la valeur par défaut
						(begin
							(set! Parameter_2 4.0 )
							; (gimp-message (number->string Parameter_2))
						)
					)
					(if (= Parameter_3 0) ; utiliser la valeur par défaut
						(begin
							(set! Parameter_3 0.1 )
							; (gimp-message (number->string Parameter_3))
						)
					)	


			)

		)



;******************************************************************************************************


		
		(if (= Effects 2) ; effets standard , prépositionner les valeurs si les curseurs sont à 0
			(begin
				(if (= The_current_function 0) ; "R(r) - 4th order poly"	0
					(begin
						(if (= Parameter_4 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_4 -3.5 )
								; (gimp-message (number->string Parameter_4))
							)
						)						
					)
				)

				;__________________________

				(if (= The_current_function 1) ; "R(phi) - cosine"			1
					(begin
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 -0.65 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 0.35 )
								; (gimp-message (number->string Parameter_2))
							)
						)						
					)
				)

				;__________________________

				(if (= The_current_function 2) ; "Phi(r) - 4th order poly"	2
					(begin
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 1.3 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 0.9 )
								; (gimp-message (number->string Parameter_2))
							)
						)
						(if (= Parameter_3 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_3 -10.0 )
								; (gimp-message (number->string Parameter_3))
							)
						)
						(if (= Parameter_4 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_4 -10.0 )
								; (gimp-message (number->string Parameter_4))
							)
						)	
					)
				)

				;__________________________

				(if (= The_current_function 3) ; "Phi(phi) - cosine"		3
					(begin
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 0.8 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 1.0 )
								; (gimp-message (number->string Parameter_2))
							)
						)						
					)
				)

				;__________________________

				(if (= The_current_function 4) ; "R(r)Phi(phi)"			4
					(begin
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 1.0 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_5 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_5 0.8 )
								; (gimp-message (number->string Parameter_5))
							)
						)
						(if (= Parameter_6 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_6 1.0 )
								; (gimp-message (number->string Parameter_6))
							)
						)
					)
				)

				;__________________________

				(if (= The_current_function 5) ; "R(r)R(phi)"				5
					(begin
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 2.1 )
								; (gimp-message (number->string Parameter_2))
							)
						)
						(if (= Parameter_3 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_3 -0.5 )
								; (gimp-message (number->string Parameter_3))
							)
						)
						(if (= Parameter_4 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_4 10.0 )
								; (gimp-message (number->string Parameter_4))
							)
						)
						(if (= Parameter_5 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_5 -0.65 )
								; (gimp-message (number->string Parameter_5))
							)
						)
						(if (= Parameter_6 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_6 0.35 )
								; (gimp-message (number->string Parameter_6))
							)
						)
					)
				)

				;__________________________

				(if (= The_current_function 6) ; "Cosines"					6
					(begin
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 0.8 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 0.1 )
								; (gimp-message (number->string Parameter_2))
							)
						)
						(if (= Parameter_3 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_3 3.0 )
								; (gimp-message (number->string Parameter_3))
							)
						)	
						(if (= Parameter_4 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_4 0.1 )
								; (gimp-message (number->string Parameter_4))
							)
						)	
						(if (= Parameter_5 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_5 0.1 )
								; (gimp-message (number->string Parameter_5))
							)
						)	
						(if (= Parameter_6 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_6 0.1 )
								; (gimp-message (number->string Parameter_6))
							)
						)	
					)
				)

				;__________________________

				(if (= The_current_function 7) ; "Gauss"					7
					(begin
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 4.0 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 0.1 )
								; (gimp-message (number->string Parameter_2))
							)
						)
						(if (= Parameter_5 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_5 -9.0 )
								; (gimp-message (number->string Parameter_5))
							)
						)
					)
				)


				;__________________________

				(if (= The_current_function 8) ; "XY 4th Order"			8
					(begin
						(if (= Parameter_1 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_1 0.5 )
								; (gimp-message (number->string Parameter_1))
							)
						)
						(if (= Parameter_2 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_2 -3.0 )
								; (gimp-message (number->string Parameter_2))
							)
						)
						(if (= Parameter_3 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_3 2.0 )
								; (gimp-message (number->string Parameter_3))
							)
						)	
						(if (= Parameter_4 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_4 -10.0 )
								; (gimp-message (number->string Parameter_4))
							)
						)	
						(if (= Parameter_5 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_5 1.5 )
								; (gimp-message (number->string Parameter_5))
							)
						)	
						(if (= Parameter_6 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_6 6.0 )
								; (gimp-message (number->string Parameter_6))
							)
						)
						(if (= Parameter_7 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_7 2.0 )
								; (gimp-message (number->string Parameter_7))
							)
						)	
						(if (= Parameter_8 0) ; utiliser la valeur par défaut
							(begin
								(set! Parameter_8 2.0 )
								; (gimp-message (number->string Parameter_8))
							)
						)
					)
				)


			)

		)



;******************************************************************************************************


	(if (= Display_Filter_Settings 1) ; effets standard , prépositionner les valeurs si les curseurs sont à 0
		(begin
				;; sélectionner la console erreurs pour envoyer un message
				(gimp-message-set-handler 2)

				(if (= The_current_function 0) (set! Fonction_En_Texte "R(r) - 4th order poly" ) )
				(if (= The_current_function 1) (set! Fonction_En_Texte "R(phi) - cosine" ) )
				(if (= The_current_function 2) (set! Fonction_En_Texte "Phi(r) - 4th order poly" ) )
				(if (= The_current_function 3) (set! Fonction_En_Texte "Phi(phi) - cosine" ) )
				(if (= The_current_function 4) (set! Fonction_En_Texte "R(r)Phi(phi)" ) )
				(if (= The_current_function 5) (set! Fonction_En_Texte "R(r)R(phi)" ) )
				(if (= The_current_function 6) (set! Fonction_En_Texte "Cosines" ) )
				(if (= The_current_function 7) (set! Fonction_En_Texte "Gauss" ) )
				(if (= The_current_function 8) (set! Fonction_En_Texte "XY 4th Order" ) )

				(gimp-message 
					(string-append My_Settings "\nParameter 1...8 =\n" 
						(number->string Parameter_1) "\n" 
						(number->string Parameter_2) "\n" 
						(number->string Parameter_3) "\n" 
						(number->string Parameter_4) "\n" 
						(number->string Parameter_5) "\n" 
						(number->string Parameter_6) "\n" 
						(number->string Parameter_7) "\n" 
						(number->string Parameter_8) 
						"\ncutoff r dr function =\n"
						(number->string Use_cutoff) "\n"
						(number->string r_The_cutoff_radius) "\n"
						(number->string dr_The_falloff_radius) "\n"
						Fonction_En_Texte
						"\n--------------------\n"			
					)
				)
		)
	)

	;; rétablir le mode message
	(gimp-message-set-handler message)		

;******************************************************************************************************

		(plug-in-Twist 
			run_mode				;      GIMP_PDB_INT32, run_mode, Interactive, non-interactive
			image					;      GIMP_PDB_IMAGE, image, Input image
			drawable				;      GIMP_PDB_DRAWABLE, drawable, Input drawable
			Parameter_1				;      GIMP_PDB_FLOAT, a1, float parameter #1
			Parameter_2				;      GIMP_PDB_FLOAT, a2, float parameter #2
			Parameter_3				;      GIMP_PDB_FLOAT, a3, float parameter #3
			Parameter_4				;      GIMP_PDB_FLOAT, a4, float parameter #4
			Parameter_5				;      GIMP_PDB_FLOAT, a5, float parameter #5
			Parameter_6				;      GIMP_PDB_FLOAT, a6, float parameter #6
			Parameter_7				;      GIMP_PDB_FLOAT, a7, float parameter #7
			Parameter_8				;      GIMP_PDB_FLOAT, a8, float parameter #8
			"unused"				;      GIMP_PDB_STRING , lettering01, lettering #1
			"unused"				;      GIMP_PDB_STRING , lettering02, lettering #2
			"unused"				;      GIMP_PDB_STRING , lettering03, lettering #3
			"unused"				;      GIMP_PDB_STRING , lettering04, lettering #4
			"unused"				;      GIMP_PDB_STRING , lettering05, lettering #5
			"unused"				;      GIMP_PDB_STRING , lettering06, lettering #6
			"unused"				;      GIMP_PDB_STRING , lettering07, lettering #7
			"unused"				;      GIMP_PDB_STRING , lettering08, lettering #8
			Use_cutoff				;      GIMP_PDB_INT32, use_cutoff, Use cutoff or not
			r_The_cutoff_radius		;      GIMP_PDB_FLOAT, r, The cutoff radius
			dr_The_falloff_radius	;      GIMP_PDB_FLOAT, dr, The falloff radius
			The_current_function	;      GIMP_PDB_INT32, current_function, The current function
												; "R(r) - 4th order poly"	0
												; "R(phi) - cosine"			1
												; "Phi(r) - 4th order poly"	2
												; "Phi(phi) - cosine"		3
												; "R(r)Phi(phi)"			4
												; "R(r)R(phi)"				5
												; "Cosines"					6
												; "Gauss"					7
												; "XY 4th Order"			8
			operating_mode			;      GIMP_PDB_INT32, operating_mode ( 0=normal 1=mémorisation des valeurs )
		)



		(gimp-undo-push-group-end image)
		(gimp-displays-flush)


	)
)





(script-fu-register "script-fu-butterfly-twist-samj"
                    _"<Image>/Filters/Distorts/Butterfly..."
                    "Butterfly with twist plug-in."
                    "samj"
                    "samj"
                    "20131703"
                    "RGB*"
                    SF-IMAGE    "Image"     0
                    SF-DRAWABLE "Drawable"  0
					SF-ADJUSTMENT "run_mode" '(1 0 1 1 1 0 1)
					SF-ADJUSTMENT "Parameter 1 a1 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Parameter 2 a2 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Parameter 3 a3 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Parameter 4 a4 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Parameter 5 a5 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Parameter 6 a6 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Parameter 7 a7 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Parameter 8 a8 float" '(0 -10 10 0.01 0.1 3 1)
					SF-ADJUSTMENT "Use cutoff or not int" '(1 0 1 1 1 0 1)
					SF-ADJUSTMENT "r   The cutoff radius float" '(1 0 1 0.01 0.1 3 1)
					SF-ADJUSTMENT "dr  The falloff radius float" '(0.2 0.01 1 0.01 0.1 3 1)
					SF-OPTION "The current function int" '("R(r) - 4th order poly" "R(phi) - cosine" "Phi(r) - 4th order poly" "Phi(phi) - cosine" "R(r)Phi(phi)" "R(r)R(phi)" "Cosines" "Gauss" "XY 4th Order")
					SF-OPTION "Operating Mode" '("Normal" "Storing The Parameters")
					SF-OPTION "Effects" '("Butterfly Effect" "Abstract (The result depends on the W & H)" "Standard Effects")
					SF-STRING "My Settings" "My first filter :"
					SF-TOGGLE "TWIST Display Filter Settings" TRUE


)

;; FIN






